【发布时间】:2020-12-14 18:35:08
【问题描述】:
在我的一个设计中,我需要修改 std_logic_vector 数组中的一个信号。
我使用 generate 创建了几个 n 位加法器,每个这样的 n 位加法器的输出都是 std_logic_vector 的 n 位总线。所有总和值都存储在 std_logic_vector 数组中。每次加法后,我需要将和向量向右移动 1 位并修改最高有效位。
MULTIPLIER: for i in 0 to DataWidth-2 generate
shifted_augend(i) <= std_logic_vector(shift_right(unsigned(augend(i)),1));
temp1(i) <= augend(i)(0);
shifted_augend(i)(DataWidth-1) <= carry_out(i);
ADDR: adder generic map(DataWidth => DataWidth)
port map(A => addend(i+1),
B => shifted_augend(i),
Cin => cin ,
Cout => carry_out(i+1),
Sum => augend(i+1));
end generate;
我尝试按照上图所示进行操作,虽然 Xilinx Vivado 允许这样做,但它肯定会导致问题。每当分配的值为“1”时,它在模拟中解析为“X”,但是当它为“0”时,它很好。默认情况下,我尝试修改的值很可能是“0”(移位的结果)。
我想要么是因为我不能这样做,要么是因为我试图同时将一个信号分配给一个现有的信号,因此它会导致出现“X”值?
【问题讨论】:
-
好的,到目前为止,我明白问题是由同时更改此位和
shift_right引起的,但现在我有点卡在如何更改此位而不会导致问题。