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

數(shù)字顯示自動(dòng)記分器VHDL代碼Quartus仿真

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

2-240105104959543.doc

共1個(gè)文件

名稱:數(shù)字顯示自動(dòng)記分器VHDL代碼Quartus仿真

軟件:Quartus

語(yǔ)言:VHDL

代碼功能:

數(shù)字顯示自動(dòng)記分器

1.設(shè)計(jì)一個(gè)射擊用的數(shù)字顯示自動(dòng)計(jì)分器,電路共設(shè)18個(gè)模擬開關(guān),K1~K18,分別代表射擊者射中的目標(biāo),射中K1~K9分別得1~9分,射中K10~K18分別得10~90分;

2.要求每射中一次(K1~K18開關(guān)拔動(dòng)一次)單發(fā)計(jì)數(shù)顯示器能自動(dòng)顯示得分?jǐn)?shù),顯示2秒后自動(dòng)消失;

3.每射中一次均應(yīng)將射擊的得分?jǐn)?shù)累計(jì)并顯示;

4.電路應(yīng)具有復(fù)位功能,即每局結(jié)束后,應(yīng)將各計(jì)數(shù)器自動(dòng)清0,為下一次記分作好準(zhǔn)備(手動(dòng)復(fù)位);

5.單發(fā)計(jì)數(shù)顯示和累加計(jì)數(shù)顯示應(yīng)分開;

6.脈神信號(hào)源(自行設(shè)計(jì))為1KHz頻率。

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

演示視頻:

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

1. 工程文件

2. 頂層原理圖

3. 程序文件

4. 程序編譯

5. RTL圖

狀態(tài)圖

6. 仿真圖

部分代碼展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
--控制模塊
ENTITY?score_ctrl?IS
???PORT?(
??????clk????????????:?IN?STD_LOGIC;--時(shí)鐘
??????rst_p??????????:?IN?STD_LOGIC;--復(fù)位
??????k1_p???????????:?IN?STD_LOGIC;--按鍵1~18
??????k2_p???????????:?IN?STD_LOGIC;
??????k3_p???????????:?IN?STD_LOGIC;
??????k4_p???????????:?IN?STD_LOGIC;
??????k5_p???????????:?IN?STD_LOGIC;
??????k6_p???????????:?IN?STD_LOGIC;
??????k7_p???????????:?IN?STD_LOGIC;
??????k8_p???????????:?IN?STD_LOGIC;
??????k9_p???????????:?IN?STD_LOGIC;
??????k10_p??????????:?IN?STD_LOGIC;
??????k11_p??????????:?IN?STD_LOGIC;
??????k12_p??????????:?IN?STD_LOGIC;
??????k13_p??????????:?IN?STD_LOGIC;
??????k14_p??????????:?IN?STD_LOGIC;
??????k15_p??????????:?IN?STD_LOGIC;
??????k16_p??????????:?IN?STD_LOGIC;
??????k17_p??????????:?IN?STD_LOGIC;
??????k18_p??????????:?IN?STD_LOGIC;
??????display_en?????:?OUT?STD_LOGIC;--顯示使能(顯示持續(xù)2秒)
??????cur_score_o????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0);--當(dāng)前分?jǐn)?shù)
??????total_score_o??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)?--總分?jǐn)?shù)
???);
END?score_ctrl;
ARCHITECTURE?trans?OF?score_ctrl?IS
???SIGNAL?key_valid???:?STD_LOGIC;
???type?state_type?is?(
??????s_idle?????????,
??????s_key??????????,
??????s_wait?????????,
??????s_end??????????
???);
???SIGNAL?state:state_type;
???SIGNAL?time_cnt????:?INTEGER?:=?0;
???
???SIGNAL?cur_score???:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";
???SIGNAL?total_score?:?STD_LOGIC_VECTOR(7?DOWNTO?0)?:=?"00000000";
BEGIN
???key_valid?<=?k1_p?OR?k2_p?OR?k3_p?OR?k4_p?OR?k5_p?OR?k6_p?OR?k7_p?OR?k8_p?OR?k9_p?OR?k10_p?OR?k11_p?OR?k12_p?OR?k13_p?OR?k14_p?OR?k15_p?OR?k16_p?OR?k17_p?OR?k18_p;--按鍵是否按鍵
???--狀態(tài)機(jī)
???PROCESS?(clk,?rst_p)
???BEGIN
??????IF?(rst_p?=?'1')?THEN
?????????state?<=?s_idle;--復(fù)位
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????CASE?state?IS
????????????WHEN?s_idle?=>--初始狀態(tài)
???????????????IF?(key_valid?=?'1')?THEN--按鍵按下
??????????????????state?<=?s_key;
???????????????ELSE
??????????????????state?<=?s_idle;
???????????????END?IF;
????????????WHEN?s_key?=>--按鍵按下狀態(tài)
???????????????state?<=?s_wait;
????????????WHEN?s_wait?=>--計(jì)時(shí)2秒狀態(tài)
???????????????IF?(time_cnt?>=?200)?THEN--1KHz計(jì)時(shí)2000就是2秒,仿真時(shí)把2000改小為200便于觀察
??????????????????state?<=?s_end;
???????????????END?IF;
????????????WHEN?s_end?=>--結(jié)束
???????????????state?<=?s_idle;
????????????WHEN?OTHERS?=>
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???--計(jì)時(shí)
???PROCESS?(clk,?rst_p)
???BEGIN
??????IF?(rst_p?=?'1')?THEN
?????????time_cnt?<=?0;--復(fù)位
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????IF?(state?=?s_wait)?THEN--計(jì)時(shí)2秒狀態(tài)下進(jìn)行計(jì)數(shù)
????????????time_cnt?<=?time_cnt?+?1;--計(jì)數(shù)
?????????ELSE
????????????time_cnt?<=?0;
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???--計(jì)分
???PROCESS?(clk,?rst_p)
???BEGIN
??????IF?(rst_p?=?'1')?THEN--復(fù)位
?????????cur_score?<=?"00000000";---當(dāng)前分
?????????total_score?<=?"00000000";--總分
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????IF?(state?=?s_key)?THEN
????????????IF?(k1_p?=?'1')?THEN
???????????????cur_score?<=?"00000001";--1分
???????????????total_score?<=?total_score?+?"00000001";
????????????ELSIF?(k2_p?=?'1')?THEN
???????????????cur_score?<=?"00000010";--2分
???????????????total_score?<=?total_score?+?"00000010";
????????????ELSIF?(k3_p?=?'1')?THEN
???????????????cur_score?<=?"00000011";--3分
???????????????total_score?<=?total_score?+?"00000011";
????????????ELSIF?(k4_p?=?'1')?THEN
???????????????cur_score?<=?"00000100";--4分
???????????????total_score?<=?total_score?+?"00000100";
????????????ELSIF?(k5_p?=?'1')?THEN
???????????????cur_score?<=?"00000101";--5分
???????????????total_score?<=?total_score?+?"00000101";
????????????ELSIF?(k6_p?=?'1')?THEN
???????????????cur_score?<=?"00000110";--6分
???????????????total_score?<=?total_score?+?"00000110";
????????????ELSIF?(k7_p?=?'1')?THEN
???????????????cur_score?<=?"00000111";--7分
???????????????total_score?<=?total_score?+?"00000111";
????????????ELSIF?(k8_p?=?'1')?THEN
???????????????cur_score?<=?"00001000";--8分
???????????????total_score?<=?total_score?+?"00001000";
????????????ELSIF?(k9_p?=?'1')?THEN
???????????????cur_score?<=?"00001001";--9分
???????????????total_score?<=?total_score?+?"00001001";
????????????
????????????ELSIF?(k10_p?=?'1')?THEN
???????????????cur_score?<=?"00001010";--10分
???????????????total_score?<=?total_score?+?"00001010";
????????????ELSIF?(k11_p?=?'1')?THEN
???????????????cur_score?<=?"00010100";--20分
???????????????total_score?<=?total_score?+?"00010100";
????????????ELSIF?(k12_p?=?'1')?THEN
???????????????cur_score?<=?"00011110";--30分
???????????????total_score?<=?total_score?+?"00011110";
????????????ELSIF?(k13_p?=?'1')?THEN
???????????????cur_score?<=?"00101000";--40分
???????????????total_score?<=?total_score?+?"00101000";
????????????ELSIF?(k14_p?=?'1')?THEN
???????????????cur_score?<=?"00110010";--50分
???????????????total_score?<=?total_score?+?"00110010";
????????????ELSIF?(k15_p?=?'1')?THEN
???????????????cur_score?<=?"00111100";--60分
???????????????total_score?<=?total_score?+?"00111100";
????????????ELSIF?(k16_p?=?'1')?THEN
???????????????cur_score?<=?"01000110";--70分
???????????????total_score?<=?total_score?+?"01000110";
????????????ELSIF?(k17_p?=?'1')?THEN
???????????????cur_score?<=?"01010000";--80分
???????????????total_score?<=?total_score?+?"01010000";
????????????ELSIF?(k18_p?=?'1')?THEN
???????????????cur_score?<=?"01011010";--90分
???????????????total_score?<=?total_score?+?"01011010";
????????????END?IF;
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???--顯示使能,持續(xù)2秒
???PROCESS?(clk,?rst_p)
???BEGIN
??????IF?(rst_p?=?'1')?THEN--復(fù)位
?????????display_en?<=?'0';
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????IF?(state?=?s_wait)?THEN??
display_en?<=?'1';
???ELSE
display_en?<=?'0';
?????????END?IF;
??????END?IF;
???END?PROCESS;
???cur_score_o?<=?cur_score;--輸出單發(fā)計(jì)分
???total_score_o?<=?total_score;--輸出總分
???
END?trans;

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

  • 2-240105104959543.doc
    下載

相關(guān)推薦