• 方案介紹
  • 附件下載
  • 相關推薦
申請入駐 產業(yè)圖譜

數字顯示自動記分器VHDL代碼Quartus仿真

7小時前
86
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

2-240105104959543.doc

共1個文件

名稱:數字顯示自動記分器VHDL代碼Quartus仿真

軟件:Quartus

語言:VHDL

代碼功能:

數字顯示自動記分器

1.設計一個射擊用的數字顯示自動計分器,電路共設18個模擬開關,K1~K18,分別代表射擊者射中的目標,射中K1~K9分別得1~9分,射中K10~K18分別得10~90分;

2.要求每射中一次(K1~K18開關拔動一次)單發(fā)計數顯示器能自動顯示得分數,顯示2秒后自動消失;

3.每射中一次均應將射擊的得分數累計并顯示;

4.電路應具有復位功能,即每局結束后,應將各計數器自動清0,為下一次記分作好準備(手動復位);

5.單發(fā)計數顯示和累加計數顯示應分開;

6.脈神信號源(自行設計)為1KHz頻率。

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

演示視頻:

設計文檔:

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;--時鐘
??????rst_p??????????:?IN?STD_LOGIC;--復位
??????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);--當前分數
??????total_score_o??:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)?--總分數
???);
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)機
???PROCESS?(clk,?rst_p)
???BEGIN
??????IF?(rst_p?=?'1')?THEN
?????????state?<=?s_idle;--復位
??????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?=>--計時2秒狀態(tài)
???????????????IF?(time_cnt?>=?200)?THEN--1KHz計時2000就是2秒,仿真時把2000改小為200便于觀察
??????????????????state?<=?s_end;
???????????????END?IF;
????????????WHEN?s_end?=>--結束
???????????????state?<=?s_idle;
????????????WHEN?OTHERS?=>
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???--計時
???PROCESS?(clk,?rst_p)
???BEGIN
??????IF?(rst_p?=?'1')?THEN
?????????time_cnt?<=?0;--復位
??????ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????IF?(state?=?s_wait)?THEN--計時2秒狀態(tài)下進行計數
????????????time_cnt?<=?time_cnt?+?1;--計數
?????????ELSE
????????????time_cnt?<=?0;
?????????END?IF;
??????END?IF;
???END?PROCESS;
???
???--計分
???PROCESS?(clk,?rst_p)
???BEGIN
??????IF?(rst_p?=?'1')?THEN--復位
?????????cur_score?<=?"00000000";---當前分
?????????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--復位
?????????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ā)計分
???total_score_o?<=?total_score;--輸出總分
???
END?trans;

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

  • 2-240105104959543.doc
    下載

相關推薦