【发布时间】:2013-12-18 16:39:16
【问题描述】:
假设您有一个信号定义如下:
signal test_count : integer range 0 to 11;
现在,如果 test_count 在模拟中低于 0 或高于 11,它将导致模拟立即崩溃。我想知道的是,当它被合成时会发生什么?如果 test_count 增加超过 11 或减少到 0 以下会怎样?综合工具会强制信号回绕吗?请注意,我选择了一个不容易返回到 0000 的示例。
【问题讨论】:
假设您有一个信号定义如下:
signal test_count : integer range 0 to 11;
现在,如果 test_count 在模拟中低于 0 或高于 11,它将导致模拟立即崩溃。我想知道的是,当它被合成时会发生什么?如果 test_count 增加超过 11 或减少到 0 以下会怎样?综合工具会强制信号回绕吗?请注意,我选择了一个不容易返回到 0000 的示例。
【问题讨论】:
该工具假定信号保持在设计范围内,因此这种情况 如果这不是真的,电路可以在内部总线上提供任何输出,用于 实现整数值。在这种情况下,对于 0 到 11,它将是一个 4 位总线, 如果设计没有将值保持在 0 到 11 的范围内,那么即使是“非法的” 综合电路可以呈现12~15范围内的数值。
此外,在值增加超过 11 的情况下,计数器应该 然后是饱和的,还是换行?它根本没有定义。
来自 Altera QII 的计数器结果如下:
architecture syn of mdl is -- Counter with clear
signal test_count : integer range 0 to 11;
begin
process (clk_i) is
begin
if rising_edge(clk_i) then
if clr_i = '1' then -- Clear
test_count <= 0;
else -- Increment
test_count <= test_count + 1;
end if;
end if;
end process;
z_o <= std_logic_vector(to_unsigned(test_count, 4));
end architecture;
在此图中显示为 RTL 结果:
所以在这种情况下,综合结果是一个 4 位计数器,具有递增和
从信号 clr_i 选择的 mux 中清除值,并且没有任何范围
查看。因此,如果控制clr_i 信号的设计没有保持该值
在 0 到 11 的范围内,它可能会输出声明的 0 到 11 范围之外的值,
因此偶数在 12 到 15 之间。
【讨论】: