名称:电子时钟设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
一、
1.设计一个能显示1/10秒、秒、分、时的24小时数字钟。
2.熟练掌握各种计数器的使用。
3.能用计数器构成十进制、六十过制、二十四进制等所需进制的计数器。
4.能用低位的进位输出构成高位的计数脉冲。
5.时钟的秒和分之间的的“:”按照1Hz的频率闪烁提示。
提示:
1.时钟源使用频率为0.1Hz的连续脉冲。
2.设置两个按钮,一个供“开始”及“停止”用,一个供系统“复位”用3、时钟显示使用数码管显示。
4.“时显示”部分应注意24点后显示0点。
5.注意各部分的关系,由低位到高位逐级设计、调试。
二、评分得出期末实践成绩和报告成绩两部分。
1.提交的详细的设计报告是唯一考核材料,硬件设计的描述代码、操作等在报告中呈现,报告内容包括但不限于需求分析,技术调研、方案分析(EDA技术及主芯片选用依据优势分析、原理阐述等),设计思路,具体操作流程及结果验证分析,课程心得等内容,报告本身的评分标准为报告的学术性(20分)、规范性(10分)、电路的功能正确性(40分)、内容的详实性(30分)。
2.操作的仿真结果及在实物上的验证必须要在报告中呈现,要使报告能充分体现操作结果的正确性,所以需要以图文并茂进行说明。附录为实践操作评分标准,在报告中以的设计(主要就是实现思路,提示:状态机)、操作流程说明及结果分析等要支撑评分要素。
3、根据前期实验,自己设计验证需要的管脚等资源的分配进行联机验证。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
整体仿真图
分频模块
十进制计数模块
60进制计数模块
24进制计数模块
数码管显示模块
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --数码管显示模块 ENTITY?display?IS ???PORT?( ??????clk_500KHz??????:?IN?STD_LOGIC; ??????cnt_second01????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--计数值0.1秒 ??????cnt_ten_second??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--计数值 ??????cnt_one_second??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--计数值 ??????cnt_ten_minute??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--计数值 ??????cnt_one_minute??:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--计数值 ??????cnt_ten_hour????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--计数值 ??????cnt_one_hour????:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--计数值 ?????? ??????ABC?????????????:?OUT?STD_LOGIC_VECTOR(2?DOWNTO?0);--数码管位选 ??????segment?????????:?OUT?STD_LOGIC_VECTOR(7?DOWNTO?0)--数码管段选 ???); END?display; ARCHITECTURE?trans?OF?display?IS ??? ???SIGNAL?seg_select?:?STD_LOGIC_VECTOR(2?DOWNTO?0)?:=?"000";--数码管位号 ??? ???SIGNAL?number?????:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000"; BEGIN ???PROCESS?(clk_500KHz) ???BEGIN ??????IF?(clk_500KHz'EVENT?AND?clk_500KHz?=?'1')?THEN ?????????seg_select?<=?seg_select?+?"001";--加1,0~7,扫描哪个管子的指示位 ??????END?IF; ???END?PROCESS; ??? ???--位选切换 ???PROCESS?(clk_500KHz) ???BEGIN ??????IF?(clk_500KHz'EVENT?AND?clk_500KHz?=?'1')?THEN ?????????CASE?seg_select?IS ????????????WHEN?"110"?=> ???????????????ABC?<=?seg_select; ???????????????number?<=?cnt_ten_hour; ????????????WHEN?"101"?=> ???????????????ABC?<=?seg_select; ???????????????number?<=?cnt_one_hour; ????????????WHEN?"100"?=> ???????????????ABC?<=?seg_select; ???????????????number?<=?cnt_ten_minute; ????????????WHEN?"011"?=> ???????????????ABC?<=?seg_select; ???????????????number?<=?cnt_one_minute; ????????????WHEN?"010"?=> ???????????????ABC?<=?seg_select; ???????????????number?<=?cnt_ten_second; ????????????WHEN?"001"?=> ???????????????ABC?<=?seg_select; ???????????????number?<=?cnt_one_second; ????????????WHEN?"000"?=> ???????????????ABC?<=?seg_select; ???????????????number?<=?cnt_second01; ????????????WHEN?OTHERS?=> ???????????????ABC?<=?seg_select; ???????????????number?<=?"0000"; ?????????END?CASE; ??????END?IF; ???END?PROCESS; ??? ???----------------------------------------------------段选输出-- ???PROCESS?(clk_500KHz) ???BEGIN ??????IF?(clk_500KHz'EVENT?AND?clk_500KHz?=?'1')?THEN ?????????CASE?number?IS--数字显示码 ????????????WHEN?"0000"?=> ???????????????segment?<=?"11000000"; ????????????WHEN?"0001"?=> ???????????????segment?<=?"11111001"; ????????????WHEN?"0010"?=> ???????????????segment?<=?"10100100"; ????????????WHEN?"0011"?=> ???????????????segment?<=?"10110000"; ????????????WHEN?"0100"?=> ???????????????segment?<=?"10011001"; ????????????WHEN?"0101"?=> ???????????????segment?<=?"10010010"; ????????????WHEN?"0110"?=> ???????????????segment?<=?"10000010"; ????????????WHEN?"0111"?=> ???????????????segment?<=?"11111000"; ????????????WHEN?"1000"?=> ???????????????segment?<=?"10000000"; ????????????WHEN?"1001"?=> ???????????????segment?<=?"10010000"; ????????????WHEN?OTHERS?=> ?????????END?CASE; ??????END?IF; ???END?PROCESS; ??? ??? END?trans;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=495
505