将 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。
我有以下问题:
我有一个加法器,它的输出有 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。