EDA数字秒表的设计

更新时间:2024-06-03 13:59:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

1 绪论 .................................................................... 1 2 设计要求 ................................................................ 2 3 总体设计要求 ............................................................ 2

3.1 基本原理 .......................................................... 2 3.2分频器模块 ......................................................... 3 3.3 计数模块 .......................................................... 4 3.4 记录模块 .......................................................... 5 3.5 寄存器模块 ........................................................ 6 3.6 回放模块 .......................................................... 8 3.7 选择模块 .......................................................... 9 3.8 数显模块 ......................................................... 11 3.9 数字秒表的总原理图 ............................................... 13 4 仿真调试 ............................................................... 13

4.1 分频器模块的仿真调试 ............................................. 13 4.2 计数器模块的仿真调试 ............................................. 14 4.3 记录模块的仿真调试 ............................................... 14 4.4 寄存器模块的仿真 ................................................. 14 4.5 回放模块的仿真调试 ............................................... 15 4.6 选择模块的仿真调试 ............................................... 15 5 管脚分配 ............................................................... 16 6 总结与心得体会 ......................................................... 17 参考文献 ................................................................. 18 附录:源程序代码 ......................................................... 19

0

1 绪论

EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。

在EDA软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有ASIC设计工具,但不对外开放。中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具在各地开花并结果。

1

2 设计要求

① 设计一个能测量4名运动员短跑成绩的数字秒表。要求用四位数码管显示时间,格式为00.00s。

② 秒表设置3个开关输入(清零开关1个,记录开关1个,回放开关1个)。按下“记录”开关,则将当前运动员成绩时间暂存,按下回放开关,依次回放各运动员成绩。

3 总体设计要求

3.1 基本原理

根据要求,数字秒表输入信号有:时钟信号CLK,清零开关CLR,记录开关RST,回放开关RSH;数字秒表的输出信号有:4个数码显示管的显示。数字秒表的主要功能是:计数功能和记录功能

数字秒表主要由七个部分构成:一是分频器;二是计数模块;三是记录模块;四是寄存器模块;五是回放模块;六是选择模块;七是数显模块。

当清零开关置低位‘0’时,所有显示均清零。

分频器模块的作用是将实验板子上50MHZ的信号频率降低到计数所需要的频率100HZ,然后将100HZ的信号作为实验的脉冲输入。

计数模块分为十秒、秒、百毫秒、十毫秒四个计数器。当时钟信号来临时,开始计数,十毫秒的进位信号让百毫秒开始计数,百毫秒的进位使秒开始计数,以此类推。

记录模块所需要实现的:当按下记录开关的时候,使能开关EN加一,并将当前的显示时间存入到使能所对应的组寄存器中。

寄存器模块功能是当记录模块的使能信号来临时,对应的一组寄存器将当前的时间存储起来,到要用的时候再调用。

回放模块:当回放开关按下形成一个脉冲的时候,使能开关PN加一,并将对应的寄存器中信号送入数显模块。

选择模块:通过使能开关PN来选择所需要的信号送到数显模块,完成计数,记录和回放的功能。

数显模块:将选择模块的信号经过译码后输出对应的时间显示

2

数显 计数 数字秒表 记录开关 回放开关 记录 寄存器

图1.总体设计框图

分频器 3.2分频器模块

分频器模块所实现的具体功能是将50MHZ的信号转化成所需要的100HZ的信号,所以需要对信号进行500000的分频,设计思想是:在程序内设置具有某范围的变量随时钟计数,前一半输出“0”,后一半输出“1”。实现这个分频器模块的VHDL程序为:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fenpinl IS --------分频器 PORT(CLK_IN:IN STD_LOGIC; CLK_OUT:OUT STD_LOGIC); END ENTITY fenpinl;

ARCHITECTURE structure of fenpinl is constant count0:integer:=500000; begin

divide_clk:process(CLK_IN) variable n0:integer range 0 to 499999; begin

IF RISING_EDGE(CLK_IN) THEN if(n0<(count0/2))then CLK_OUT<='0'; n0:=n0+1;

elsif(n0

3

CLK_OUT<='1'; n0:=n0+1; else n0:=0; END if; END IF;

END PROCESS divide_clk; END ARCHITECTURE structure;

图2.分频器封装图

3.3 计数模块

本模块实现的是计数功能,时钟信号是由分频器所得到的100HZ信号,并且本

模块由4个十进制的计数模块构成,各级进位作为高级的时钟信号,分别对应十秒,秒,百毫秒和十毫秒,理论可以显示出的最大值为99.99s,并且计数器都是异步清零的。 实现本模块的程序为:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity count10 is ----------十进制计数器 port(clk,clr:in std_logic;----时钟/清零信号 dout:buffer std_logic_vector(3 downto 0);

4

co:out std_logic);-------输出/进位信号 end count10;

architecture behave of count10 is begin process(clr,clk) begin if clr='0' then dout<=\

elsif(rising_edge(clk)) then if dout=\ co<='1';

else dout<=dout+1;co<='0'; end if; end if; end process; end behave;

图3.十进制计数器模块封装图

3.4 记录模块

记录模块的功能是实现当有一个记录脉冲过来时,所记录的使能输出加一,第一个使能输出对应的是第一个寄存器模块,往后以此类推。

实现的程序:

5

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; entity RECORD1 is --------记录模块 port( clr:in std_logic; RST:in STD_LOGIC;

en:BUFFER std_logic_vector(2 downto 0)); ---使能输出 end;

architecture behave of record1 is begin

process(clr,RST) begin

if clr='0' then en<=\ elsif(RISING_edge(RST)) then en<=en+1; end if; end process; end;

图4.记录模块封装图

3.5 寄存器模块

寄存器模块主要是由4组16个D触发器构成的,当使能信号EN来临时,对应EN的一组触发器记录一个时间,并且将每一组的时间信号从输出端口输送到选择模块

6

的输入端口。

其中一组寄存器的程序为: LIBRARY IEEE;

use ieee.std_logic_1164.all;

ENTITY DFF1 IS ------4位D触发器 PORT(

clr:in std_logic;

en:in std_logic_vector(2 downto 0);-----使能信号 clk:in std_logic;

d1:in std_logic_vector(3 downto 0);------输入信号 q1:out std_logic_vector(3 downto 0)); END;

architecture behave of dff1 is

signal Q:std_logic_VECTOR(3 DOWNTO 0); BEGIN

PROCESS(CLR,CLK,EN) BEGIN

IF en=\ IF CLR='0' THEN Q<=\

ELSIF RISING_EDGE(CLK) THEN Q<=d1; END IF; END IF; END PROCESS; Q1<=Q; END;

7

图5.寄存器模块封装图

3.6 回放模块

回放模块输入是回放按钮的一个脉冲信号,来一个脉冲,使能信号PN加一,然后将使能信号输入到选择模块中作为判断信号。

程序为: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; entity REPLAY is -----------回放模块 port(clr:in std_logic; rsh:in std_logic;

pn:buffer std_logic_vector(2 downto 0)); ---使能输出 end;

architecture behave of replay is begin process(clr,rsh) begin

if clr='0' then pn<=\

ELSif (RISING_EDGE(RSH)) then pn<=pn+1; end if;

8

end process; end;

图6.回放模块封装图

3.7 选择模块

选择模块的功能是:当PN=”000”时,输出的只是计数器数据,即当时时间; 当PN=”001”时,输出的是存储在第一组寄存器中的时间; 当PN=”010”时,输出的是存储在第二组寄存器中的时间; 当PN=”011”时,输出的是存储在第三组寄存器中的时间; 当PN=”100”时,输出的是存储在第四组寄存器中的时间。

实现程序为:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY select1 IS ------------------选择模块 PORT( pn:in std_logic_vector(2 downto 0);

din0,din1,din2,din3:in std_logic_vector(3 downto 0);

q00,q01,q02,q03,q10,q11,q12,q13,q20,q21,q22,q23,q30,q31,q32,q33:in std_logic_vector(3 downto 0);

dout0,dout1,dout2,dout3:out STD_LOGIC_VECTOR(3 DOWNTO 0)); end;

architecture behave of select1 is

9

begin

process(pn,din0,din1,din2,din3,q00,q01,q02,q03,q10,q11,q12,q13,q20,q21,q22,q23,q30,q31,q32,q33) begin case pn is

when \when \when \when \when \when others => dout0<=q30;dout1<=q31;dout2<=q32;dout3<=q33; end case; end process; end;

图7.选择模块封装图

10

3.8 数显模块

数显模块由四个七段数码管显示构成,实现的功能是将选择器输送过来的信号转化

成数码管上显示的数字时钟,由于实验板CycloneⅢ EP3C16F484C6 的数码管是共阳数码管,所以各个七位数所对应的数字如下:

\\\\\ \\\\\实现数显模块程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY shumaguan IS PORT(

DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); led:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END shumaguan;

ARCHITECTURE ART OF shumaguan IS BEGIN

PROCESS(DIN) BEGIN CASE DIN IS

WHEN \

11

--0

WHEN \ WHEN \ WHEN \ WHEN \ WHEN \

--1 --2 --3 --4 --5

WHEN \ --6 WHEN \ WHEN \ WHEN \ WHEN OTHERS=>led<=\ END CASE; END PROCESS;

END ARCHITECTURE ART;

--7 --8 --9

图8.数显模块封装图

12

3.9 数字秒表的总原理图

图9.数字秒表总原理图

如图10所示,输入有四个,分别是:脉冲信号CLK,清零信号CLR,记录信号RST,回放信号RSH。输出即是四个七段数码管的显示

图10.数字秒表总体封装图

4 仿真调试

4.1 分频器模块的仿真调试

由于需求的仿真是500000分频,软件无法显示完全,所以将500000分频改为4分

频进行程序的仿真调试

图11.分频器模块的仿真

13

4.2 计数器模块的仿真调试

计数器由于是十进制,所以每次计数到“1001”时,重新归零,并且产生一个进位

信号。

4.3

图12.十进制计数器的仿真

记录模块的仿真调试

记录模块的主要输入是记录信号的脉冲,输出信号则是使能EN,每来一个记录信

号的脉冲,使能信号EN加一,不同的使能信号EN对应不同的寄存器组。

图13.记录模块的仿真

4.4 寄存器模块的仿真

寄存器模块是根据使能信号EN来判断使用哪一组寄存器,图中所示是第一组寄存器模块的仿真

14

图14.寄存器模块的仿真

4.5 回放模块的仿真调试

回放模块的主要输入是回放信号的脉冲,输出信号则是使能PN,每来一个回放信号的脉冲,使能信号PN加一,不同的使能信号PN对应着选择器输出的不同

图15.回放模块仿真

4.6 选择模块的仿真调试

选择模块根据选择使能PN的不同输出不同,图中的使能为“001”,故输出dout为第一组触发器q0x的记录值

15

图16.选择模块的仿真

5 管脚分配

图17.管脚分配图

16

6 总结与心得体会

本次课设的真正操作时间只有四天,在这短短的四天之内,我从连quartus怎么用都不知道的新手到现在能够熟练操作,并且能够用VHDL语言完成整个数字秒表的设计,不得不说这次的课设让我收获不少。

最开始的时候,课设的主要问题是quartus软件的运用问题,但是自己在网上找到了教学视频,并且虚心请教了那些会用quartus的同学,熟悉掌握软件功能差不多花了我一天时间。看到数字秒表的要求的时候,对于本次设计的第一印象就是需要计数器模块,然后看到还需要满足的记录和回放功能,这个确实不知道要怎么做,经过老师的点拨之后,明白了原来是要用4组16个D触发器做一个寄存器组将需要记录的4个运动员的成绩暂存下来,当要回放的时候,在通过使能开关和选择器会放出所需要显示的运动员的成绩。然后在编程过程中,遇到的问题不少,首先是各个模块的单独实现,这个花费了将近1/3的时间。最后将模块综合的时候,由于元件例化的问题,程序一直在报错,经过反复调试修改,错误为零可以完成编译的时候,仿真的问题也出现了,因为程序的部分问题,第四个数据不能锁存,当按下回放后,后来的计数会继续显示。当加了第四次回放锁存的时候,问题成功解决,程序的主体大致完成。

接下来就是管脚的设置,最开始确实是一筹莫展,但是对照着所给的关于板子的pdf文档的介绍,大致明白了各个模块部分对应的管脚是什么,对着所需要的模块的管脚位置,一个一个在assignment editor里面对应的填,然后安装好板子的驱动过后,将程序下载到板子上运行。实物开始运行之后,清零开关,记录开关和回放开关均能正常工作,本次课设的实物演示成功。

通过本次课设,我熟练掌握了quartus软件的基本操作以及VHDL程序的编写,并且让我认识到有些时候不能靠别人,那样的结果可能是竹篮打水一场空。有些时候自己要静下心来思考,问题没有自己想得那么复杂。在这次的课设中就是这样,将数字秒表的问题分为了七个模块,每个模块都是可以轻松解决的小问题。将大问题分解成一个个小问题,思维更加活跃,更具有逻辑性,这就是我所学到的东西。

17

参考文献

[1] 潘松著主编,EDA技术实用教程(第二版),科学出版社,2005. [2] 梁勇 王留奎 EDA技术教程 人民邮电出版社,2010

[3] 谭会生主编,EDA技术综合应用实例与分析 西安电子科技大学出版社,2007 [4] 徐志军 王金明 尹廷辉 EDA技术与VHDL设计 电子工业出版社, [5] 江国强 EDA技术习题与实验 电子工业出版社,2005

18

附录:源程序代码

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity miaob is

port( clk,clr:in std_logic;-----脉冲信号/清零开关 rst,rsh:in std_logic;------记录/回放开关

led0,led1,led2,led3:out std_logic_vector(6 downto 0)); end miaob;

architecture behave of miaob is

COMPONENT fenpinl port(CLK_IN:IN STD_LOGIC; CLK_OUT:OUT STD_LOGIC); end COMPONENT;

COMPONENT count10

port(clr,clk:in std_logic;----时钟/清零/缓存信号 dout:buffer std_logic_vector(3 downto 0); co:out std_logic);-------进位信号 end COMPONENT;

COMPONENT RECORD1 port( clr:in std_logic; RST:in STD_LOGIC;

en:BUFFER std_logic_vector(2 downto 0)); ---使能输出 end COMPONENT;

19

COMPONENT dff1 port(clr:in std_logic;

en:in std_logic_vector(2 downto 0);-----使能信号 clk:in std_logic;

d1:in std_logic_vector(3 downto 0);------输入信号 q1:out std_logic_vector(3 downto 0)); end COMPONENT;

COMPONENT dff2 port(clr:in std_logic;

en:in std_logic_vector(2 downto 0);-----使能信号 clk:in std_logic;

d2:in std_logic_vector(3 downto 0);------输入信号 q2:out std_logic_vector(3 downto 0)); end COMPONENT;

COMPONENT dff3 port(clr:in std_logic;

en:in std_logic_vector(2 downto 0);-----使能信号 clk:in std_logic;

d3:in std_logic_vector(3 downto 0);------输入信号 q3:out std_logic_vector(3 downto 0)); end COMPONENT;

COMPONENT dff4 port(clr:in std_logic;

en:in std_logic_vector(2 downto 0);-----使能信号 clk:in std_logic;

d4:in std_logic_vector(3 downto 0);------输入信号

20

q4:out std_logic_vector(3 downto 0)); end COMPONENT;

COMPONENT REPLAY port(clr:in std_logic; rsh:in std_logic;

pn:buffer std_logic_vector(2 downto 0)); ---使能输出 end COMPONENT;

COMPONENT select1

PORT( pn:in std_logic_vector(2 downto 0);

din0,din1,din2,din3:in std_logic_vector(3 downto 0);

q00,q01,q02,q03,q10,q11,q12,q13,q20,q21,q22,q23,q30,q31,q32,q33:in std_logic_vector(3 downto 0);

dout0,dout1,dout2,dout3:out STD_LOGIC_VECTOR(3 DOWNTO 0)); end COMPONENT;

COMPONENT shumaguan IS PORT(

DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); led:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); end COMPONENT;

SIGNAL CLK_IN,CLK_OUT:std_logic; signal count1,count2,count3,count4:std_logic;

signal tdin0,tdin1,tdin2,tdin3,tdout0,tdout1,tdout2,tdout3:std_logic_vector(3 downto 0); signal

q10,q11,q12,q13,q20,q21,q22,q23,q30,q31,q32,q33,q40,q41,q42,q43:std_logic_vector(3 downto 0);

21

signal tled0,tled1,tled2,tled3:std_logic_vector(6 downto 0); signal tsel:std_logic_vector(1 downto 0); signal ten,tpn:std_logic_vector(2 downto 0); begin

U0:fenpinl port map(clk,clk_out);

U1:count10 port map(clr,clk_out,tdin0,count1);----十毫秒 U2:count10 port map(clr,count1,tdin1,count2);-----百毫秒 U3:count10 port map(clr,count2,tdin2,count3);-----个位秒 U4:count10 port map(clr,count3,tdin3,count4);-----十位秒 U5:RECORD1 port map(clr,rst,ten); U6:dff1 port map(clr,ten,clk,tdin0,q10); U7:dff1 port map(clr,ten,clk,tdin1,q11); U8:dff1 port map(clr,ten,clk,tdin2,q12); U9:dff1 port map(clr,ten,clk,tdin3,q13); U10:dff2 port map(clr,ten,clk,tdin0,q20); U11:dff2 port map(clr,ten,clk,tdin1,q21); U12:dff2 port map(clr,ten,clk,tdin2,q22); U13:dff2 port map(clr,ten,clk,tdin3,q23); U14:dff3 port map(clr,ten,clk,tdin0,q30); U15:dff3 port map(clr,ten,clk,tdin1,q31); U16:dff3 port map(clr,ten,clk,tdin2,q32); U17:dff3 port map(clr,ten,clk,tdin3,q33); U18:dff4 port map(clr,ten,clk,tdin0,q40); U19:dff4 port map(clr,ten,clk,tdin1,q41); U20:dff4 port map(clr,ten,clk,tdin2,q42); U21:dff4 port map(clr,ten,clk,tdin3,q43); U22:REPLAY port map(clr,rsh,tpn); U23:SELECT1

22

port

map(tpn,tdin0,tdin1,tdin2,tdin3,q10,q11,q12,q13,q20,q21,q22,q23,q30,q31,q32,q33,q40,q41,q42,q43,tdout0,tdout1,tdout2,tdout3); U24:shumaguan port map(tdout0,tled0); U25:shumaguan port map(tdout1,tled1); U26:shumaguan port map(tdout2,tled2); U27:shumaguan port map(tdout3,tled3);

led0<=tled0;led1<=tled1;led2<=tled2;led3<=tled3;

end behave;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fenpinl IS --------分频器 PORT(CLK_IN:IN STD_LOGIC; CLK_OUT:OUT STD_LOGIC); END ENTITY fenpinl;

ARCHITECTURE structure of fenpinl is constant count0:integer:=500000; begin

divide_clk:process(CLK_IN) variable n0:integer range 0 to 499999; begin

IF RISING_EDGE(CLK_IN) THEN if(n0<(count0/2))then CLK_OUT<='0'; n0:=n0+1;

elsif(n0

23

CLK_OUT<='1'; n0:=n0+1; else n0:=0; END if; END IF;

END PROCESS divide_clk; END ARCHITECTURE structure;

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity count10 is ----------十进制计数器 port(clk,clr:in std_logic;----时钟/清零信号 dout:buffer std_logic_vector(3 downto 0); co:out std_logic);-------输出/进位信号 end count10;

architecture behave of count10 is begin process(clr,clk) begin if clr='0' then dout<=\

elsif(rising_edge(clk)) then if dout=\ co<='1';

else dout<=dout+1;co<='0'; end if; end if; end process;

24

end behave;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; entity RECORD1 is --------记录模块 port( clr:in std_logic; RST:in STD_LOGIC;

en:BUFFER std_logic_vector(2 downto 0)); ---使能输出 end;

architecture behave of record1 is begin

process(clr,RST) begin

if clr='0' then en<=\

elsif(RISING_edge(RST)) then

en<=en+1; end if; end process; end;

LIBRARY IEEE;

use ieee.std_logic_1164.all;

ENTITY DFF1 IS ------4位D触发器 PORT(

clr:in std_logic;

en:in std_logic_vector(2 downto 0);-----使能信号

25

clk:in std_logic;

d1:in std_logic_vector(3 downto 0);------输入信号 q1:out std_logic_vector(3 downto 0)); END;

architecture behave of dff1 is

signal Q:std_logic_VECTOR(3 DOWNTO 0); BEGIN

PROCESS(CLR,CLK,EN) BEGIN

IF en=\ IF CLR='0' THEN Q<=\

ELSIF RISING_EDGE(CLK) THEN Q<=d1; END IF; END IF; END PROCESS; Q1<=Q; END;

LIBRARY IEEE;

use ieee.std_logic_1164.all;

ENTITY DFF2 IS ------4位D触发器 PORT(

clr:in std_logic;

en:in std_logic_vector(2 downto 0);-----使能信号 clk:in std_logic;

d2:in std_logic_vector(3 downto 0);------输入信号 q2:out std_logic_vector(3 downto 0));

26

END;

architecture behave of dff2 is

signal Q:std_logic_VECTOR(3 DOWNTO 0); BEGIN

PROCESS(CLR,CLK,EN) BEGIN

IF en=\ IF CLR='0' THEN Q<=\

ELSIF RISING_EDGE(CLK) THEN Q<=d2; END IF; END IF; END PROCESS; Q2<=Q; END;

LIBRARY IEEE;

use ieee.std_logic_1164.all;

ENTITY DFF3 IS ------4位D触发器 PORT(

clr:in std_logic;

en:in std_logic_vector(2 downto 0);-----使能信号 clk:in std_logic;

d3:in std_logic_vector(3 downto 0);------输入信号 q3:out std_logic_vector(3 downto 0)); END;

architecture behave of dff3 is

signal Q:std_logic_VECTOR(3 DOWNTO 0);

27

BEGIN

PROCESS(CLR,CLK,EN) BEGIN

IF en=\ IF CLR='0' THEN Q<=\

ELSIF RISING_EDGE(CLK) THEN Q<=d3; END IF; END IF; END PROCESS; Q3<=Q; END;

LIBRARY IEEE;

use ieee.std_logic_1164.all;

ENTITY DFF4 IS ------4位D触发器 PORT(

clr:in std_logic;

en:in std_logic_vector(2 downto 0);-----使能信号 clk:in std_logic;

d4:in std_logic_vector(3 downto 0);------输入信号 q4:out std_logic_vector(3 downto 0)); END;

architecture behave of dff4 is

signal Q:std_logic_VECTOR(3 DOWNTO 0); BEGIN

PROCESS(CLR,CLK,EN) BEGIN

28

IF en=\ IF CLR='0' THEN Q<=\

ELSIF RISING_EDGE(CLK) THEN Q<=d4; END IF; END IF; END PROCESS; Q4<=Q; END;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; entity REPLAY is -----------回放模块 port(clr:in std_logic; rsh:in std_logic;

pn:buffer std_logic_vector(2 downto 0)); ---使能输出 end;

architecture behave of replay is begin process(clr,rsh) begin

if clr='0' then pn<=\

ELSif (RISLING_EDGE(RSH)) then pn<=pn+1; end if; end process; end;

29

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY select1 IS ------------------选择模块 PORT( pn:in std_logic_vector(2 downto 0);

din0,din1,din2,din3:in std_logic_vector(3 downto 0);

q00,q01,q02,q03,q10,q11,q12,q13,q20,q21,q22,q23,q30,q31,q32,q33:in std_logic_vector(3 downto 0);

dout0,dout1,dout2,dout3:out STD_LOGIC_VECTOR(3 DOWNTO 0)); end;

architecture behave of select1 is begin

process(pn,din0,din1,din2,din3,q00,q01,q02,q03,q10,q11,q12,q13,q20,q21,q22,q23,q30,q31,q32,q33) begin case pn is

when \when \when \when \when \when others => dout0<=q30;dout1<=q31;dout2<=q32;dout3<=q33; end case; end process; end;

LIBRARY IEEE;

30

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY shumaguan IS PORT(

DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); led:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END shumaguan;

ARCHITECTURE ART OF shumaguan IS BEGIN

PROCESS(DIN) BEGIN CASE DIN IS

WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \

--0 --1 --2 --3 --4 --5

WHEN \ --6 WHEN \ WHEN \ WHEN \ WHEN OTHERS=>led<=\ END CASE; END PROCESS;

END ARCHITECTURE ART;

--7 --8 --9

31

本文来源:https://www.bwwdw.com/article/oi46.html

Top