基于VHDL语言的计时秒表设计

这篇具有很好参考价值的文章主要介绍了基于VHDL语言的计时秒表设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于VHDL语言的计时秒表设计

设计要求

设计一个带有开始与暂停的计时秒表,秒表的最低位是0.1秒,显示格式为0.00.00.0;带有复位开关。

设计步骤

步骤一:设计分析

1.系统底层设计模块分析

根据系统的设计要求,系统的底层设计主要由分频器模块、十进制计数器模块、六十进制计数器模块、多位数码管显示模块组成。

2.输入、输出信号分析

*(1)*输入信号:

​ start:计时信号(start='1’开始计时、start='0’暂停计时)。

​ reset:复位信号。

​ clk:时钟信号(50MHz)。

*(2)*输出信号:

​ q:数码管阴极控制信号。

​ a,b,c,d,e,f,g,h:数码管阳极控制信号。

步骤二:模块功能设计

1.分频器(将50MHz脉冲变成10Hz脉冲)

VHDL语言描述:

	Library IEEE;
	USE IEEE.std_logic_1164.all;
	USE IEEE.std_logic_unsigned.all;
	ENTITY fenpin IS
		PORT(clk:IN std_logic;
			 	 clk_out:OUT std_logic);
	END fenpin;
	ARCHITECTURE behave OF fenpin IS
		SIGNAL counter :integer range 0 to 2499999;
		SIGNAL temp_out :std_logic;
	BEGIN
		PROCESS(clk)
		BEGIN
			IF (clk'EVENT AND clk ='1') THEN
				counter <= counter+1;
				IF (counter = 2499999) THEN
					counter <= 0;
					temp_out <= NOT temp_out;
				END IF;
			END IF;
      clk_out <= temp_out;
      END PROCESS;
   END behave; 

分频器的仿真图:

基于VHDL语言的计时秒表设计

2.多位数码管动态扫描分频器(将50MHz脉冲变成100Hz脉冲)

VHDL语言描述:

	Library IEEE;
	USE IEEE.std_logic_1164.all;
	USE IEEE.std_logic_unsigned.all;
	ENTITY fenpin_100 IS
		PORT(clk:IN std_logic;
			 	 clk_out:OUT std_logic);
	END fenpin_100;
	ARCHITECTURE behave OF fenpin_100 IS
		SIGNAL counter :integer range 0 to 249999;
		SIGNAL temp_out :std_logic;
	BEGIN
		PROCESS(clk)
		BEGIN
			IF (clk'EVENT AND clk ='1') THEN
				counter <= counter+1;
				IF (counter = 249999) THEN
					counter <= 0;
					temp_out <= NOT temp_out;
				END IF;
			END IF;
      clk_out <= temp_out;
      END PROCESS;
   END behave; 

多位数码管动态扫描分频器仿真图:

基于VHDL语言的计时秒表设计

3.十进制计数器

VHDL语言描述:

LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;
ENTITY cnt_10 IS
	PORT(start,reset,clk:IN std_logic;
			 Q: buffer std_logic_vector(3 downto 0);
			 RCO : out std_logic );--进位输出端
END cnt_10;
ARCHITECTURE behave OF cnt_10 IS
BEGIN
	RCO<='1'WHEN(Q="1001" AND start='1')ELSE '0';
	PROCESS(clk,reset)
		BEGIN
			IF(reset='1')THEN
				Q<="0000";
			ELSIF(clk'EVENT AND clk = '1')THEN
				IF(start='1')THEN
					IF(Q="10001")THEN
						Q<="0000";
					ELSE
						Q<=Q+1;
					END IF;
				END IF;
       END IF;
    END PROCESS;
  END behave;  

十进制计数器的仿真图:

基于VHDL语言的计时秒表设计

4.六十进制计数器

VHDL语言描述:

LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;
ENTITY cnt_60 IS
	PORT(start,reset,clk:IN std_logic;
			 DHout:buffer std_logic_vector(3 downto 0);  --高四位输出
			 DLout:buffer std_logic_vector(3 downto 0);  --低四位输出
			 RCO:out std_logic);  --进位输出端
END cnt_60;
ARCHITECTURE behave OF cnt_60 IS
BEGIN
	RCO<='1'WHEN (DHout="0101" AND DLout="1001" AND start = '1')ELSE '0';--确定进位条件
	PROCESS(clk,reset)
	BEGIN
		IF(reset='1')THEN
		QHout<="0000";
		QLout<="0000";
		ELSIF(clk'EVENT AND clk='1')THEN
			IF(start='1')THEN
				DLout<=DLout+1;
			END IF;
			IF(DLout=9)THEN
				DLout<="0000";
				DHout<=DHout+1;
			END IF;
			IF(DHout=5 AND DLout=9)THEN
				DHout<="0000";
			END IF;
		END IF;
	END PROCESS;
END behave;

六十进制计数器的仿真图:

基于VHDL语言的计时秒表设计

5.多位数码管显示模块

VHDL语言描述:

LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
ENTITY Nixie_tube IS
	PORT(num0,num1,num2:IN std_logic_vector(3 downto 0);
			 num3,num4,num5:IN std_logic_vector(3 downto 0);
			 clk:IN std_logic;
			 I:OUT std_logic_vector(5 downto 0);			--阴极控制信号
			 display:OUT std_logic_vector(6 downto 0));
END Nixie_tube;
ARCHITECTURE behave OF Nixie_tube IS
	SIGNAL counter: integer range 0 to 5;
BEGIN
	PROCESS(clk)
		VARIABLE num:std_logic_vector(3 downto 0);
	BEGIN
		IF (rising_edge(clk))THEN
			IF counter=5 THEN
				counter <= 0;
			ELSE counter <= counter+1;
			END IF;
			CASE counter IS
				WHEN 0 => 
					I <= "111110";
					num:=num0;
				WHEN 1 =>
					I <= "111101";
					num:=num1;
				WHEN 2 =>
					I <= "111011";
					num:=num2;
				WHEN 3 =>
					I <= "110111";
					num:=num3;
				WHEN 4 =>
					I <= "101111";
					num:=num4;
				WHEN 5 =>
					I <= "011111";
					num:=num5;
			END CASE;
			CASE num IS
				WHEN "0000" => display <= "0111111";
				WHEN "0001" => display <= "0000110";
				WHEN "0010" => display <= "1011011";
				WHEN "0011" => display <= "1001111";
				WHEN "0100" => display <= "1100110";
				WHEN "0101" => display <= "1101101";
				WHEN "0110" => display <= "1111101";
				WHEN "0111" => display <= "0000111";
				WHEN "1000" => display <= "1111111";
				WHEN "1001" => display <= "1100011";
        WHEN others => display <= "0000000";
       END CASE;
     END IF;
   END PROCESS;
END behave;

多位数码管显示模块的仿真图:

基于VHDL语言的计时秒表设计

步骤三:计时秒表的设计

VHDL语言描述:

LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;
ENTITY digitalclock IS
	PORT(clk :IN std_logic;
			 reset :IN std_logic;
			 start :IN std_logic;
			 q :OUT std_logic_vector(5 downto 0);        --阴极控制信号
			 a,b,c,d,e,f,g,h: OUT std_logic);
END digitalclock;
ARCHITECTURE behave OF digitalclock IS
COMPONENT fenpin IS                                 --分频器元件声明
		PORT(clk:IN std_logic;
			 	 clk_out:OUT std_logic);
END COMPONENT fenpin;
COMPONENT fenpin_100 IS                            --多位数码管动态扫描分频器元件声明
		PORT(clk:IN std_logic;
			 	 clk_out:OUT std_logic);
END COMPONENT fenpin_100;
COMPONENT cnt_10 IS                                 --十进制计数器元件声明
	PORT(start,reset,clk:IN std_logic;
			 Q: buffer std_logic_vector(3 downto 0);
			 RCO : out std_logic );
END COMPONENT cnt_10;
COMPONENT cnt_60 IS                                 --六十进制计数器元件声明
	PORT(start,reset,clk:IN std_logic;
			 DHout:buffer std_logic_vector(3 downto 0);  
			 DLout:buffer std_logic_vector(3 downto 0); 
			 RCO:out std_logic);  
END COMPONENT cnt_60;
COMPONENT Nixie_tube IS                             --多位数码管显示模块元件声明
	PORT(num0,num1,num2:IN std_logic_vector(3 downto 0);
			 num3,num4,num5:IN std_logic_vector(3 downto 0);
			 clk:IN std_logic;
			 I:OUT std_logic_vector(5 downto 0);			
			 display:OUT std_logic_vector(6 downto 0));
END COMPONENT Nixie_tube;
SIGNAL clk_temp1,clk_temp2: std_logic;
SIGNAL NUM0,NUM1,NUM2,NUM3,NUM4,NUM5:std_logic_vector(3 downto 0);
SIGNAL RCO1,RCO2,RCO3,RCO4:std_logic;
BEGIN
	h<='1';
	A1:fenpin
	PORT MAP(clk=>clk,clk_out=>clk_temp1);
	A2:fenpin_100
	PORT MAP(clk=>clk,clk_out=>clk_temp2);
	A3:cnt_10
	PORT MAP(start=>start,reset=>reset,clk=>clk_temp1,Q=>NUM0,RCO=>RCO1);
	A4:cnt_60
	PORT 	MAP(start=>start,reset=>reset,clk=>clk_temp1,DHout=>NUM2,DLout=>NUM1,
	RCO=>RCO2);
	A5:cnt_60
	PORT MAP(start=>start,reset=>reset,clk=>clk_temp1,DHout=>NUM4,DLout=>NUM3,
	RCO=>RCO3);
	A6:cnt_10
	PORT MAP(start=>start,reset=>reset,clk=>clk_temp1,Q=>NUM5,RCO=>RCO4);
	A7:Nixie_tube
	PORT MAP(num0=>NUM0,num1=>NUM1,num2=>NUM2,num3=>NUM3,num4=>NUM4,num5=>NUM5,
	clk=>clk_temp2,I=>q,display(0)=>a,display(1)=>b,display(2)=>c,display(3)=>d,
	display(4)=>e,display(5)=>f,display(6)=>g);
END behave;

RTL原理图

基于VHDL语言的计时秒表设计

心得体会

*1.*主频脉冲(50MHz)的频率设置的太大,导致各个模块时序仿真的效果不是很好。

*2.*在 Quartus II 编译过程中,出现**Error: Node instance “XXX” instantiates undefined entity “XXX"**的错误时的解决方案。

分析:程序报错的原因是由于在元件例化过程中,实体未被定义。

具体解决方法如下:

以**Error: Node instance “A2” instantiates undefined entity “fenpin_100"**为例。

基于VHDL语言的计时秒表设计

(1)在 Quartus II 的工具栏的File->Open,打开"fenpin_100"的vhd文件。

基于VHDL语言的计时秒表设计

(2)点击工具栏的Project->Add Current File to Project。

基于VHDL语言的计时秒表设计

(3)重新编译。

基于VHDL语言的计时秒表设计

*3.*在系统的设计过程中,运用了分频器模块、十进制计数器模块、六十进制计数器模块、多位数码管显示模块的VHDL语言描述,对多位数码管显示的动态扫描原理有了更进一步的了解,深刻理解了“自顶向下”的设计思想,将极其复杂的数字系统划分成一系列的层次分明的模块,以此来完成系统整体结构的设计。文章来源地址https://www.toymoban.com/news/detail-492097.html

到了这里,关于基于VHDL语言的计时秒表设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于VHDL语言的汽车测速系统设计_kaic

    摘  要 汽车是现代交通工具。车速是一项至关重要的指标。既影响着汽车运输的生产率,又关乎着汽车行驶有没有超速违章,还影响着汽车行驶时人们的人身安全。而伴随着我国国民的安全防范意识的逐步增强,人们也开始越来越关心因为汽车的超速而带来的极其严重的危害

    2024年02月09日
    浏览(37)
  • 基于VHDL语言的8路彩灯控制器的设计_kaic

    摘  要 伴随着我国电子科学技术的发展,彩灯越来越多地被融入到现代生活中的各式各样的景观中,彩灯作为一种装饰生活的观赏工具,不仅满足了人们视觉上的享受和娱乐,同时受关注的还有彩灯的花式花样、创意、节能、智能以及环保。但我们不能忽视了彩灯设计中最重

    2024年02月10日
    浏览(45)
  • 单片机C51计时器秒表

    鱼弦:CSDN内容合伙人、CSDN新星导师、全栈领域创作新星创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen) 单片机C51(或称8051)计时器秒表的实现原理如下: 原理解释: C51微控制器通常包括多个计时器/计数器,可

    2024年02月03日
    浏览(52)
  • 基于FPGA的数字秒表设计(完整工程)

    目录 概述 设计功能 数字秒表设计的目的 模块仿真 设计代码 概述 该设计是用于体育比赛的数字秒表,基于FPGA在Quartus II 9.0sp2软件下应用VHDL语言编写程序,采用ALTRA公司CycloneII系列的EP2C8Q208芯片进行了计算机仿真,并给出了相应的仿真结果。本设计有效的克服了传统的数字秒表

    2024年02月05日
    浏览(40)
  • 基于STM32的简易电子秒表仿真设计(仿真+程序+设计报告+讲解)

    仿真图proteus 8.9 程序编译器:keil 5 编程语言:C语言 设计编号:C0078 基于STM32的简易电子秒表proteus仿真设计 结合实际情况,基于STM32F103单片机设计一个电子秒表。该设计应满足的功能要求为: 1、以STM32为最小系统电路进行连接,用四位数码管显示计时时间。 2、三个按键作为

    2024年02月11日
    浏览(52)
  • FPGA用vhdl语言设计简单硬件电子琴设计

    硬件电子琴设计 目录 一、 设计内容简介 二、系统框图 三、代码说明 四、 管脚及管脚对应图 一、设计 内容简介 当按下琴键时,扬声器发出该琴键对应的音阶,同时数码管显示音阶数字。设置了一个模式切换键可选择低、中低、中高、高音4档音阶,每按下一次则可切换不

    2024年02月04日
    浏览(40)
  • 基于AT89C52单片机的电子秒表设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87755619?spm=1001.2014.3001.5503 源码获取 主要内容: 本设计以AT89C52单片机为核心,采用常用电子器件设计,包括电源开关、按键、数码管显示、LCD1602液晶。将软、硬件有机的结合起来,使得系统能够

    2024年02月02日
    浏览(70)
  • 基于AT89C51单片机的电子秒表设计与仿真

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87775018添加链接描述 源码获取 主要内容: 设计一个电子秒表,至少具有以下功能:开始/暂停、记录、复位等。设计方案主要分为实验的系统分析,具体的设计方案,以及最终的测试,最终完成实

    2024年02月16日
    浏览(58)
  • VHDL语言基础-状态机设计-ASM图法状态机设计

    目录 有限状态机的描述方法: ASM图: 状态转移图: 状态转移列表: MDS图: ASM图法状态机设计: ASM图的组成: 状态框: 判断框: 条件框: 状态框与条件框的区别: 状态单元: 用计数器实现ASM图: ASM图的状态分配: 状态转换表: 由状态转换表推导触发器的驱动方程:

    2024年02月03日
    浏览(35)
  • 基于VHDL的多功能电子钟设计

    一、目的任务 熟悉Quartus II的使用方法和步骤,掌握使用Quartus II来进行FPGA编程和仿真的方法和技巧。熟悉FPGA硬件的调试方法,掌握初步的FPGA 和周边硬件的调试和故障诊断的能力。 掌握用 VHDL 语言进行数字系统设计的基本方法和流程,加深对 EDA 课程内容的理解,提高工程设

    2024年02月03日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包