📄 add1.vhd
字号:
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_ARITH.ALL;
ENTITY add1 IS
PORT(a, b : IN STD_LOGIC_VECTOR(7 downto 0);--操作数
ci,clk : IN STD_LOGIC;--最低位进位
sign : IN STD_LOGIC;--有符号数无符号数标志位,0为无符号数,1为有符号数
sign1 : IN STD_LOGIC;--加减法标志,0为加法,1为减法
y_out : OUT STD_LOGIC_VECTOR(7 downto 0);--运算结果
co_out: OUT STD_LOGIC;--最高位进位
c : OUT STD_LOGIC ;--进位标志
z : OUT STD_LOGIC ;--零标志
v : OUT STD_LOGIC ;--溢出标志
s : OUT STD_LOGIC);--符号位标志
END add1;
ARCHITECTURE doing OF add1 IS
SIGNAL co,y : STD_LOGIC_VECTOR(7 downto 0);
SIGNAL r : STD_LOGIC_VECTOR(7 downto 0);
SIGNAL b_cin,carryout,overflow : STD_LOGIC;
SIGNAL b_data : STD_LOGIC_VECTOR(7 downto 0);
BEGIN
b_cin<='1' WHEN sign1='1' ELSE
'0';
b_data<=NOT b WHEN sign1='1' ELSE--如为减法则减数取反
b ;
y(0)<=a(0) XOR b_data(0) XOR ci XOR b_cin;
co(0)<=(a(0) AND b_data(0)) OR (b_data(0) AND ci) OR (a(0) AND ci) OR (a(0) AND b_cin) OR (b_data(0) AND b_cin) OR (b_cin AND ci);
GEN:--从第2位到第8位循环运算
FOR i IN 1 TO 7 GENERATE
y(i)<=a(i) XOR b_data(i) XOR co(i-1);
co(i)<=(co(i-1) AND a(i)) OR (co(i-1) AND b_data(i)) OR (a(i) AND b_data(i));
END GENERATE;
PROCESS(clk)--输出结果
BEGIN
IF clk'event AND clk='1' THEN
r<=y(7) & y(6) & y(5) & y(4) & y(3) & y(2) & y(1) & y(0);
carryout<=co(7);
END IF;
END PROCESS;
PROCESS(sign)-- 溢出判断
BEGIN
IF (sign='1' AND a(7)=b_data(7) AND r(7) = NOT a(7)) THEN
overflow<='1';--溢出
ELSE
overflow<='0';--不溢出
END IF;
END PROCESS;
c<=carryout; --进位标志
z<='1' WHEN r="00000000" ELSE--零标志
'0';
v<=overflow WHEN sign='1' ELSE--溢出标志
'0';
s<='0' WHEN sign='0' ELSE--符号位标志
r(7);
y_out<=r;--运算结果
co_out<=carryout;--最高位进位
END doing;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -