• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

AD7606時(shí)序控制及PWM輸出Verilog代碼Quartus仿真

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-240104103010304.doc

共1個(gè)文件

名稱:AD7606時(shí)序控制PWM輸出Verilog代碼Quartus仿真

軟件:Quartus

語言:Verilog

代碼功能:

AD7606B輸入,(4800-輸入)/8(仿真時(shí)=學(xué)號(hào)后3位),PWM輸出(600=100%)。

每位交一個(gè)pdf文檔,包括方案分析(聯(lián)系應(yīng)用)、FPGA連線圖、VHD文件(含注釋)、編譯報(bào)告、完整功能仿真結(jié)果(詳加說明)、亮點(diǎn)(研究性內(nèi)容)、參考文獻(xiàn)(規(guī)范引用)。

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

演示視頻:

設(shè)計(jì)文檔:

1. 工程文件

2. 程序文件

3. 程序編譯

4. RTL圖

5. 仿真圖

整體仿真圖

AD7606B模塊仿真

PWM模塊仿真

部分代碼展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
???USE?ieee.std_logic_arith.all;
???
--adc7606b,硬件模式,并行輸出
ENTITY?AD7606b_control?IS
???PORT?(
??????sys_clk???:?IN?STD_LOGIC;--時(shí)鐘
??????reset?????:?IN?STD_LOGIC;--復(fù)位
??????AD7606_RST???:?OUT?STD_LOGIC;--高電平復(fù)位
??????AD7606_RD????????:?OUT?STD_LOGIC;--低電平讀
??????AD7606_CVT???:?OUT?STD_LOGIC;--convst
??????AD7606_CS????????:?OUT?STD_LOGIC;--低電平使能
??????AD7606_OS????????:?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0);--輸出低電平
??????AD7606_BUSY??????:?IN?STD_LOGIC;--忙
??????AD7606_D?????????:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0);--并行輸入AD
??????channel_one???????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--輸出通道1
??????channel_two???????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--輸出通道2
??????channel_three???????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--輸出通道3
??????channel_four???????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--輸出通道4
??????channel_five???????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--輸出通道5
??????channel_six???????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--輸出通道6
??????channel_seven???????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--輸出通道7
??????channel_eight???????:?OUT?STD_LOGIC_VECTOR(15?DOWNTO?0)?--輸出通道8
???);
END?AD7606b_control;
ARCHITECTURE?beh?OF?AD7606b_control?IS
???type?state_type?is?(s_start?,s_gen_cvt,s_get_busy?,s_rd_data?,s_sample_da?);
???SIGNAL?current_state?????:?state_type;
???SIGNAL?next_state???????:?state_type;
???SIGNAL?cvt_cnt???????:?STD_LOGIC_VECTOR(1?DOWNTO?0);
???SIGNAL?channel_cnt????????:?STD_LOGIC_VECTOR(2?DOWNTO?0);
???SIGNAL?AD7606_CVT_s?:?STD_LOGIC;
???SIGNAL?AD7606_read??????:?STD_LOGIC;
???SIGNAL?read_over??????????:?STD_LOGIC;
???SIGNAL?sample_pulse???:?STD_LOGIC;
???SIGNAL?sample_cnt???????:?integer;
BEGIN
???--狀態(tài)切換
???PROCESS?(sys_clk,?reset)
???BEGIN
??????IF?(reset=?'0')?THEN
?????????current_state?<=?s_start;
??????ELSIF?(sys_clk'EVENT?AND?sys_clk?=?'1')?THEN
?????????current_state?<=?next_state;
??????END?IF;
???END?PROCESS;
???
???--狀態(tài)控制
???PROCESS?(current_state,?sample_pulse,?AD7606_CVT_s,?AD7606_BUSY,?read_over)
???BEGIN
??????next_state?<=?current_state;
??????CASE?current_state?IS
?????????WHEN?s_start?=>
????????????IF?(sample_pulse?=?'1')?THEN--開始采樣
???????????????next_state?<=?s_gen_cvt;
????????????END?IF;
?????????WHEN?s_gen_cvt?=>
????????????IF?(AD7606_CVT_s?=?'1')?THEN--高電平后跳轉(zhuǎn)
???????????????next_state?<=?s_get_busy;
????????????END?IF;
?????????WHEN?s_get_busy?=>
????????????IF?((NOT(AD7606_BUSY))?=?'1')?THEN
next_state?<=?s_rd_data;--空閑后開始讀數(shù)
????????????END?IF;
?????????WHEN?s_rd_data?=>--讀數(shù)
????????????next_state?<=?s_sample_da;
?????????WHEN?s_sample_da?=>
????????????IF?(read_over?=?'1')?THEN--讀完
???????????????next_state?<=?s_start;
????????????END?IF;
?????????WHEN?OTHERS?=>
????????????next_state?<=?s_start;
??????END?CASE;
???END?PROCESS;
???
???--輸出控制
???PROCESS?(sys_clk,?reset)
???BEGIN
??????IF?(reset=?'0')?THEN
?????????AD7606_CS?<=?'1';
?????????AD7606_CVT_s?<=?'0';
?????????cvt_cnt?<=?"00";
?????????AD7606_read?<=?'1';
?????????read_over?<=?'0';
??????ELSIF?(sys_clk'EVENT?AND?sys_clk?=?'1')?THEN
?????????CASE?current_state?IS
????????????WHEN?s_start?=>--開始狀態(tài)
???????????????AD7606_CS?<=?'1';
???????????????cvt_cnt?<=?"00";
???????????????AD7606_CVT_s?<=?'0';
???????????????AD7606_read?<=?'1';
???????????????read_over?<=?'0';
????????????WHEN?s_gen_cvt?=>--拉高CVT
???????????????IF?(cvt_cnt?<?"10")?THEN
??????????????????cvt_cnt?<=?cvt_cnt?+?"01";
???????????????ELSE
??????????????????AD7606_CVT_s?<=?'1';
??????????????????cvt_cnt?<=?"00";
???????????????END?IF;
????????????WHEN?s_rd_data?=>--cs使能信號(hào)
???????????????AD7606_CS?<=?'0';
????????????WHEN?s_sample_da?=>--讀數(shù)據(jù)
???????????????IF?(AD7606_read?=?'1')?THEN
??????????????????AD7606_read?<=?'0';--讀信號(hào)
???????????????ELSE
??????????????????AD7606_read?<=?'1';
???????????????END?IF;
???????????????IF?(channel_cnt?=?"111")?THEN--讀完
??????????????????read_over?<=?'1';
???????????????END?IF;
WHEN?OTHERS?=>NULL;
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???--輸出AD采樣值
???PROCESS?(sys_clk,?reset)
???BEGIN
??????IF?(reset=?'0')?THEN
?????????channel_one?<=?"0000000000000000";
?????????channel_two?<=?"0000000000000000";
?????????channel_three?<=?"0000000000000000";
?????????channel_four?<=?"0000000000000000";
?????????channel_five?<=?"0000000000000000";
?????????channel_six?<=?"0000000000000000";
?????????channel_seven?<=?"0000000000000000";
?????????channel_eight?<=?"0000000000000000";
?channel_cnt?<=?"000";
??????ELSIF?(sys_clk'EVENT?AND?sys_clk?=?'1')?THEN
?????????IF(?current_state?=s_sample_da?)THEN
???????????????IF?(AD7606_read?=?'0')?THEN
??????????????????channel_cnt?<=?channel_cnt?+?"001";--計(jì)數(shù)
??????????????????CASE?channel_cnt?IS
?????????????????????WHEN?"000"?=>
????????????????????????channel_one?<=?AD7606_D;--通道1
?????????????????????WHEN?"001"?=>
????????????????????????channel_two?<=?AD7606_D;--通道2
?????????????????????WHEN?"010"?=>
????????????????????????channel_three?<=?AD7606_D;--通道3
?????????????????????WHEN?"011"?=>
????????????????????????channel_four?<=?AD7606_D;--通道4
?????????????????????WHEN?"100"?=>
????????????????????????channel_five?<=?AD7606_D;--通道5
?????????????????????WHEN?"101"?=>
????????????????????????channel_six?<=?AD7606_D;--通道6
?????????????????????WHEN?"110"?=>
????????????????????????channel_seven?<=?AD7606_D;--通道7
?????????????????????WHEN?"111"?=>
????????????????????????channel_eight?<=?AD7606_D;--通道8
??????????????????END?CASE;
???????????????END?IF;
?ELSE
channel_cnt?<=?"000";
END?IF;
??????END?IF;
???END?PROCESS;
???
--計(jì)數(shù)
???PROCESS?(sys_clk,?reset)
???BEGIN
??????IF?(reset=?'0')?THEN
?????????sample_cnt?<=?0;
??????ELSIF?(sys_clk'EVENT?AND?sys_clk?=?'1')?THEN
?????????IF?(sample_cnt?=?249)?THEN
????????????sample_cnt?<=?0;--計(jì)數(shù)到249
?????????ELSE
????????????sample_cnt?<=?sample_cnt?+?1;--計(jì)數(shù)
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???--輸出
???AD7606_OS?<=?"000";--0
???AD7606_RST?<=?NOT?reset?;--取反???
???AD7606_CVT?<=?AD7606_CVT_s;
???AD7606_RD?<=?AD7606_read;
???sample_pulse?<=?'1'?when?(sample_cnt?=?249)?else?'0';--采樣
???
END?beh;

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=485

  • 2-240104103010304.doc
    下載

相關(guān)推薦