赞
踩
一、实验目的
(1) 熟悉EDA软件,并能熟练使用。
(2) 分析设计任务,根据任务要求完成设计内容。
(3) 利用软件对设计内容进行仿真调试,得到正确运行结果。
设计任务给出十进制计数器的VHDL描述。要求:
(1) 利用有限状态机的方法。
(2) 具有同步使能。
(3) 设计七段译码器的VHDL代码。
(4) 利用元件例化的方式实现计数译码器的设计。
(1) 建立工作库文件夹和编辑设计文件
File->New Project Wizard
(2) 创建工程
File->New->Verilog HDL File
(3) 全程编译
(4) 时序仿真
由上图可知,当时钟使能端信号到来时,DOUT会加1;
当DOUT加到1001(数字9)时,COUT进位会加1;
符合10进制计数器规律。
当RST为1时,低四位高四位全清零。
综合分析可知,这是一个10进制计数器。
由仿真波形可知,数字0-9均可用八位二进制数表示出来,且结果是一一对应的;
当输入大于9时,输出为空,保持不变;
当时钟信号继续增加时,译码器会循环输出0-9的二进制数,可以看出来这是一个七段译码器。
由仿真波形可知,当时钟信号到来,使能端为高电平时,输出DOUT0加1,且表示为译码器形式,当加到9或者RST为低电平时,回到最初s0状态。
有限状态机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 本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/679631推荐阅读
相关标签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。