将 5 位值放入 VHDL 中的一个字节 - 这会生成锁存器吗?

Putting a 5-bit value to a byte in VHDL - Will this generate a latch?

我有以下问题:

我有一个加法器,它的输出有 5 位。我想将此输出发送到一个 8 位寄存器。

我已将寄存器输入信号声明为 tot_sig,加法器输出为 add_out。寄存器和加法器都在我的实体中声明为单独的组件。

在加法器端口映射中,我尝试编写以下内容:

add_out => tot_sig(4 downto 0)

但这行不通(ISE 告诉我 tot_sig 和 add_out 的大小不同)。

所以我想声明 2 个信号,它们是同一件事,但大小不同。我会首先声明一个称为中介的信号,它是一个 4 位总线。然后,我会将中介添加到一个(最初设置为“00000000”)字节 (total_sig)。然后 total_sig 字节将连接到寄存器的输入端。

我担心这会产生闩锁。它可以?我试着想出更简单的解决方案,但一无所获。 任何无需声明另一个信号即可工作的解决方案都会更好。

感谢您的帮助和时间。

我正在使用 Xilix ISE 设计套件 14.6 版。

简单的解决方案是定义一个 8 位向量,并在向其分配 5 位向量时连接 3 个零:

signal len5 : std_logic_vector (4 down to 0);
signal len8 : std_logic_vector (7 down to 0);
len8 <= "000" & len5;
-- Now you can pass len8 into an 8-bit port.

没有得到闩锁。只有当您使用时钟进程之外的条件并且您有未解决的分支时,才会出现锁存器。
例如没有 else 的 if 或没有涵盖所有可能性的 case。