名稱:AD7321代碼12位ADC,SPI接口模數(shù)轉(zhuǎn)換連接DAC0832輸出(代碼在文末付費(fèi)下載)
軟件:QuartusII
語言:VHDL
代碼功能:
使用VHDL語言編寫代碼,實現(xiàn)AD7321的控制,將模擬信號轉(zhuǎn)換為數(shù)字信號,再經(jīng)過處理后,將數(shù)據(jù)通過DAC0832轉(zhuǎn)換為模擬信號輸出。
AD7321輸入,(2000-輸入)/6(仿真輸出=009),DAC0832輸出。
要求:有vhdl代碼(詳盡注釋),有fpga連線圖,有完整功能仿真結(jié)果,有方案分析。
演示視頻:
FPGA代碼Verilog/VHDL代碼資源下載網(wǎng):www.hdlcode.com
部分代碼展示
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --AD控制模塊,輸出011110011010 ENTITY?AD7321?IS ???PORT?( ??????clk?????:?IN?STD_LOGIC;--時鐘 ??????rst?????:?IN?STD_LOGIC;--復(fù)位 ??????CS_n????:?OUT?STD_LOGIC;--AD控制信號 ??????SCLK????:?OUT?STD_LOGIC;--AD控制信號 ??????DOUT????:?IN?STD_LOGIC;--AD控制信號 ??????DIN?????:?OUT?STD_LOGIC;--AD控制信號 ??????DB??????:?OUT?STD_LOGIC_VECTOR(11?DOWNTO?0)--輸出AD值 ???); END?AD7321; ARCHITECTURE?behaval?OF?AD7321?IS ???TYPE?State_type?IS?(s_init,?s_cs_h,?s_sclk,?s_end);??--?定義狀態(tài) ???SIGNAL?state?:?State_type; ???SIGNAL?cs_h_cnt?:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000";--CS計數(shù) ???SIGNAL?sclk_cnt?:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";--sclk計數(shù) BEGIN --狀態(tài)機(jī)控制 ???PROCESS?(clk,?rst) ???BEGIN ??????IF?(rst?=?'1')?THEN--復(fù)位 ?????????state?<=?s_init; ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN--時鐘上升沿 ?????????CASE?state?IS ????????????WHEN?s_init?=>--初始狀態(tài) ???????????????state?<=?s_cs_h; ????????????WHEN?s_cs_h?=>--cS高電平狀態(tài) ???????????????IF?(cs_h_cnt?>=?"1010")?THEN--計數(shù)10個時鐘 ??????????????????state?<=?s_sclk; ???????????????END?IF; ????????????WHEN?s_sclk?=>--SCLK狀態(tài) ???????????????IF?(sclk_cnt?>=?"00100000")?THEN--計數(shù)32時鐘 ??????????????????state?<=?s_end;--結(jié)束 ???????????????END?IF; ????????????WHEN?s_end?=>--結(jié)束狀態(tài) ???????????????state?<=?s_init; ????????????WHEN?OTHERS?=> ?????????END?CASE; ??????END?IF; ???END?PROCESS; ??? ???--根據(jù)狀態(tài)控制CS信號 ???PROCESS?(clk,?rst) ???BEGIN ??????IF?(rst?=?'1')?THEN ?????????CS_n?<=?'1';--復(fù)位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN--時鐘上升沿 ?????????IF?(state?=?s_cs_h)?THEN--CS高電平狀態(tài) ????????????CS_n?<=?'1';--輸出高電平 ?????????ELSIF?(state?=?s_sclk)?THEN--SCLK狀態(tài) ????????????CS_n?<=?'0';--輸出低電平 ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ???--根據(jù)狀態(tài)控制SCLK信號 ???PROCESS?(clk,?rst) ???BEGIN ??????IF?(rst?=?'1')?THEN ?????????SCLK?<=?'1';--復(fù)位 ??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN--時鐘上升沿 ?????????IF?(state?=?s_sclk)?THEN--SCLK狀態(tài) ????????????SCLK?<=?NOT(sclk_cnt(0));--SCLK輸出sclk_cnt(0)取反信號作為SCLK ?????????ELSIF?(state?=?s_end)?THEN ????????????SCLK?<=?'1'; ?????????END?IF; ??????END?IF; ???END?PROCESS;
設(shè)計文檔:
1. 工程文件
2. 程序文件
連線圖
3. 程序編譯
4. RTL圖
5. 仿真圖
閱讀全文