二位全加器(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 中的generate语句

vhdl 中的generate语句

vhdl 中的generate语句generate语句是在编写VHDL代码时用于生成重复结构的语句。

使用generate语句可以使得代码更加简洁,可读性更强,并且可以快速地生成大量的代码。

generate语句通常包含在architecture体中,在一个实体(entity)中可以定义多个architecture体。

generate语句用于生成不同的电路部件,这些电路部件并不在同一个层次上,而是在一个高层次的模块内部。

generate语句通常用于生成多个实例化模块的问题,针对于那种在实际电路中需要多个相同的模块的情况而言。

begin………其中,generate和end generate配对,位于一个缩进之内的所有语句一起作为generate语句的一部分。

在begin和end之间可以包含各种语句,例如if语句、for循环语句、case语句等。

此外,在generate语句中还可以使用类似于entity体和architecture体的定义方式来定义子程序或组合逻辑的方式来自动生成多种电路。

举个例子,假设我们要为一个N位的2进制加法器自动生成多位全加器。

假设我们已经定义了一个4位全加器,为了生成N位全加器,我们可以使用一个简单的for循环语句:生成一个4位全加器:library ieee;use ieee.std_logic_1164.all;entity fulladder isport(a: in std_logic; b: in std_logic; cin: in std_logic; s: out std_logic;cout: out std_logic);signal temp1,temp2,temp3,temp4: std_logic;temp1 <= a xor b;temp4 <= temp3 and cin;end str;现在我们可以使用generate语句来生成一个N位的全加器。

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;

二位BCD码加法器的VHDL源程序如下

二位BCD码加法器的VHDL源程序如下

二位BCD码加法器的VHDL源程序如下:ibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bcdadd is ---------------------实体部分port(key:in std_logic;---------------定义key输入口a0,a1,b0,b1:in integer range 0 to 9; -----定义两个加数的输入口a0l,a1l,b0l,b1l,s0l,s1l,s2l:out std_logic_vector(6 downto 0);----定义七个输出数码管s:out std_logic);----定义Key指示灯输出口end;architecture one of bcdadd is ----------结构体部分signal one:integer range 0 to 18; ----定义两个数的个位相加之后的信号signal ten:integer range 0 to 19; -----定义两个数的十位相加之后的信号signal co1,co2:integer range 0 to 1; ----定义个位和十位的进位信号signal s0,s1:integer range 0 to 15;beginp1:process(one,ten,a0,b0,a1,b1,co1)----第一个进程,进行加运算beginone<=a0+b0; --------------------个位相加之和if one>9 then--------------------和大于9,进位为1co1<=1;s0<=one-10; -----------------------个位的值else -----------------------和小于9,进位为0co1<=0;s0<=one; -------------------------个位的值end if;ten<=a1+b1+co1;----------------------十位相加值和,加数包括个位来的进位if ten>9 then -------------------和大于9,进位为1co2<=1;s1<=ten-10;-------------------十位的值else ----------------------------------和小于9,进位为0co2<=0;s1<=ten;-----------------------十位的值end if;end process p1;p2:process(a0,a1,b0,b1) ----------第二个进程,两个加数的输出数码管显示译码begincase a0 is ----------------------被加数的个位显示译码when 0=>a0l<="1000000";when 1=>a0l<="1111001";when 2=>a0l<="0100100";when 3=>a0l<="0110000";when 4=>a0l<="0011001";when 5=>a0l<="0010010";when 6=>a0l<="0000010";when 7=>a0l<="1111000";when 8=>a0l<="0000000";when 9=>a0l<="0010000";when others=>a0l<="ZZZZZZZ";end case;case a1 is ------------------------------被加数的十位显示译码when 0=>a1l<="1000000";when 1=>a1l<="1111001";when 2=>a1l<="0100100";when 3=>a1l<="0110000";when 4=>a1l<="0011001";when 5=>a1l<="0010010";when 6=>a1l<="0000010";when 7=>a1l<="1111000";when 8=>a1l<="0000000";when 9=>a1l<="0010000";when others=>a1l<="ZZZZZZZ";end case;case b0 is-----------------------------加数的个位显示译码when 0=>b0l<="1000000";when 1=>b0l<="1111001";when 2=>b0l<="0100100";when 3=>b0l<="0110000";when 4=>b0l<="0011001";when 5=>b0l<="0010010";when 6=>b0l<="0000010";when 7=>b0l<="1111000";when 8=>b0l<="0000000";when 9=>b0l<="0010000";when others=>b0l<="ZZZZZZZ";end case;case b1 is ----------------------------加数的十位显示译码when 0=>b1l<="1000000";when 1=>b1l<="1111001";when 2=>b1l<="0100100";when 3=>b1l<="0110000";when 4=>b1l<="0011001";when 5=>b1l<="0010010";when 6=>b1l<="0000010";when 7=>b1l<="1111000";when 8=>b1l<="0000000";when 9=>b1l<="0010000";when others=>b1l<="ZZZZZZZ";en d case;end process p2;p3:process(key,s0,s1,co2,a0,a1,b0,b1) --------第三个进程,和的显示译码以及输入大于9是的出来beginif key='0' or a0>9 or b0>9 or a1>9 or b1>9 then --当key等于0或者两个输入中的任何一个位大于9,和的数码显示均为“Z”状态s0l<="ZZZZZZZ";s1l<="ZZZZZZZ";s2l<="ZZZZZZZ";elsecase s0 is-------------------------------和的个位显示译码when 0=>s0l<="1000000";when 1=>s0l<="1111001";when 2=>s0l<="0100100";when 3=>s0l<="0110000";when 4=>s0l<="0011001";when 5=>s0l<="0010010";when 6=>s0l<="0000010";when 7=>s0l<="1111000";when 8=>s0l<="0000000";when 9=>s0l<="0010000";when others=>s0l<="ZZZZZZZ";end case;case s1 is--------------------------------和的十位显示译码when 0=>s1l<="1000000";when 1=>s1l<="1111001";when 2=>s1l<="0100100";when 3=>s1l<="0110000";when 4=>s1l<="0011001";when 5=>s1l<="0010010";when 6=>s1l<="0000010";when 7=>s1l<="1111000";when 8=>s1l<="0000000";when 9=>s1l<="0010000";when others=>s1l<="ZZZZZZZ";end case;case co2 is --------------------------和的百位显示译码when 0=>s2l<="1000000";when 1=>s2l<="1111001";end case;end if;end process p3;p4:process(key) -------------第四个进程,设置key的指示灯begini f key='1' thens<='1' ;else s<='0';end if;end process p4;end;。

VHDL全加器的设计

VHDL全加器的设计

实验四全加器的设计一、实验目的通过VHDL语言设计4位全加器,掌握加法器的设计方法;学习利用软件工具的模块封装(1位全加器)及连接使用方法,在软件工具的原理图输入法下完成4位全加器的设计。

二、实验原理根据数字电路全加器的理论知识,按图1所示的1位全加器的管脚图进行设计。

图 1 1位全加器管脚图三、实验内容用VHDL语言设计1位全加器,进行编译、波形仿真及器件编程。

代码一见附录,仿真图如下图 2 1位全加器功能仿真图使用原理图设计4位全加器进行编译、波形仿真及器件编程。

原理图如下仿真图如下用VHDL语言设计4位全加器,进行编译、波形仿真及器件编程,代码二见附录,仿真图如下图 5 4位全加器功能仿真图附录代码一、library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity swqjq isport (a,b:in std_logic;ci:in std_logic;co:out std_logic;s:out std_logic);end swqjq;architecture zhang of swqjq isbeginprocess (a,b,ci)beginif(a='0'and b='0'and ci='0') thens<='0';co<='0';elsif(a='1'and b='0'and ci='0') thens<='1';co<='0';elsif(a='0'and b='1'and ci='0') thens<='1';co<='0';elsif(a='1'and b='1'and ci='0') thens<='0';co<='1';elsif(a='0'and b='0'and ci='1') thens<='1';co<='0';elsif(a='0'and b='1'and ci='1') thens<='0';co<='1';elsif(a='1'and b='0'and ci='1') thens<='0';co<='1';elses<='1';co<='1';end if;end process;end zhang;代码二、library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder4b isport ( ci:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);co:out std_logic);end adder4b;architecture zhang of adder4b issignal sint:std_logic_vector(4 downto 0); signal aa,bb:std_logic_vector(4 downto 0); beginaa<='0'&a(3 downto 0);bb<='0'&b(3 downto 0);sint<=aa+bb+ci;s(3 downto 0)<=sint(3 downto 0);co<=sint(4);end zhang;。

EDA 实验一 用两种方法设计2位全加器

EDA 实验一 用两种方法设计2位全加器

实验一用两种方法设计2位全加器实验目的:熟悉利用Quartus II的开发环境设计简单的组合逻辑电路,掌握层次化设计的方法,并通过一个2位全加器的设计把握利用EDA软件进行电子线路设计的各种详细流程。

实验原理:一个2位全加器可由2个1位全加器构成,加法器间的进位可以用串行的方式实现,即将低位的进位输出与高位的进位输入相连接。

而1个全加器的设计可以使用2个半加器进行组合。

这种层次化的设计过程中,每一个层次都可以使用原理图或是VHDL语言来实现。

实验任务:1、完成半加器、全加器的设计,每个层次都可以用原理图或是VHDL语言实现。

将其进行仿真和测试,并生成相应的硬件符号。

2、建立更高层次的原理图设计,将2个1位全加器构成1个2位全加器,完成相应的仿真和测试,使其可以在硬件电路板上实现。

实验内容:1、半加器,全加器(两种方法)方法一:半加器:library ieee;use ieee.std_logic_1164.all;entity h_adder isport(a,b:in std_logic;co,so:out std_logic);end entity h_adder;architecture act of h_adder isbeginso<=a xor b;co<=a and b;end architecture act;全加器:library ieee;use ieee.std_logic_1164.all;entity f_adder isport(ain,bin,cin:in std_logic;sum,cout:out std_logic);end entity f_adder;architecture act of f_adder iscomponent h_adderport(a,b:in std_logic;co,so:out std_logic);end component;signal co1,co2,temp:std_logic;beginu1:h_adder port map(a=>ain,b=>bin,co=>co1,so=>temp);u2:h_adder port map(a=>temp,b=>cin,co=>co2,so=>sum); cout<=co1 or co2;end architecture;方法二:半加器:全加器:2、一个2位全加器仿真波形:第一种设计方法:第二种设计方法:实验结果与总结:丰富自己,取悦自己,随缘,随顺,随境,你的心才会敞开,才会接纳更多的有可能。

实验二 加法器的设计与仿真实验报告

实验二 加法器的设计与仿真实验报告

实验二加法器的设计与仿真一、实验目的:实现加法器的设计与仿真。

二、实验内容1.用逻辑图和VHDL语言设计全加器;2.利用设计的全加器组成串行加法器;3.用逻辑图和VHDL语言设计并行加法器。

三、实验步骤。

(一)、全加器、串行加法器和并行加法器的逻辑图。

1.全加器:2.串行加法器:3.74283:4位先行进位全加器逻辑框图:逻辑图:(二)、全加器、串行加法器和并行加法器的VHDL。

1.全加器:LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY work;ENTITY quanjiaqi ISPORT(X : IN STD_LOGIC;Y : IN STD_LOGIC;CIN : IN STD_LOGIC;S : OUT STD_LOGIC;COUT : OUT STD_LOGIC);END quanjiaqi;ARCHITECTURE bdf_type OF quanjiaqi ISSIGNAL SYNTHESIZED_WIRE_0 : STD_LOGIC;SIGNAL SYNTHESIZED_WIRE_1 : STD_LOGIC;SIGNAL SYNTHESIZED_WIRE_2 : STD_LOGIC;SIGNAL SYNTHESIZED_WIRE_3 : STD_LOGIC;BEGINSYNTHESIZED_WIRE_2 <= Y AND X;SYNTHESIZED_WIRE_1 <= CIN AND Y;SYNTHESIZED_WIRE_3 <= CIN AND X;SYNTHESIZED_WIRE_0 <= X XOR Y;S <= SYNTHESIZED_WIRE_0 XOR CIN;COUT <= SYNTHESIZED_WIRE_1 OR SYNTHESIZED_WIRE_2 OR SYNTHESIZED_WIRE_3; END bdf_type;2.串行加法器:LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY work;ENTITY chuanxingjiafaqi ISPORT(x0 : IN STD_LOGIC;y0 : IN STD_LOGIC;cin : IN STD_LOGIC;x1 : IN STD_LOGIC;x2 : IN STD_LOGIC;y2 : IN STD_LOGIC;x3 : IN STD_LOGIC;y3 : IN STD_LOGIC;y1 : IN STD_LOGIC;s0 : OUT STD_LOGIC;s1 : OUT STD_LOGIC;s2 : OUT STD_LOGIC;s3 : OUT STD_LOGIC;cout : OUT STD_LOGIC);END chuanxingjiafaqi;ARCHITECTURE bdf_type OF chuanxingjiafaqi ISCOMPONENT quanjiaqiPORT(X : IN STD_LOGIC;Y : IN STD_LOGIC;CIN : IN STD_LOGIC;S : OUT STD_LOGIC;COUT : OUT STD_LOGIC);END COMPONENT;SIGNAL SYNTHESIZED_WIRE_0 : STD_LOGIC; SIGNAL SYNTHESIZED_WIRE_1 : STD_LOGIC; SIGNAL SYNTHESIZED_WIRE_2 : STD_LOGIC;BEGINb2v_inst : quanjiaqiPORT MAP(X => x0,Y => y0,CIN => cin,S => s0,COUT => SYNTHESIZED_WIRE_0); b2v_inst1 : quanjiaqiPORT MAP(X => x1,Y => y1,CIN => SYNTHESIZED_WIRE_0,S => s1,COUT => SYNTHESIZED_WIRE_1); b2v_inst2 : quanjiaqiPORT MAP(X => x2,Y => y2,CIN => SYNTHESIZED_WIRE_1,S => s2,COUT => SYNTHESIZED_WIRE_2); b2v_inst3 : quanjiaqiPORT MAP(X => x3,Y => y3,CIN => SYNTHESIZED_WIRE_2,S => s3,COUT => cout);END bdf_type;3.74283:4位先行进位全加器LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY work;ENTITY 74283_0 ISPORT(CIN : IN STD_LOGIC;A1 : IN STD_LOGIC;A2 : IN STD_LOGIC;B2 : IN STD_LOGIC;A3 : IN STD_LOGIC;A4 : IN STD_LOGIC;B4 : IN STD_LOGIC;B1 : IN STD_LOGIC;B3 : IN STD_LOGIC;SUM4 : OUT STD_LOGIC;COUT : OUT STD_LOGIC;SUM1 : OUT STD_LOGIC;SUM2 : OUT STD_LOGIC;SUM3 : OUT STD_LOGIC );END 74283_0;ARCHITECTURE bdf_type OF 74283_0 IS BEGIN-- instantiate macrofunctionb2v_inst : 74283PORT MAP(CIN => CIN,A1 => A1,A2 => A2,B2 => B2,A3 => A3,A4 => A4,B4 => B4,B1 => B1,B3 => B3,SUM4 => SUM4,COUT => COUT,SUM1 => SUM1,SUM2 => SUM2,SUM3 => SUM3);END bdf_type;四、实验仿真结果。

数电VHDL代码-七段数码管译码器-表决器-半加器-全加器-四位串型加法器

数电VHDL代码-七段数码管译码器-表决器-半加器-全加器-四位串型加法器

七段数码管译码器library ieee;use ieee.std_logic_1164.all;entity seg7_1 isport(a: in std_logic_vector(3 downto 0);b: out std_logic_vector(6 downto 0));end entity seg7_1;architecture one of seg7_1 isbegin process(a)begin case a iswhen"0000" => b<="1111110";when"0001" => b<="0110000";when"0010" => b<="1101101";when"0011" => b<="1111001";when"0100" => b<="0110011";when"0101" => b<="1011011";when"0110" => b<="1011111";when"0111" => b<="0001111"; when"1000" => b<="1111111"; when"1001" => b<="1111011";when others => b<="0000000";end case;end process;end ;表决器library ieee;use ieee.std_logic_1164.all;entity vote isport(I: in std_logic_vector(3 downto 0); Y: out std_logic);end entity vote;architecture one of vote isbeginY<=(I(2) and I(1) and I(0)) or (I(3) and I(2) and I(0)) or (I(3) and I(1) and I(0)) or (I(3) and I(2) and I(1));end one;半加器library ieee;use ieee.std_logic_1164.all;entity hadder isport(a,b: in std_logic;s,co: out std_logic);end entity hadder;architecture one of hadder isbegins<=a xor b;co<=a and b;end one;全加器library ieee;use ieee.std_logic_1164.all;entity fadder isport(ain,bin,cin: in std_logic;cout,sum: out std_logic);end entity fadder;architecture one of fadder iscomponent hadderport(a,b:in std_logic;co,s:out std_logic);end component ;signal d,e,f:std_logic;beginu1:hadder port map (a=>ain,b=>bin,co=>d,s=>e); u2:hadder port map (a=>e,b=>cin,co=>f,s=>sum); cout<=d or f;end;四位串型加法器library ieee;use ieee.std_logic_1164.all;entity adder4 isport(A,B: in std_logic_vector(3 downto 0); M: in std_logic;R:in std_logic;S: out std_logic_vector(3 downto 0);C: out std_logic);end entity adder4;architecture a of adder4 iscomponent fadderport(ain,bin,cin:in std_logic;cout,sum:out std_logic);end component ;signal D,F:std_logic_vector(3 downto 0); beginD(0)<=M xor B(0);D(1)<=M xor B(1);D(2)<=M xor B(2);D(3)<=M xor B(3);F(0)<=M xor R;u1:fadder port map(ain=>A(0),bin=>D(0),cin=>F(0),cout=>F(1),sum=>S(0)); u2:fadder port map (ain=>A(1),bin=>D(1),cin=>F(1),cout=>F(2),sum=>S(1)); u3:fadder port map (ain=>A(2),bin=>D(2),cin=>F(2),cout=>F(3),sum=>S(2)); u4:fadder port map (ain=>A(3),bin=>D(3),cin=>F(3),cout=>C,sum=>S(3));end;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档