【发布时间】:2019-04-08 21:37:17
【问题描述】:
我已将 16 位 STD_LOGIC_VECTOR 切成 3 部分。我想保持前 8 个 MSB 不变,并将 8 个 LSB 分成 2 个半字节以对它们进行一些处理。 我可以做到这一切,并且处理一切都很好,但是当我尝试将它们全部放在一个 16 位 STD_LOGIC_VECTOR 输出中时,它只是保持 UUUU。有什么特别的方法可以把它重新组合起来吗?
signal fullout : std_logic_vector(15 downto 0);
signal Sbox1 : integer;
signal Sbox2 : integer;
signal tophalf : std_logic_vector(7 downto 0);
signal secondnibble, firstnibble : std_logic_vector(3 downto 0); --break the LSH into 2 nibbles
begin
tophalf(7 downto 0) <= LUTin(15 downto 8);
secondnibble(3 downto 0) <= LUTin(7 downto 4);
-- Sbox1 <= to_integer(unsigned(secondnibble));
firstnibble(3 downto 0) <= LUTin(3 downto 0);
-- Sbox2 <= to_integer(unsigned(firstnibble));
p1: process(LUTin)
begin
fullout(15 downto 8) <= tophalf(7 downto 0);
fullout(7 downto 4) <= secondnibble(3 downto 0);
fullout(3 downto 0) <= firstnibble(3 downto 0);
【问题讨论】:
-
您的流程敏感度列表缺少流程本身的信号。我建议删除该进程,您不需要它。
-
对不起,还有更多代码。如果我把这个过程拿出来,它就像你说的那样工作,但我想使用 case 语句使用第二个和第一个半字节来做一个查找表。然后将新的第二个和第一个半字节与上半部分添加到 fullout 以驱动 LUTout 输出端口。当我将 case 语句放回时,它需要重新输入过程,然后完整不会更新
-
如图所示,Russell 是完全正确的。过程敏感度列表有一个无关的元素 LUT,并且缺少元素 tophalf、secondnibble 和 firstnibble。 VHDL 事件驱动流程执行恢复,您没有关注流程中正在评估的信号上的事件。在 LUT 之后,这些值可能会发生变化。问一个具体的问题。
-
如果有以下代码