当前位置:   article > 正文

电子时钟设计VHDL代码Quartus仿真_电子时钟vhdl程序与仿真

电子时钟vhdl程序与仿真

名称:电子时钟设计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;
源代码

 扫描文章末尾的公众号二维码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/847828
推荐阅读
  

闽ICP备14008679号