x:被减数 y:减数 sub_in: 借位输入(其实也是个减数,只不过从低位来的,类似于全加器中的低位进位输入)diff:差值 s_out: 借位输出(判断是否需要从高位借位才能相减)公式为x-y-sub_in=diff
x y sub_in diff s_out
0 0 0 0 0
0 0 1 1 1 --从高位借位(因为二进制)然后2-1=1
0 1 0 1 1
0 1 1 0 1 --借了一位后2-2=0
1 0 0 1 0
…
…
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity full_sub is
port(x,y,sub_in: in std_logic;
diff,s_out:out std_logic);
end full_sub;
architecture full of full is
begin
process(x,y,sub_in)
variable w: std_logic_vector(2 downto 0); -----这定义变量或信号都可以,因为后面并没有对w重复赋值或者跟其他表达式有交集构成储存器的情况,只是在case处有一个判断。
begin
w:=x&y&sub_in;
case w is
when “000”=>diff<=‘0’; s_out<=‘0’;
when “001”=>diff<=‘1’;sout<=‘1’;
…
when others=>null;
end case;
end proces