
library ieee;
use ieeestd_logic_1164all;
use ieeestd_logic_arithall;
use ieeestd_logic_unsignedall;
entity adder16b is
port(cin :in std_logic;
a ,b:in std_logic_vector(15 downto 0);
s : out std_logic_vector(15 downto 0);
cout :out std_logic
);
end adder16b;
architecture behav of adder16b is
signal sint:std_logic_vector(16 downto 0);
signal aa,bb:std_logic_vector(16 downto 0);
begin
aa<='0'&a;
bb<='0'&b;
sint<=aa+bb+cin;
s<=sint(15 downto 0);
cout<=sint(4);
end behav;
这是我在书上看到的,这个是16位的,我认为你把标准逻辑位向量改下估计就能用了,但不知道是不是有效。你试下吧。
LIBRARY IEEE;
USE IEEEstd_logic_1164ALL;
ENTITY my_adder IS
PORT(x,y,clock:IN std_logic;
sum:OUT std_logic);
END my_adder;
architecture behavioral OF my_adder IS
SIGNAL cin,cout,h_adder:std_logic;
BEGIN
h_adder <= x XOR y;
sum <= h_adder XOR cin;
cout <= (x AND Y) OR (h_adder AND cin);
PROCESS(clock)
BEGIN
IF rising_edge(clock) THEN
cin <= cout;
END IF;
END PROCESS;
END behavioral;
library ieee;
use ieeestd_logic_1164all;
use ieeestd_logic_unsignedall;
entity quanjiaqi_2wei is
port(a,b:in std_logic_vector(1 downto 0);
CIN:IN STD_LOGIC;
COUNT:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
C0:OUT STD_LOGIC);
END QUANJIAQI_2WEI;
ARCHITECTURE VHDL OF QUANJIAQI_2WEI IS
SIGNAL Q_TEMP:STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
Q_TEMP<='0'&A+B+CIN;
C0<=Q_TEMP(2);
COUNT<=Q_TEMP(1 DOWNTO 0);
END VHDL;
2位加法器和一位一样,只是把半加器换为1位全加器就可以了。。。。
ENTITY full_adder IS
PORT(a,b,c_in;IN Bit;
sum,c_out;OUT Bit);
END full_adder;
ARCHITECTURE behavioural OF full_adder IS
BEGIN
PROCESS(a,b,c_in)
BEGIN
IF(a OR b OR c_in)=’0’ THEN
sum <=‘0’;
c_out <=‘0’;
ELSIF(a AND b AND c_in)=’1’ THEN
sum <=‘1’;
c_out <=‘1’;
ELSIF(a XOR b XOR c_in)=’0’ THEN
sum <=‘0’;
c_out <=‘1’;
ELSE
sum <=‘1’;
c_out <=‘0’;
END IF;
END PROCESS;
END behavioural;
上述描述中的标点符号是在全角状态下键入的,你需要将其改成半角字符才能通过编译。
library ieee;
use ieeestd_logic_1164all;
use ieeestd_logic_unsignedall;
entity adder4bit is
port(cin: in std_logic;
a,b: in std_logic_vector(3 downto 0);
s: out std_logic_vector(3 downto 0);
cout: out std_logic );
end adder4bit;
architecture beh of adder4bit is
signal sint: std_logic_vector(4 downto 0);
signal aa,bb: std_logic_vector(4 downto 0);
begin
aa<='0' & a (3 downto 0);
bb<='0' & b(3 downto 0);
sint<= aa+bb+cin;
s(3 downto 0) <= sint (3 downto 0);
cout<= sint(4);
end beh;
供参考
Max+PlusII QuartusII 应该都可以用的
1位全加器是由2个1位半加器和1个或门构成的。
如果你已经有1位半加器的描述文件了(vhd),那么就在1位全加器的描述中,用2个元件例化语句描述2个半加器,然后用1个信号赋值语句描述1个或门就行了。
以上就是关于在Quartus软件中,首先采用VHDL语言完成一个2位全加器电路的设计。全部的内容,包括:在Quartus软件中,首先采用VHDL语言完成一个2位全加器电路的设计。、图中的 f_adder是一位全加器,cin 是输入进位,cout 是输出进位。试给出此电路的VHDL描述。、两位全加器的设计及VHDL的设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)