我发出了std_logic_vector
的信号。我需要从ROM中给它值,我已经做了。
在模拟或使用开始时,有一个初始化过程,这使得在ROM返回第一个值(大约2 clk周期)之前需要一些时间。
在此之前,ROM输出向量是" UUUU" (因为它的宽度为4位)。让我们调用此信号ROM_coef_inf
,因此在模拟中,这会出现在" UUUU"值,所以它的颜色是橙色。
我需要知道如何比较这个输出,以便知道它是否是一个"未定义的向量",以便给出另一个值(即" 0000" )到我的向量,直到第一个ROM值准备好。
答案 0 :(得分:0)
有几种可能的解决方案:
"UUUU"
不同的值初始化ROM和目的地之间的所有寄存器(至少在模拟中)。STD_LOGIC
值:if (mySignal == 'U') then
您可以使用is_x(...)
测试特殊值的信号
是这样定义的:
FUNCTION Is_X ( s : std_ulogic) RETURN BOOLEAN IS
BEGIN
CASE s IS
WHEN 'U' | 'X' | 'Z' | 'W' | '-' => RETURN TRUE;
WHEN OTHERS => NULL;
END CASE;
RETURN FALSE;
END;
载体也有过载。
答案 1 :(得分:0)
@Paebbels提供的答案仅适用于模拟。在现实世界中,信号往往是1或0(或它们之间的过渡,但这里不讨论)。数字1将起作用,但是如果要检查未初始化,则需要将其设置为ROM中永远不会出现的值。更简单的选择是计算时钟周期。 ROM将始终表现相同。因此,如果需要三个周期来获取第一个数据,则总是需要三个周期。所以如果算上三个周期就可以了。
答案 2 :(得分:0)
我认为这是供FPGA使用的,在这种情况下,所有寄存器在编程后都会有一个可预测的值,除非你指定别的东西,否则它是零。如果你需要的只是ROM_coef_inf
在模拟的第一个时钟周期中有0而不是U',你可以在声明信号时简单地指定一个初始值:
signal ROM_coef_inf : std_logic_vector(3 downto 0) := "0000";
在ASIC中,电源施加后,寄存器将具有未知值。在这种情况下,您需要使用复位信号来清除设计中的所有寄存器。在FPGA中使用复位信号通常也是一个好主意,例如为了防止电路在时钟稳定之前做任何事情。