将信号分配给变量,将变量分配给信号

时间:2016-05-20 09:10:42

标签: vhdl

我是VHDL的新手,在阅读了很多教程后,我现在已经开始了。这是一个困扰我的代码示例。 trade_cell实体获得有符号信号n,其在获得绝对值之后被分配给变量abs_n。然后将结果分配给输出的信号量。

每次我模拟这个,金额都设置为X. 我在这里缺少什么?

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity trade_cell is
    Port (
        n: IN signed(31 downto 0); 
        amount: OUT signed(31 downto 0);
    );
end trade_cell;

architecture Behavioral of trade_cell is
begin

    trader: process(start, value, n, P, dP, delta, ddelta)
    variable abs_n : signed(31 downto 0) := abs(n);
begin
    amount <= abs_n; 
    end process;
end Behavioral;

友好的问候, RincewindWizzard

1 个答案:

答案 0 :(得分:4)

你的问题是这一行:

    variable abs_n : signed(31 downto 0) := abs(n);

在模拟开始时初始化变量abs_n 一次(技术上是在阐述期间)。此时,信号n的值为'U'abs('U')'X',因此变量abs_n的初始值为{{1}之后从未分配过任何值。

所以,而不是:

'X'

你需要:

    trader: process(start, value, n, P, dP, delta, ddelta)
    variable abs_n : signed(31 downto 0) := abs(n);
begin
    amount <= abs_n; 
    end process;

我认为你已经削减了代码以制作MCVE,这就是为什么在流程 trader: process(start, value, n, P, dP, delta, ddelta) variable abs_n : signed(31 downto 0); begin abs_n := abs(n); -- assign abs_n here... amount <= abs_n; -- ...and use its value here end process; 灵敏度列表中还有许多其他信号的原因。如果没有,您只需要灵敏度列表中的该过程的输入(在这种情况下只是trader)。