名称:4人抢答器设计VHDL代码Quartus? FPGA实验箱
软件:Quartus
语言:VHDL
代码功能:
要求
(1)1个主持键、4个抢答键。
(2)抢答的键号用一个数码管显示(可以采用静态显示)。
(3)抢答的时间用两位数码管显示(可以采用静态显示),精确到0.15。
(4)主持键按下,4个抢答键才有效,时间从0.0s开始计时。
(5)当时间到8.8s还没人按抢答键,抢答停止,抢答键无效;当主持键再次按下才有效。
(6)在规定时间内抢答键按下时,显示先按下的键号,时间停止,抢答键无效:当主持键再次按下才有效? ?。
(7)必须先进行前仿真,并打印出仿真波形。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在FPGA实验箱验证,FPGA实验箱如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
状态图
5. 管脚分配
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --显示模块 ENTITY?display?IS ???PORT?( ??????clk_1KHz???:?IN?STD_LOGIC;--时钟1KHz ??????first_num??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--抢答号码 ??????time_ten???:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--计时十位 ??????time_one???:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--计时个位 ?????? ??????SEL????????:?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0);--数码管位选 ??????SEG????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--数码管段选 ???); END?display; ARCHITECTURE?behave?OF?display?IS ??? ???SIGNAL?cnt??:?STD_LOGIC_VECTOR(2?DOWNTO?0)?:=?"000"; ???SIGNAL?data?:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000"; ??? BEGIN ???PROCESS?(clk_1KHz) ???BEGIN ??????IF?(clk_1KHz'EVENT?AND?clk_1KHz?=?'1')?THEN ?????????cnt?<=?cnt?+?"001";--计时0~7 ??????END?IF; ???END?PROCESS; ??? ???SEL?<=?cnt;--位选 ??? ???PROCESS?(cnt,?first_num,?time_ten,?time_one) ???BEGIN ??????CASE?cnt?IS ?????????WHEN?"000"?=> ????????????data?<=?first_num;--抢答号码 ?????????WHEN?"010"?=> ????????????data?<=?time_ten;--计时十位 ?????????WHEN?"011"?=> ????????????data?<=?time_one;--计时个位 ?????????WHEN?OTHERS?=> ????????????data?<=?"1010";--A ??????END?CASE; ???END?PROCESS; ??? ???--输出到数码管段选 ???PROCESS?(cnt,data) ???BEGIN if(cnt="010")then--计时十位,显示小数点 ??????CASE?data?IS ?????????WHEN?"0000"?=> ????????????SEG?<=?NOT(X"c0")?OR?"10000000"; ?????????WHEN?"0001"?=> ????????????SEG?<=?NOT(X"f9")?OR?"10000000"; ?????????WHEN?"0010"?=> ????????????SEG?<=?NOT(X"a4")?OR?"10000000"; ?????????WHEN?"0011"?=> ????????????SEG?<=?NOT(X"b0")?OR?"10000000"; ?????????WHEN?"0100"?=> ????????????SEG?<=?NOT(X"99")?OR?"10000000"; ?????????WHEN?"0101"?=> ????????????SEG?<=?NOT(X"92")?OR?"10000000"; ?????????WHEN?"0110"?=> ????????????SEG?<=?NOT(X"82")?OR?"10000000"; ?????????WHEN?"0111"?=> ????????????SEG?<=?NOT(X"f8")?OR?"10000000"; ?????????WHEN?"1000"?=> ????????????SEG?<=?NOT(X"80")?OR?"10000000"; ?????????WHEN?"1001"?=> ????????????SEG?<=?NOT(X"90")?OR?"10000000"; ?????????WHEN?"1010"?=> ????????????SEG?<=?"00000000"?OR?"10000000"; when?others=> SEG?<=?"00000000"; ??????END?CASE;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1054
阅读全文
300