【发布时间】:2013-04-30 19:56:59
【问题描述】:
我正在编写同时比较一个信号和多个信号的代码。
示例如下:
process (CLK, reset)
if reset = '0' then
data <= (others => '0');
elsif rising_edge (CLK) then
if A = B then
data <= data OR "0001";
else data <= data AND "1110";
end if;
if A = C then
data <= data OR "0010";
else data <= data AND "1101";
end if;
if A = D then
data <= data OR "0100";
else data <= data AND "1011";
end if;
if A = E then
data <= data OR "1000";
else data <= data AND "0111";
end if;
end if;
end process;
我只想比较 A 与 B、C、D 和 E 信号,然后打开和关闭数据中的相关位。我上面写的代码不起作用,因为综合工具将优化 B、C 和 D if 语句,只留下 E if 语句。我还考虑过使用 case - when 语句,但它没有关闭相关单个位的机制。当其他人只能关闭所有 4 位时。这样做的有效方法是什么?谢谢!
顺便说一句,这 4 个 if 语句是否同时运行?或者它们以不同的周期运行?我猜他们会一个一个运行,否则会导致扇入。
【问题讨论】:
标签: if-statement concurrency vhdl