久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
AD采樣的FPGA程序書寫 Verilog代碼
[打印本頁]
作者:
tt12304975
時間:
2019-4-26 11:05
標題:
AD采樣的FPGA程序書寫 Verilog代碼
提供一段AD采樣的FPGA程序
程序如下
Verilog源程序如下:
//---------------------------------------------------------------------------
//-- 文件名 : Ad_Module.v
//-- 作者 : ZIRCON
//-- 描述 : AD模塊
//---------------------------------------------------------------------------
`define AD_CLK_TIME 10'd49 //1.1M, 909ns,909 / (1 / 50M) = 45 =0x2D
`define AD_CLK_TIME_HALF 10'd24 //909ns / 2 = 454.5ns 45 / 2 = 22
module Ad_Module
(
//Input
CLK_50M,RST_N,
//Output
AD_CS,AD_CLK,AD_DATA,data_out
);
//---------------------------------------------------------------------------
//-- 外部端口聲明
//---------------------------------------------------------------------------
input CLK_50M; //時鐘的端口,開發板用的50M晶振
input RST_N; //復位的端口,低電平復位
input AD_DATA; //AD數據端口
output AD_CS; //AD片選端口
output AD_CLK; //AD時鐘端口,最大不超過1.1MHz
output [ 7:0] data_out; //AD模數轉換完成的數據輸出
//---------------------------------------------------------------------------
//-- 內部端口聲明
//---------------------------------------------------------------------------
reg AD_CS; //AD片選信號端口
reg AD_CS_N; //AD_CS的下一個狀態
reg AD_CLK; //AD時鐘,最大不超過1.1MHz
reg AD_CLK_N; //AD_CLK的下一個狀態
reg [ 2:0] ad_fsm_cs; //狀態機的當前狀態
reg [ 2:0] ad_fsm_ns; //狀態機的下一個狀態
reg [ 5:0] time_cnt; //用于記錄一個時鐘所用時間的定時器
reg [ 5:0] time_cnt_n; //time_cnt的下一個狀態
reg [ 5:0] bit_cnt; //用來記錄時鐘周期個數的計數器
reg [ 5:0] bit_cnt_n; //bit_cnt的下一個狀態
reg [ 7:0] data_out; //用來保存穩定的AD數據
reg [ 7:0] data_out_n; //data_out的下一個狀態
reg [ 7:0] ad_data_reg; //用于保存數據的移位寄存器
reg [ 7:0] ad_data_reg_n; //ad_data_reg_n的下一個狀態
parameter FSM_IDLE = 3'h0; //狀態機的初始狀態;
parameter FSM_READY = 3'h1; //滿足CS有效時的第一個1.4us的延時狀態
parameter FSM_DATA = 3'h2; //讀取8個數據狀態
parameter FSM_WAIT_CONV = 3'h3; //等待轉換狀態,等待17us;
parameter FSM_END = 3'h4; //結束的狀態
//---------------------------------------------------------------------------
//-- 邏輯功能實現
//---------------------------------------------------------------------------
//時序電路,用來給ad_fsm_cs寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復位
ad_fsm_cs <= 1'b0; //初始化ad_fsm_cs值
else
ad_fsm_cs <= ad_fsm_ns; //用來給ad_fsm_ns賦值
end
//組合電路,用來實現狀態機
always @ (*)
begin
case(ad_fsm_cs) //判斷狀態機的當前狀態
FSM_IDLE:
//3 x 0.909us = 2.727us用于初始化延時
if((bit_cnt == 6'd2 ) && (time_cnt == `AD_CLK_TIME))
ad_fsm_ns = FSM_READY; //如果空閑狀態完成就進入延時狀態
else
ad_fsm_ns = ad_fsm_cs; //否則保持原狀態不變
FSM_READY:
//2 x 0.909us = 1.818us用于延遲1.4us
if((bit_cnt == 6'd2 ) && (time_cnt == `AD_CLK_TIME))
ad_fsm_ns = FSM_DATA; //如果延時狀態完成就進入讀取數據狀態
else
ad_fsm_ns = ad_fsm_cs; //否則保持原狀態不變
FSM_DATA:
//讀取數據8位,1~8個時鐘脈沖
if((bit_cnt == 6'd8 ) && (time_cnt == `AD_CLK_TIME))
ad_fsm_ns = FSM_WAIT_CONV;//如果讀取數據狀態完成就進入等待狀態
else
ad_fsm_ns = ad_fsm_cs; //否則保持原狀態不變
FSM_WAIT_CONV:
//19 x 0.909us = 17.271us用于延遲17us
if((bit_cnt == 6'd10) && (time_cnt == `AD_CLK_TIME))
ad_fsm_ns = FSM_END; //如果等待狀態完成就進入讀取狀態
else
ad_fsm_ns = ad_fsm_cs; //否則保持原狀態不變
FSM_END:
ad_fsm_ns = FSM_READY; //完成一次數據轉換,進入下一次轉換
default:ad_fsm_ns = FSM_IDLE;
endcase
end
//時序電路,用來給time_cnt寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復位
time_cnt <= 6'h0; //初始化time_cnt值
else
time_cnt <= time_cnt_n; //用來給time_cnt賦值
end
//組合電路,實現0.909us的定時計數器
always @ (*)
begin
if(time_cnt == `AD_CLK_TIME) //判斷0.909us時間
time_cnt_n = 6'h0; //如果到達0.909us,定時器清零
else
time_cnt_n = time_cnt + 6'h1; //如果未到0.909us,定時器繼續加1
end
//時序電路,用來給bit_cnt寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復位
bit_cnt <= 6'h0; //初始化bit_cnt值
else
bit_cnt <= bit_cnt_n; //用來給bit_cnt賦值
end
//組合電路,用來記錄時鐘周期個數的計數器
always @ (*)
begin
if(ad_fsm_cs != ad_fsm_ns) //判斷狀態機的當前狀態
bit_cnt_n = 6'h0; //如果當前的狀態不等于下一個狀態,計時器就清零
else if(time_cnt == `AD_CLK_TIME_HALF)//判斷0.4545us時間
bit_cnt_n = bit_cnt + 6'h1; //如果到達0.4545us,計數器就加1
else
bit_cnt_n = bit_cnt; //否則計數器保持不變
end
//時序電路,用來給AD_CLK寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復位
AD_CLK <= 1'h0; //初始化AD_CLK值
else
AD_CLK <= AD_CLK_N; //用來給AD_CLK賦值
end
//組合電路,用來生成AD的時鐘波形
always @ (*)
begin
if(ad_fsm_cs != FSM_DATA) //判斷狀態機的當前狀態
AD_CLK_N = 1'h0; //如果當前的狀態不等于讀取數據狀態,AD_CLK_N就置0
else if(time_cnt == `AD_CLK_TIME_HALF)//判斷0.4545us時間
AD_CLK_N = 1'h1; //如果到達0.4545us,ADC_CLK_N就置1
else if(time_cnt == `AD_CLK_TIME)//判斷0.909us時間
AD_CLK_N = 1'h0; //如果到達0.909us,AD_CLK_N就置0
else
AD_CLK_N = AD_CLK; //否則保持不變
end
//時序電路,用來給AD_CS寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復位
AD_CS <= 1'h0; //初始化AD_CS值
else
AD_CS <= AD_CS_N; //用來給AD_CS賦值
end
//組合電路,用來生成AD的片選波形
always @ (*)
begin
if((ad_fsm_cs == FSM_DATA) || (ad_fsm_cs == FSM_READY))//判斷狀態機的當前狀態
AD_CS_N = 1'h0;//如果當前的狀態等于讀取數據狀態或等于延時1.4us狀態,AD_CS_N就置0
else
AD_CS_N = 1'h1;//如果當前的狀態不等于讀取數據狀態或不等于延時1.4us狀態,AD_CS_N就置1
end
//時序電路,用來給ad_data_reg寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復位
ad_data_reg <= 8'h0; //初始化ad_data_reg值
else
ad_data_reg <= ad_data_reg_n; //用來給ad_data_reg賦值
end
//組合電路,將AD線上的數據保存到移位寄存器中
always @(*)
begin
if((ad_fsm_cs == FSM_DATA) && (!AD_CLK) && (AD_CLK_N))//判斷每一個時鐘的上升沿
ad_data_reg_n = {ad_data_reg[6:0],AD_DATA};//將數據存入移位寄存器中,高位優先
else
ad_data_reg_n = ad_data_reg; //否則保持不變
end
//時序電路,用來給data_out寄存器賦值
always @ (posedge CLK_50M or negedge RST_N)
begin
if(!RST_N) //判斷復位
data_out <= 8'h0; //初始化data_out值
else
data_out <= data_out_n; //用來給data_out賦值
end
//組合電路,將移位寄存器中的數據存入data_out中,可用于輸出
always @ (*)
begin
if(ad_fsm_cs == FSM_END) //判斷復位
data_out_n = ad_data_reg; //初始化data_out值
else
data_out_n = data_out; //用來給data_out賦值
end
endmodule
復制代碼
所有資料51hei提供下載:
Ad_Module.rar
(2.06 KB, 下載次數: 80)
2019-4-26 11:04 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
zhangboliangq
時間:
2019-5-15 20:34
這個怎么不出波形
作者:
清夢一場
時間:
2019-5-16 09:52
厲害正是我要的 謝樓主了
作者:
fsjhs
時間:
2019-10-8 16:01
fpga對ad芯片采集到的數據怎么處理
作者:
風與風車的愛戀
時間:
2019-11-6 20:59
好東西啊
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩黄色免费视频
|
另类小说第一草
|
亚洲91在线
|
99在线免费观看
|
亚洲黄色av
|
日韩av在线免费看
|
亚洲综合五月
|
一区二区三区国产精品
|
欧美黄色片视频
|
污视频网站在线观看
|
国产一级片免费观看
|
国产黄色一级毛片
|
国产精品尤物
|
黄色小视频免费观看
|
欧美精品区
|
国产一级黄色录像
|
日韩精品一区二区三区中文在线
|
91久久国产综合久久91精品网站
|
欧美视频亚洲视频
|
国产成人在线免费观看
|
91视频观看
|
亚洲成人国产
|
欧美日韩精品在线观看
|
欧美日韩亚洲天堂
|
性欧美69
|
日韩免费一级片
|
蜜桃视频一区二区
|
色综合五月天
|
久久综合99
|
麻豆国产一区二区三区四区
|
国产午夜三级一区二区三
|
韩日欧美
|
欧美色图一区二区
|
久久久久久久成人
|
成人av免费看
|
中文字幕理论片
|
亚洲狠狠
|
www.精品国产
|
日韩欧美精品一区二区
|
国产一级一片免费播放放a 男男成人高潮片免费网站 精品视频在线观看
|
亚洲国产成人在线
|