VHDL程序设计数字电子表2
VHDL的乘法器设计——数字电路课程设计

cout=>c4,s=>s4(1));
------------------------------last u12:full_adder port map (a=>d4(1),b=>d4(2),cin=>d4(3),
【第二章】:设计思路及方案 算法结构(无符号)
由上图可见,乘法的运算最终是加法的运算,两个 4BIT 输入,输出为 7BIT。 模块一、半加器:单比特输入相加,
模块二、全加器:由两个半加器组成,有一个进位输入,
模块三、进位保留加法器:
3
最终程序结构图
流水设计的原理:在前向割集上加入四级流水
图一 图二
elsif clk'event and clk='1' then
--------------------------------------first d1(1)<= x(1); d1(2)<= x(2); d1(3)<= x(3);
7
d1(4)<= x(4); d1(5)<= x(5); d1(6)<= x(6); d1(7)<=c1(1) ; d1(8)<=s1(1); d1(9)<= x(9); d1(10)<=x(10); d1(11)<=c1(2); d1(12)<=s1(2); d1(13)<=x(13); d1(14)<=c1(3) ; d1(15)<=s1(3) ; d1(16)<=x(16);
数字逻辑电路(数电)课程设计_电子秒表_VHDL实现(含完整源代码!!)

电子科技大学UNIVERSITY OF ELECTRONIC SCIENCE AND TECHNOLOGY OF CHINA数字逻辑设计实验报告实验题目:电子秒表学生姓名:指导老师:一、实验内容利用FPGA设计一个电子秒表,计时范围00.00 ~ 99.00秒,最多连续记录3个成绩,由两键控制。
二、实验要求1、实现计时功能:域值范围为00.00 ~ 99.00秒,分辨率0.01秒,在数码管上显示。
2、两键控制与三次记录:1键实现“开始”、“记录”等功能,2键实现“显示”、“重置”等功能。
系统上电复位后,按下1键“开始”后,开始计时,记录的时间一直显示在数码管上;按下1键“记录第一次”,次按1键“记录第二次”,再按1键“记录第三次”,分别记录三次时间。
其后按下2键“显示第一次”,次按2键“显示第二次”,再按2键“显示第三次”,数码管上分别显示此前三次记录的时间;显示完成后,按2键“重置”,所有数据清零,此时再按1键“开始”重复上述计时功能。
三、设计思路1、整体设计思路先对按键进行去抖操作,以正确的得到按键信息。
同时将按键信息对应到状态机中,状态机中的状态有:理想状态、开始状态、3次记录、3次显示、以及其之间的7次等待状态。
因为需要用数码管显示,故显示的过程中需要对数码管进行片选和段选,因此要用到4输入的多路选择器。
在去抖、计时、显示的过程中,都需要用到分频,从而得到理想频率的时钟信号。
2、分频设计该实验中有3个地方需要用到分频操作,即去抖分频(需得到200HZ时钟)、计时分频(需得到100HZ时钟)和显示分频(需得到25kHZ时钟)。
分频的具体实现很简单,需首先算出系统时钟(50MHZ)和所需始终的频率比T,并定义一个计数变量count,当系统时钟的上升沿每来到一次,count就加1,当count=T时就将其置回1。
这样只要令count=1~T/2时clk=‘0’,count=T/2+1~T时clk=‘1’即可。
第1章VHDL语言基础

位矢量(BIT_VECTOR)。若端口定义为BIT,则其信号值 是一个1位的二进制数,取值只能是0或1;若端口定义为 BIT_VECTOR,则其信号值是一组二进制数。
➢ 在电路中,如果实体代表一个器件符号,则结构体描述了 这个符号的内部行为。当把这个符号例化成一个实际的器 件安装到电路上时,则需用配置语句为这个例化的器件指 定一个结构体(即指定一种实现方案),或由编译器自动选一 个结构体。
1. 结构体的一般语句格式 ARCHITECTURE 结构体名 OF 实体名 IS [说明语句;] BEGIN [功能描述语句;] END [ARCHITECTURE] [结构体名];
1.1 VHDL程序基本结构
一、VHDL程序设计约定 ➢ 语句结构描述中方括号“[ ]”内的内容为可选内容。 ➢ 对于VHDL的编译器和综合器来说,程序文字的大小写是不
加区分的。 ➢ 程序中的注释使用双横线“- -”。 ➢ 源程序命名与实体同名(MAX+plus Ⅱ要求)。
二、VHDL程序设计引例( 74LS00的设计 )
③ 信号赋值语句将设计实体内的处理结果向定义的信号或界面 端口进行赋值。
④ 子程序调用语句用于调用一个已设计好的子程序。
⑤ 元件例化语句对其他的设计实体作元件调用说明,并将此元 件的端口与其他的元件、信号或高层次实体的界面端口进行 连接。
A
A NAND2
Y
Y
B
B
(a)
A1
A NAND2
U1 Y
Y1
B1
B
A2
A NAND2
第2章 VHDL语言基础

End 实体名;
端口名
端口模式
数据类型
(2)ENTITY
端口模式(MODE)有以下几种类型: IN ;OUT;INOUT ;BUFFER 端口模式可用下图说明:(黑框代表一个设计或模块)
IN
OUT
BUFFER
INOUT
二输入与门电路设计范例
Library std; Use std.standard.all;
(4)CONFIGURATION定义区
定义格式: Configuration 配置名 of 实体名 is for 选用的结构体名 end for; end configuration 配置名 ;
二输入与门电路设计范例
a c
b电Leabharlann 真值表abc
0
0
0
1
0
0
0
1
0
1
1
1
二输入与门电路设计范例
Architecture Na of and2 is
‘1’; 符号<=为信号直接赋值符。
End Na;
--结构体Na
Architecture Nb of and2 is
Begin
c <= a and b;
--and 为逻辑与操作
End Nb; --结构体Nb
Library ieee; Use ieee.std_logic_1164.all;
Entity half_adder is Port( x,y : in std_logic;sum,carry : out hlf_adder); End half_adder;
(4)CONFIGURATION定义区
一个完整VHDL电路设计必须有一个实体 和对应的结构体,即实体和结构体对构成一个 完整的VHDL设计。
VHDL实验报告(1)

VHDL 实验报告******班级:电子0701学号:************实验一组合逻辑电路设计一实验目的:1. 熟悉mux+pluxII软件,可以进行新文件的编辑和文件的修改。
2. 掌握门电路VHDL语言程序设计方法。
3. 掌握选择器VHDL语言程序设计方法。
4. 掌握加法器VHDL语言程序设计方法。
5. 熟悉VHDL编程的基本方法。
二实验设备:1.计算机2.Max+PlusII软件三实验原理及内容:1 二输入与门(1)实验原理二输入与门是我们数字电路中的一个基础逻辑门电路,是最基本的逻辑门电路之一,也是最简单的逻辑门之一。
它能实现两个输入端的相与,一般有三个端口。
二输入与门的表达式是:Y=ab二输入与门的逻辑符号如图(1)所示,真值表如表(1)所示。
图(1)与门逻辑符号表(1)与门真值表(2)实验内容a.在mux+pluxII文本编辑环境下,打开新文本,编写两输入与门VHDL语言源程序,程序设计如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY and2 ISPORT(a,b: IN STD_LOGIC;Y: OUT STD_LOGIC);END and2;ARCHITECTURE behave OF and2 ISBEGINY <= a and b;END behave;b.对源程序进行编译,按照提示进行修改,直至编译通过。
c.对编译程序进行仿真,分析并记录仿真波形,其仿真波形图如图(2)所示。
图(2)二输入与门仿真图d.在自己的目录下保存相应的源文件、波形文件。
2 四选一选择器(1)实验原理四选一选择器如图(3)所示,真值表如表(2)所示。
图(3)mux4管脚图表(2)mux4真值表(2)实验内容a.在mux+plusII文本编辑环境下,打开新文件,编辑四选一VHDL源程序文件,其程序设计如下:LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT(A: IN STD_LOGIC_VECTOR (1 DOWNTO 0);D0,D1,D2,D3:IN STD_LOGIC;G:IN STD_LOGIC;Y: OUT STD_LOGIC);END mux4;ARCHITECTURE dataflow OF mux4 ISBEGINPROCESS (A,D0,D1,D2,D3,G)BEGINIF (G ='0') THENIF (A="00")THEN Y <= D0;ELSIF(A="01")THEN Y <= D1;ELSIF(A="10")THEN Y <= D2;ELSE Y <= D3;END IF;ELSE Y <='0';END IF;END PROCESS;END dataflow;b.对源程序进行编译,按照提示进行修改,直到编译通过。
实验二 基于VHDL格雷码编码器的设计

实验二基于VHDL格雷码编码器的设计一、实验目的1、了解格雷码变换的原理。
2、进一步熟悉QUARTUSII软件的使用方法和VHDL输入的全过程。
3、进一步掌握实验系统的使用。
二、实验原理格雷(Gray)码是一种可靠性编码,在数字系统中有着广泛的应用。
其特点是任意两个相邻的代码中仅有一位二进制数不同,因而在数码的递增和递减运算过程中不易出现差错。
但是格雷码是一种无权码,要想正确而简单的和二进制码进行转换,必须找出其规律。
根据组合逻辑电路的分析方法,先列出其真值表再通过卡诺图化简,可以很快的找出格雷码与二进制码之间的逻辑关系。
其转换规律为:高位同,从高到低看异同,异出‘1’,同出‘0’。
也就是将二进制码转换成格雷码时,高位是完全相同的,下一位格雷码是‘1’还是‘0’,完全是相邻两位二进制码的“异”还是“同”来决定。
下面举一个简单的例子加以说明。
假如要把二进制码10110110转换成格雷码,则可以通过下面的方法来完成,方法如图2-1。
图2-1 格雷码变换示意图因此,变换出来的格雷码为11101101。
三、实验内容本实验要求完成的任务是变换12位二进制码到12位的格雷码。
实验中用12位拨动开关模块的K1~K12表示8位二进制输入,用LED模块的LED1~LED12来表示转换的实验结果十二位格雷码。
实验LED亮表示对应的位为‘1’,LED灭表示对应的位为‘0’。
通过输入不同的值来观察输入的结果与实验原理中的转换规则是否一致。
实验箱中的拨动开关、与FPGA的接口电路,LED灯与FPGA的接口电路以及拨动开关、LED与FPGA的管脚连接在实验一中都做了详细说明,这里不在赘述。
四、实验步骤1、 打开QUARTUSII 软件,新建一个工程。
2、建完工程之后,再新建一个VHDL File 。
新建一个VHDL 文件的过程如下: 1)选择QUARTUSII 软件中的File>New 命令,出现New 对话框。
如图2-2所示。
配套课件 EDA技术与VHDL程序设计基础教程

它支持原理图、VHDL和Verilog 语言文本输入方式和波形或EDIF 格式的文件作为输入,且支持这 些文件的混合设计。
Quartus II的GUI界面
EDA技术与VHDL程序开发基础教程
五、EDA集成开发工具
ISE+ModelSim
ispLEVER
EDA技术与VHDL程序开发基础教程
。(b)中三条竖线A、B、C也为输入线,输入到或门的横线为和线。和线与
输入线的交叉点为编程点。
当输入线与和线相连通时,
在编程点处以“×”表示。
Y=AB
可以看出,图中电路表示
Y=A+B+C
的逻辑表达式分别为Y=AB
和Y=A+B+C。
ABC
ABC
(a)
(b)
EDA技术与VHDL程序开发基础教程
三、 CPLD的基本结构和工作原理
EDA技术与VHDL程序开发基础教程
第1章 EDA概述
重点内容:
EDA技术发展和应用 EDA工程设计流程 EDA集成开发工具
EDA技术与VHDL程序开发基础教程
一、EDA工程简介
EDA(Electronic Design Automation)工程是现代电子信息工程领 域中一门发展迅速的新技术。
流程
需求分析
算法设计 (Algorithm Optimization)
构架设计 (Architecture Exploration)
RTL 设计 (RTL Design)
RTL 验证 (RTL Verification)
综合 (Synthesis)
门级验证 (Gate-level Verification)
VHDL与数字电路设计PPT课件-第一章VHDL程序的基本结构

ARCHITECTURE dataflow OF eqcomp4 IS BEGIN
equal <= ‘1’ WHEN a=b ELSE ‘0’; END dataflow;
VHDL 对大小写不敏感
每行;结尾 关键字END后 跟实体名
关键字BEGIN
关键字END后 跟构造体名
8
VHDL与数字电路设计
1
h
目录
一 基本结构 二 库和程序包 三 实体 四 结构体 五 配置
2
h
1、基本结构
如图代表的是一个芯片的内部俯视图,下面范例 介绍如何使用VHDL程序设计该芯片电路。
Pin48
Pin7
3
h
LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; USE IEEE.std_logic_arith.ALL; USE IEEE.std_logic_unsigned.ALL;
h
2、库和程序包
LIBRARY(库)是用于存放预先编译好的设计单元(实体 说明、结构体、配置说明、程序包说明和程序包体等)。
PACKAGE (程序包)中定义了基本的常数,数据类型,元 件及子程序等。
作用:
声明在实体和结构体定义中将用到的数据类型、元件 或子程序等。
声明格式:
LIBRARY <库名>; USE <库名>.<程序包名>.ALL; USE <库名>.<程序包名>.<程序包中的项目>;
LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; USE IEEE.std_logic_arith.ALL; USE IEEE.std_logic_unsigned.ALL;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
-- 子文件定义代码
ARCHITECTURE a OF COUNTER24 IS
SIGNAL Q
:
STD_LOGIC_VECTOR (4 DOWNTO 0) ;
SIGNAL RST, DLY :
STD_LOGIC;
BEGIN
PROCESS (CP,RST)
BEGIN
IF RST = '1' THEN
ENB (2)
扫描电路 S(3)
ENB (1)
ENB (0)
NUM(4)
CYH
BCD 选择
BCD (7-4)
BCD (3-0)
24
进
CYM
制
计数器
DBH
60
进
CYS
制
计数器
DBM
60 进 制 计数器
DBS
BCD(8)BIN(6)
BIN ( 6 )
CLR
PROCESS (CP) Begin IF CP'Event AND CP='1' then DLY <= Q(21); Q <= Q+1; END IF;
SELECT_BCD : Block BEGIN NUM <= BCD(3 DOWNTO 0)
WHEN (S=0 OR S=2 OR S=4) ELSE BCD(7 DOWNTO 4); End Block SEL Begin
--gfedcba SEG <= "0111111" WHEN NUM = 0 ELSE
CP : IN STD_LOGIC; BIN : OUT STD_LOGIC_VECTOR (5 DOWNTO 0); S : IN STD_LOGIC; CLR : IN STD_LOGIC; EC : IN STD_LOGIC; CY24 : OUT STD_LOGIC ); END COUNTER24;
ELSIF CP'event AND CP = '1' THEN DLY <= Q(5); IF EC = '1' THEN Q <= Q+1; END IF;
END IF; END PROCESS;
END a;
CY60 <= NOT Q(5) AND DLY; RST <= '1' WHEN Q=60 OR CLR='1' ELSE
BIN <=
DBS WHEN ENB = "001" ELSE DBM WHEN ENB = "010" ELSE DBH WHEN ENB = "100" ELSE "000000";
End Block Free_Counter;
--主文件声明代码
COMPONENT COUNTER60 PORT(
'0'; BIN <= Q WHEN S = '1' ELSE
"000000";
--主文件声明代码
COMPONENT COUNTER24 PORT(
CP : IN STD_LOGIC; BIN : OUTSTD_LOGIC_VECTOR (5 DOWNTO 0); S : IN STD_LOGIC; CLR : IN STD_LOGIC; EC : IN STD_LOGIC; CY60 : OUT STD_LOGIC ); END COMPONENT;
-- 子文件定义代码 --*************************************************** LIBRARY IEEE; USE IEEE.STD_LOGIC_UNSIGNED.ALL; --*************************************************** ENTITY COUNTER60 IS PORT(
-- 子文件定义代码 --*************************************************** LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; --*************************************************** ENTITY COUNTER24 IS PORT(
"0000110" WHEN NUM = 1 ELSE "1011011" WHEN NUM = 2 ELSE "1001111" WHEN NUM = 3 ELSE "1100110" WHEN NUM = 4 ELSE "1101101" WHEN NUM = 5 ELSE "1111101" WHEN NUM = 6 ELSE "0000111" WHEN NUM = 7 ELSE "1111111" WHEN NUM = 8 ELSE "1101111" WHEN NUM = 9 ELSE "1110111" WHEN NUM = 10 ELSE "1111100" WHEN NUM = 11 ELSE "0111001" WHEN NUM = 12 ELSE "1011110" WHEN NUM = 13 ELSE "1111001" WHEN NUM = 14 ELSE "1110001" WHEN NUM = 15 ELSE "0000000"; End Block SEVEN_SEGMENT;
END PROCESS;
Free_Counter : Block Signal Q Signal DLY
Begin
: STD_LOGIC_VECTOR(24 DOWNTO 0); : STD_LOGIC;
PROCESS (CP) Begin
IF CP'Event AND CP='1' then DLY <= Q(21); Q <= Q+1;
'0'; BIN <= ('0' & Q) WHEN S = '1' ELSE
"000000";
Binary_BCD : Block BEGIN
BCD <=
"00000000" WHEN BIN = 0 ELSE "00000001" WHEN BIN = 1 ELSE "00000010" WHEN BIN = 2 ELSE "00000011" WHEN BIN = 3 ELSE "00000100" WHEN BIN = 4 ELSE "00000101" WHEN BIN = 5 ELSE "00000110" WHEN BIN = 6 ELSE "00000111" WHEN BIN = 7 ELSE "00001000" WHEN BIN = 8 ELSE "00001001" WHEN BIN = 9 ELSE "00010000" WHEN BIN = 10 ELSE "00010001" WHEN BIN = 11 ELSE "00010010" WHEN BIN = 12 ELSE "00010011" WHEN BIN = 13 ELSE "00010100" WHEN BIN = 14 ELSE "00010101" WHEN BIN = 15 ELSE "00010110" WHEN BIN = 16 ELSE "00010111" WHEN BIN = 17 ELSE "00011000" WHEN BIN = 18 ELSE "00011001" WHEN BIN = 19 ELSE "00100000" WHEN BIN = 20 ELSE "00100001" WHEN BIN = 21 ELSE "00100010" WHEN BIN = 22 ELSE "00100011" WHEN BIN = 23 ELSE "00100100" WHEN BIN = 24 ELSE "00100101" WHEN BIN = 25 ELSE "00100110" WHEN BIN = 26 ELSE "00100111" WHEN BIN = 27 ELSE
-- 子文件定义代码
ARCHITECTURE a OF COUNTER60 IS SIGNAL Q : STD_LOGIC_VECTOR (5 DOWNTO 0) ; SIGNAL RST, DLY : STD_LOGIC;
BEGIN
PROCESS (CP,RST) BEGIN
IF RST = '1' THEN Q <= "000000";
第六章 VHDL综合应用
数字电子时钟显示电路
6 个七段数码管 SEGOUT ( 8 )
时钟显示 电路方框图
SELOUT ( 6 )
FPGA
CLR
CP
38
6 个七段数码管
译
码
SEG (8)