使用VHDL包numeric_std
,乘法产生比其操作数位更多的位。在大多数情况下,结果将被削减到最低位。
signal A : unsigned(7 downto 0);
signal B : unsigned(7 downto 0);
signal C : unsigned(15 downto 0);
signal D : unsigned(7 downto 0);
C <= A * B;
D <= C(D'range);
不幸的是,表达式无法切片:
D <= (A * B)(D'range);
另一方面,人们可以编写这样的虚函数:
function dummy(A : unsigned) return unsigned is
begin
return A;
end function;
现在,它可以连锁经营:
D <= dummy(A * B)(D'range);
以下是我的问题: