赞
踩
名称:电子时钟设计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、根据前期实验,自己设计验证需要的管脚等资源的分配进行联机验证
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;
扫描文章末尾的公众号二维码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。