位二进制全加器VHDL的设计

合集下载

(12-13)1位二进制全加器的VHDL设计

(12-13)1位二进制全加器的VHDL设计

3、标准逻辑矢量:std_logic_vector( * downto *) 或者 std_logic_vector( * to *) 表示一维数组或者总线 并置操作符& 用于将单独的信号合并起来组成新的数组或 者总线 4、1位全加器的VHDL描述 半加器的VHDL描述 全加器的VHDL描述(层次设计)
作用:表示多分支情况的选择语句,各分支无优先级。 执行:每次启动CASE语句,只选择执行其中一个分支的语句。 注意:(1)对所有的情况都要赋值,否则会综合成锁存器。 (2)CASE语句只能在process语句中使用。 (3)与IF语句的区别。
2. 标准逻辑矢量数据类型STD_LOGIC_VECTOR
半加器h_adder电路图
全加器f_adder电路图
▼半加器描述和CASE语句
半加器h_adder逻辑功能真值表 a b so co 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 可使用CASE语句描述真值表
1. CASE语句
CASE语句的一般表式是:
CASE <表达式> IS When <选择值1或标识符1> => <顺序语句>; ... ; <顺序语句> ; When <选择值2或标识符2> => <顺序语句>; ... ; <顺序语句> ; ... END CASE ;
课外练习:
采用调用方法设计8位全加器 。 提示:调用8次,将8个1位全加器串连起来。
4 计数器设计
知识要点
计数器:广泛用于控制。 整数:INTEGER, 要定义范围,便于综合器确定线 宽。 • 表示方法:如2,35,16#d9#, 2#11001#等。 • 自然数和正整数。 操作符的重载函数 • 重载:给操作符赋予新的功能,使不同数据类型 的数据可以混合使用 • 使用重载函数: USE IEEE.STD_LOGIC_UNSIGNED.ALL

VHDL第4章_全加器

VHDL第4章_全加器

元件例化语句的第二部分则是此元件与当前设计实体(顶层文件 中 元件例化语句的第二部分则是此元件与当前设计实体 顶层文件)中 顶层文件 元件间及端口的连接说明。语句的表达式如下: 元件间及端口的连接说明。语句的表达式如下:
例化名 : 元件名 PORT MAP( [端口名 =>] 连接端口名 连接端口名,...); 端口名
3. 并置操作符 &
以下是一些并置操作示例: 以下是一些并置操作示例: SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; ... a <= '1'&'0'&d(1)&'1' ; -- 元素与元素并置,并置后的数组长度为 元素与元素并置,并置后的数组长度为4 & & & ... IF a & d = "101011" THEN ... –- 在IF条件句中可以使用并置符 条件句中可以使用并置符
co 0 0 0 1
1位二进制半加器 位二进制半加器
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a,b : IN STD_LOGIC; , co, so : OUT STD_LOGIC); END ENTITY h_adder; ; ARCHITECTURE fh1 OF h_adder I BEGIN so <= (a OR b)AND(a NAND b); co <= NOT( a NAND b); END ARCHITECTURE fh1;

实验 1位二进制全加器设计

实验  1位二进制全加器设计

1位二进制加法器设计一、实验目的1.熟悉Quartus II 集成环境的图形输入方法;2.学会把设计项目成为可调用元件符号和调用元件的方法;3.掌握仿真方法。

二、实验内容本实验首先使用图形输入的方法由逻辑门电路设计一个半加器,然后使用。

分别进行仿真、引脚分配并下载到电路板进行功能验证。

三、实验步骤1.创建个人实验文件夹(最好使用英文字母命名不要用中文名称)。

2.运行Quartus II 软件,选择File -> New,在Device Design Files 中选择Block Diagram/Schematic File,如图1-1所示,点击OK打开原理图编辑窗口。

图1-1 图1-23.在图形编辑窗中双击鼠标左键,将弹出元件输入对话框,在对话框右栏打开元件库找到需要的元件,如图1-2所示,点击OK即可将元件调入原理图编辑窗。

将所有需要的元件都调入编辑窗。

4.将各个元件采用单击鼠标并拖动的方法连接号电路图,然后分别在input和output的pin_name上双击使变为黑色,再分别输入各引脚名,如图1-3所示。

图1-35.选择File—>Save As命令,选择为此工程已建好目录,将设计好的原理图文件取名为h_adder.bdf同时使下方小框内出现“√”,点击保存会弹出“是否创建新工程”提示信息如图1-4所示。

图1-4图1-56.创建一个新工程:点击图1-4中“是”可进入创建工程向导(也可以File -> New project Wizard进入向导),此时看到的默认工程名、顶层实体名都为h_adder,此时将工程名换为f_adder顶层实体名不变,如图1-5所示。

点击NEXT,再在弹出窗中点击NEXT,选择目标器件:MAXII 系列EPMT1005C芯片。

按照下列的方法完成半加器的编译、仿真。

7.7. 创建一个仿真波形文件:File -> New,在Other Files 中选择Vector Waveform File,如图1-6,进入波形编辑窗口。

RTL基本知识:全加器设计(VHDL)

RTL基本知识:全加器设计(VHDL)

RTL基本知识:全加器设计(VHDL)
【设计要求】
使⽤层次化设计⽅法,⽤VHDL语⾔设计四位⼆进制全加器,并进⾏仿真。

【设计⽬的】
考查对于VHDL元件例化语法的熟悉程度;
考查对于数字电路中全加器⼯作原理的理解;
【设计思路】
⽤门实现两个⼆进制数相加并求出和的组合线路,称为⼀位全加器。

⼀位全加器可以处理低位进位,并输出本位加法进位。

多个⼀位全加器进⾏级联可以得到多位全加器。

第⼀步:⼀位全加器;
第⼆步:多位全加器,在其中例化⼀位全加器实现;
1 ⼀位全加器
a和b为两位⼆进制数据,cin为前级进位位,cout为当前计算后的进位位,sum为加法结果,电路结构和真值表如下:
2 四位全加器
四位全加器是在⼀位全加器的基础上利⽤进位进⾏串⾏级联实现,实现后的电路结构⽰意图如下:
【源代码】
1 ⼀位全加器源代码
2 四位全加器源代码
【实验结果】
【思考】
在仿真时,输⼊可能会存在⽑刺,采⽤什么⽅法可以消除⽑刺?
在设计多位全加器时,如果位数很多,⽤元件例化的⽅式程序会很长,可以采⽤什么⽅法可以改进实现?。

第4章_VHDL设计初步1

第4章_VHDL设计初步1

4.2.2 D触发器VHDL描述的语言现象说明
4. 上升沿检测表式和信号属性函数EVENT
关键词EVENT是信号属性,VHDL通过以下表式来测定 某信号的跳变边沿: <信号名>'EVENT
4.2.2 D触发器VHDL描述的语言现象说明
5. 不完整条件语句与时序电路
【例4-11】 ENTITY COMP_BAD IS PORT( a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 > b1 THEN q1 <= '1' ; ELSIF a1 < b1 THEN q1 <= '0' ;-- 未提及当a1=b1时,q1作何操作 END IF; END PROCESS ; END ;
第4章
本章内容
4.1 多路选择器VHDL描述(简单组合电 路) 4.2 寄存器描述及其VHDL语言现象(简 单时序电路) 4.3 1为二进制全加器的VHDL设计(实例) 4.4 VHDL文本输入设计方法(工具使用, 通过上机操作掌握)
本章重点掌握内容
1、实体及端口的定义。 2、结构体和信号的定义。 3、基本逻辑操作符和信号赋值操作符。 4、IF-THEN-ELSE(顺序)、WHEN-ELSE (并行)语句。 5、进程语句。 6、信号的上升沿表示方法。 7、元件例化方法。
是什么是VHDL?
Very high speed integrated Hardware Description Language (VHDL)
是IEEE、工业标准硬件描述语言 用语言的方式而非图形等方式描述硬件电路

VHDL加法器和减法器的原理

VHDL加法器和减法器的原理

VHDL加法器和减法器的原理加法器3.2.1 加法器的原理在将两个多位二进制数相加时,除了最低位以外,每一位都应该考虑来自低位的进位,即将两个对应位的加数和来自低位的进位3个数相加。

这种运算称为全加,所用的电路称为全加器。

多位加法器的构成有两种方式:并行进位和串行进位。

并行进位加法器设有进位产生逻辑,预算速度较快;串行进位方式是将全加器级联构成多位加法器。

并行进位加法器通常比串行级联加法器占用更多的资源。

随着为数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大,因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。

本次设计采用的是并行加法器方式。

3.2.2 加法器要求实现的功能实现两个二进制数字的相加运算。

当到达时钟上升沿时,将两数输入,运算,输出结果。

3.2.3 加法器的VHDL语言实现(以下以12位数加16位数生成16位数的加法器为例)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_arith.ALL;ENTITY add121616 isPORT(clk : in STD_LOGIC;Din1 :in signed (11 downto 0);Din2 :in signed (15 downto 0);Dout:out signed (15 downto 0));END add121616;ARCHITECTURE a of add121616 isSIGNAL s1: signed(15 downto 0);BEGINs1<=(Din1(11)&Din1(11)&Din1(11)&Din1(11)&Din1);PROCESS(Din1,Din2,clk)BEGINif clk'event and clk='1' thenDout<=s1+Din2;end if;end process;end a;3.2.4 加法器的模块图3.2.5 加法器的波形仿真完全符合设计要求。

1用VHDL设计的一位二进制全加器的示例程序

1用VHDL设计的一位二进制全加器的示例程序

1用VHDL设计的一位二进制全加器的示例程序library ieee;use ieee.std_logic_1164.all;entity adder is port(a, b,ci : in bit;sum : out bit);end adder;architecture a of adder isbeginsum<=a xor b xor ci;co<=((a or b) and ci) or ( a and b);end a;2用vhdl语言实现一个脉冲信号的十分频ibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity div isgeneric (duty : integer := 5);port (clk : in std_logic;Q : out std_logic);end div ;architecture divlo of div isconstart period : integer := 10;signal count : integer range 0 to period-1;beginprocess (clk)beginif rising_edge ( clk ) thenif count < duty thenQ <= …0‟ ;count <= count+1;else if count < period-1 thenQ <= …1‟ ;count <= count+1 ;else count <= …0‟ ;end if ;end if ;end process ;end divlo ;3用vhdl 语言if 语句来实现2选1数据选择器ibrary ieee;use ieee.std_logic_1164.all;entity choose isport (d0;d1,sel : in std_logic;y : out std_logic );end choose ;architecture arc of choose isbegin process(d0,d1,sel)beginif (sel <= …1‟) theny <= d1;else y <= d0 ;end if ;end process ;end arc;4用VHDL实现3-8译码器ibrary ieee;use ieee.std_logic_1164.all;entity encoder isport ( a : in std_logic_vector ( 2 downto 0 );b : out std_logic_vector ( 7 downto 0));end encoder ;architecture behav of encoder issignal indata : std_logic_vector ( 2 downto 0 ); beginprocess (a)beginindata <= a(2)&a(1)&a(0);case indata iswhen “000”=>b<=”00000001”;when “001”=>b<=”00000010”;when “010”=>b<=”00000100”;when “011”=>b<=”00001000”;when “100”=>b<=”00010000”;when “101”=>b<=”00100000”;when “110”=>b<=”01000000”;when “111”=>b<=”10000000”;when others =>b<=”XXXXXXXX”;end case ;end process ;end behav ;。

VHDL加法器设计1

VHDL加法器设计1

VHDL 加法器设计设计要求:采用QuartusII 集成开发环境利用VHDL 硬件描述语言设计传播进位加法器,直接进位加法器,线形进位加法器,平方根进位加法器,并比较这四种加法器的性能。

为了便于比较性能,将四种加法器都设定为28位。

一、全加器设计全加器是上述四种加法器的基础部件,首先应当设计一位全加器。

设计原理:i i i iS ABC ABC ABC ABC A B C=+++=⊕⊕0i i C AB BC AC =++VHDL 程序:仿真结果:--一位全加器设计library ieee;use ieee.std_logic_1164.all; entity fulladd isport ( A: in std_logic;B: in std_logic; cin:in std_logic; sumbit:out std_logic; cout:out std_logic );end fulladd;architecture behav of fulladd is beginsumbit<=(A xor B) xor cin;cout<=(a and b) or (cin and a) or (cin and b); end behav;二、传播进位加法器设计实际上加法器就是是全加器的级联,其中的每个FA网络为一个全加器(采用上文所述的全加器)VHDL代码:--传播进位加法器library ieee;use ieee.std_logic_1164.all;use work.all;entity carry_propogate_adder isport (A: in std_logic_vector(27 downto 0);B: in std_logic_vector(27 downto 0);cin:in std_logic;sum:out std_logic_vector(27 downto 0);cout:out std_logic);end carry_propogate_adder;architecture behav of carry_propogate_adder issignal ct:std_logic_vector(28 downto 0);component fulladd isport (A: in std_logic;B: in std_logic;cin:in std_logic;sumbit:out std_logic;cout:out std_logic);end component;beginct(0)<=cin;cout<=ct(28);G1: for i in 0 to 27 generatel1:fulladd port map (A(i),B(i),ct(i),sum(i),ct(i+1));end generate G1;end behav;功能仿真:延时测定:由图中的两个时间bar 的差值可看出,sum 值和cout 值几乎同时计算出,其Tdelay=28.332ns (cin 无关)三、直接进位加法器设计 设计原理:首先将AB 输入转换为PG 输入,若每级的P 输入都是‘1’则直接将Ci 传给Co ,否则像传播进位加法器一样计算其AB-PG 转换网络原理:Fa 全加器原理:P A B G AB=⊕=o i iC G PC S P C =+=⊕VHDL 代码:-- FA 子单元 library ieee;use ieee.std_logic_1164.all;entity Fa isport (Pi,Gi,Ci:in std_logic; Coi,Si:out std_logic); end Fa;architecture Fabehav of Fa is beginCoi<=Gi or (Pi and Ci);Si<=Pi xor Ci; end Fabehav; --ABtoPG 转换网络 library ieee;use ieee.std_logic_1164.all;entity PGNet isport(Ai,Bi:in std_logic; Pi,Gi:out std_logic); end PGNet;architecture PGbehav of PGNet is beginPi<=Ai xor Bi;Gi<=Ai and Bi; end PGbehav; --传播进位加法器 library ieee;use ieee.std_logic_1164.all; entity bypass_adder is port(A,B:in std_logic_vector(27 downto 0); Ci:in std_logic; Sum:out std_logic_vector(27 downto 0); Co:out std_logic );end bypass_adder;architecture adderbehav of bypass_adder is component Fa is port (Pi,Gi,Ci:in std_logic; Coi,Si:out std_logic ); end component; component PGNet is port(Ai,Bi:in std_logic; Pi,Gi:out std_logic ); end component;signal P,G:std_logic_vector(27 downto 0); signal C:std_logic_vector(28 downto 0); signal BP:std_logic; begin C(0)<=Ci; G1: for i in 0 to 27 generate l1: PGNet port map(A(i),B(i),P(i),G(i)); end generate G1; G2: for i in 0 to 27 generate l2:Fa port map (P(i),G(i),C(i),C(i+1),Sum(i)); end generate G2; BP<='1' when P="11111111111111111111111111111111" else '0'; Co<=Ci when BP='1' else C(8); end adderbehav;功能仿真:延时仿真:当通过直接进位网络(图中testp值全部为1时),进位信号有一定提前,但由于计算所有的P值本身也需要一定时间,所以改善并不明显。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
并置操作符& 用于将单独的信号合并起来组成新的数组或
者总线 4、1位全加器的描述
半加器的描述 全加器的描述(层次设计)
半加器电路图 全加器电路图
▼半加器描述和语句
半加器逻辑功能真值表 ab 00 0 0 01 1 0 10 1 0 11 0 1
可使用语句描述真值表
1. 语句
语句的一般表式是:
<表达式> <选择值1或标识符1> => <顺序语句>; ... ; <顺序语句> ; <选择值2或标识符2> => <顺序语句>; ... ; <顺序语句> ; ...
1位二进制全加器的设计
2012-3-12
本节知识要点:
1、语句 表示多分支情况的选择语句,各分支无优先级。 与语句的区别。 2、元件例化语句(有2个语句组成) 用于层次设计,即在当前设计中调用一个已经设计好
的功能模块 语句:将一个设计实体定义为一个元件
语句: 用于元件调用(端口映射)。
3、标准逻辑矢量:( * *) 或者 ( * *) 表示一维数组或者总线
【例】
.<= a & b ; <= (1) ; <= (0) ; ()
"00" => <="00" ; "01" => <="01" ; "10" => <="01" ; "11" => <="10" ; ; ; 1;
【例】 1位二进制全加器顶层设计描述
; 1164;

作用:表示多分支情况的选择语句,各分支无优先级。 执行:每次启动语句,只选择执行其中一个分支的语句。
注意:(1)对所有的情况都要赋值,否则会综合成锁存器。 (2)语句只能在语句中使用。 (3)与语句的区别。
2. 标准逻辑矢量数据类型
在使用中,必须注明其数组宽度,即位宽,如: B : (7 0) --8位数 或 A :(1 4)--4位数
' = '1' Q1 <= Q1 + 1 ; 右边两个不同数据类型的数相加
; ;
Q <= Q1 ; ;
❖ 内部信号无传输方向限制; ❖ 重载:对操作符赋予(即加载)新的功能。 ❖ 运算符重载:调用运算符重载函数后,不同类型
元件名 (端口名表) ; 文件名 ;
元件例化语句的第二部分则是此元件引脚与当前设计实体(顶层文件) 中的具体信号连接起来。语句的表达式如下:
例化名 : 元件名 ( [端口名 =>] 连接端口名,...);
注意连接顺序:左边表示元件引脚名,右边表示与该引脚相连的实际 信号名。
课外练习:
采用调用方法设计8位全加器 。 提示:调用8次,将8个1位全加器串连
❖ 正整数,不包含0;
❖ 都定义在标准程序包中,是默认打开的,所以 不需要进行库的声明语句。
4.4 计数器设计
▼ 计数器设计的另一种表述
【例】 ;
1164 ; ;
4 (: ;
Q: (3 0)) ; ;
【例】 。。。。。。。。。。。。。。。
4 Q1 : (3 0);
--Q1为内部信号,无传输方向限制 ()
❖模式 ❖当输出的量内部需要用时,必须定义为类型。 ❖计数器的电路结构 ❖一个加法器 ❖一个锁存器 ❖ Q<1对应的电路解释(工作过程) ❖变量 ❖在进程语句内部定义和使用 ❖省略赋值符 ❖( => X)
❖ 十进制计数器的设计 ❖ 使能型号和复位信号 ❖ 内部变量的定义 ❖ 进位信号 ❖ 移位寄存器的设计 ❖ 并行置位 ❖ 移位寄存器的描述 ❖ 移位输出
4 计数器设计
【例】 4 (: ; Q: ; 4
15 0);
()
' = '1' Q <= Q + 1 ; --两边的数据类型相同 ; ; ;
4.4 计数器设计
▼ 4位加法计数器
表面上具有双向端口的功能,但实际上其输入功能是 不完整的,它只能将自己输出的信号再反馈回来,并不含 有的功能。
表式Q <= Q + 1的右项与左项并非处于相同的时刻内, 对于时序电路,除了传输延时外,前者的结果出现于当前 时钟周期;后者,即左项要获得当前的Q + 1,需等待下 一个时钟周期。
▼ 整数类型
4.4 计数器设计
1
十进制整数
0
十进制整数
35
十进制整数
10E3
十进制整数,等于十进制整数1000
169#
十六进制整数,等于十六进制整数D9H
8#720#
八进制整数,等于八进制整数720
2#11010010# 二进制整数,等于二进制整11010010B
例 Q : 15 0;
❖ 自然数,包含0和所有正整数;
起来。
4 计数器设计
❖ 知识要点 ❖ 计数器:广泛用于控制。 ❖ 整数:, 要定义范围,便于综合器确定线宽。 ❖ 表示方法:如2,35,16#d9#, 2#11001#等。 ❖ 自然数和正整数。 ❖ 操作符的重载函数 ❖ 重载:给操作符赋予新的功能,使不同数据类型的数据可以混
合使用 ❖ 使用重载函数:
c <= a b ; 1;
【例】 ; 半加器描述(1) 1164;
(a, b : ; , : );
; 1
<= (a ( b)) ; <= a b ; 1;
【例】 ; 半加器描述(2) 1164;
(a, b : ; , : );
;
【例】 1 : (1 0) ;
<= a & b ; ()
"00" => <='0'; <='0' ; "01" => <='1'; <='0' ; "10" => <='1'; <='0' ; "11" => <='0'; <='1' ; => ; ; ;
(,, : ; , : );
;
1
( a,b : ; , : ); ; 2a (a,b : ;
c : ); ; d,e,f : ;
u1 : (>,>,>d,>e); u2 : (>e, >, >f,>); u3 : 2a (>d, >f, >);
1;
▼全加器描述和例化语句
元件例化语句由两部分组成,第一部分是将一个现成的 设计实体定义为一个元件,语句的功能是对待调用的元件 作出调用声明,它的最简表达式如下所示:
3. 并置操作符
以下是一些并置操作示例:
a : (3 0) ;
d : (1 0) ;
...
a <= ‘1’ ‘0’ d(1) ‘1’ ; 元素与元素并置, 并置后的数组长度为4
...
a 置符
d = "101011" ... –- 在条件句中可以使用并
【例】 或门逻辑描述 1164; 2a (a, b ; c : ); 2a; 2a
相关文档
最新文档