首页 > 分享 > 【EDA技术】实验三 十进制计数器的VHDL设计

【EDA技术】实验三 十进制计数器的VHDL设计

一、实验目的

(1) 熟悉EDA软件,并能熟练使用。

(2) 分析设计任务,根据任务要求完成设计内容。

(3) 利用软件对设计内容进行仿真调试,得到正确运行结果。

二、实验要求

设计任务给出十进制计数器的VHDL描述。要求:

(1) 利用有限状态机的方法。

(2) 具有同步使能。

(3) 设计七段译码器的VHDL代码。

(4) 利用元件例化的方式实现计数译码器的设计。

三、实验步骤

(1) 建立工作库文件夹和编辑设计文件

File->New Project Wizard

(2) 创建工程

File->New->Verilog HDL File

(3) 全程编译

有限状态机10进制计数器 七段译码器 元件例化

(4) 时序仿真

10进制计数器

由上图可知,当时钟使能端信号到来时,DOUT会加1;

当DOUT加到1001(数字9)时,COUT进位会加1;

符合10进制计数器规律。

当RST为1时,低四位高四位全清零。

综合分析可知,这是一个10进制计数器。

七段译码器

由仿真波形可知,数字0-9均可用八位二进制数表示出来,且结果是一一对应的;

当输入大于9时,输出为空,保持不变;

当时钟信号继续增加时,译码器会循环输出0-9的二进制数,可以看出来这是一个七段译码器。

由仿真波形可知,当时钟信号到来,使能端为高电平时,输出DOUT0加1,且表示为译码器形式,当加到9或者RST为低电平时,回到最初s0状态。

四、VHDL程序文本

有限状态机10进制计数器

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT10 IS

PORT (CLK,RST,EN:IN STD_LOGIC; --

DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END CNT10;

ARCHITECTURE behav OF CNT10 IS --结构体 behav

TYPE states IS(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9); --定义状态

SIGNAL ST,NST :states :=s0; --定义敏感信号并赋初值s0

BEGIN

COM: PROCESS(ST)

VARIABLE Q:STD_LOGIC_VECTOR(3 DOWNTO 0); --定义变量

BEGIN

CASE ST IS

WHEN s0 => Q :="0000"; NST <=s1;

WHEN s1 => Q :="0001"; NST <=s2;

WHEN s2 => Q :="0010"; NST <=s3;

WHEN s3 => Q :="0011"; NST <=s4;

WHEN s4 => Q :="0100"; NST <=s5;

WHEN s5 => Q :="0101"; NST <=s6;

WHEN s6 => Q :="0110"; NST <=s7;

WHEN s7 => Q :="0111"; NST <=s8;

WHEN s8 => Q :="1000"; NST <=s9;

WHEN s9 => Q :="1001"; NST <=s0;

WHEN others=>Q :="0000"; NST <=s0; --对函数进行扩充

END CASE;

DOUT <=Q;

END PROCESS COM;

PROCESS(CLK,RST,EN)

BEGIN

IF RST='0' THEN ST<=s0; --当前状态清零

ELSIF CLK'EVENT AND CLK ='1' THEN

IF EN='1' THEN ST<=NST; --使能时钟都为1 当前值为下一状态值

END IF;

END IF;

END PROCESS;

END behav;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL ;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY SEG7 IS --七段译码器

PORT (INDATA: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --输入,4位数,表示0-9

ODATA: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));--输出,八位,对应数码管上八段

END ENTITY SEG7;

ARCHITECTURE BHV OF SEG7 IS

BEGIN

PROCESS (INDATA)

BEGIN

CASE (INDATA) IS

WHEN "0000" => ODATA<= "0111111" ; --数字0的高电平点亮(公共端共阴极)二进制表示方法

WHEN "0001" => ODATA<= "0001110" ; --1

WHEN "0010" => ODATA<= "1011011" ; --2

WHEN "0011" => ODATA<= "1001111" ; --3

WHEN "0100" => ODATA<= "1100110" ; --4

WHEN "0101" => ODATA<= "1101101" ; --5

WHEN "0110" => ODATA<= "1111101" ; --6

WHEN "0111" => ODATA<= "0000111" ; --7

WHEN "1000" => ODATA<= "1111111" ; --8

WHEN "1001" => ODATA<= "1101111" ; --9

WHEN OTHERS => NULL; --其他情况,输出为空

END CASE; --结束case

END PROCESS;

END ARCHITECTURE BHV;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL ;

ENTITY CNT10_LED IS

PORT (CLK0,RST0,EN0: IN STD_LOGIC;

DOUT0:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END ENTITY CNT10_LED;

ARCHITECTURE BHV OF CNT10_LED IS

COMPONENT CNT10 --10进制计数器

PORT (CLK,RST,EN:IN STD_LOGIC; --

DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END COMPONENT CNT10;

COMPONENT SEG7 --七段译码器

PORT (INDATA: IN STD_LOGIC_VECTOR(3 DOWNTO 0);

ODATA: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END COMPONENT SEG7;

SIGNAL IKUN:STD_LOGIC_VECTOR(3 DOWNTO 0); --IKUN 敏感信号

BEGIN

U1:CNT10 PORT MAP(CLK=>CLK0,RST=>RST0,EN=>EN0,DOUT=>IKUN);

U2:SEG7 PORT MAP(INDATA=>IKUN,ODATA=>DOUT0);

END ARCHITECTURE BHV ;

五、遇到的问题及解决办法

Q10版本之后的Quartus在New中不直接提供软件波形仿真,一般需要调用ModelSim软件进行操作:

解决办法:按照图示依次点击Tools->Options->General->EDA Tool Options->ModelSim 把路径设置为ModelSim软件所在处。

VHDL文本正确,工程路径都没问题,波形输出失败,提示ModelSIM调用失败:

解决办法:检查问题1是否已经解决,解决后关闭软件,以管理员身份启动软件,再次仿真。

相关知识

VHDL温度控制系统设计
实验二 组合逻辑电路设计;实验三 时序逻辑电路设计
谈谈Verilog和SystemVerilog简史,FPGA设计是否需要学习SystemVerilog
花卉温室控制系统设计(论文)
8×8点阵实验报告
智能浇花技术
电路设计原则精选(九篇)
【fpga里Verilog语言的小知识点】
实验三
彩灯控制电路设计

网址: 【EDA技术】实验三 十进制计数器的VHDL设计 https://m.huajiangbk.com/newsview893359.html

所属分类:花卉
上一篇: 使用74LS161设计任意进制计
下一篇: jmeter(十六)配置元件之计