theloong 发表于 2011-6-2 22:34:00

这是个vhdl加减法器的程序 为什么要这么些 ?莫非有某些好处?

architecture rtl of addsub_cy is

begin

-- purpose: Simple adder/subtractor with carry/borrow
-- type   : combinational
-- inputs : opa_i, opb_i, addsub_i
-- outputs: cy_o, rslt_o
p_addsub: process (opa_i, opb_i, addsub_i, cy_i)
    variable v_a : unsigned(DWIDTH downto 0);
    variable v_b : unsigned(DWIDTH downto 0);
    variable v_result : std_logic_vector(DWIDTH+1 downto 0);
begin-- process p_addsub
    v_a(DWIDTH downto 1) := unsigned(opa_i);
    v_b(DWIDTH downto 1) := unsigned(opb_i);
    if addsub_i = '1' then
      v_a(0) := '1';
      v_b(0) := cy_i;
      v_result := conv_unsigned(v_a,DWIDTH+2) + v_b;//做加法
    else
      v_a(0) := '0';
      v_b(0) := cy_i;
      v_result := conv_unsigned(v_a,DWIDTH+2) - v_b;//做减法
    end if;
    cy_o <= v_result(DWIDTH+1);
    rslt_o <= v_result(DWIDTH downto 1);
end process p_addsub;

end rtl;

把输入的2个数左移一位 然后最后一位为cy-i为什么要这么写      不移位 直接加上去不好吗? 他这么写有什么特殊的意义?

谢谢
页: [1]
查看完整版本: 这是个vhdl加减法器的程序 为什么要这么些 ?莫非有某些好处?