首页 文章

“无符号”类型转换需要在顺序过程灵敏度列表中输入

提问于
浏览
1

我在VHDL顺序过程中有一个地址计数器 . 其空闲值在配置寄存器中设置为某个最大值;之后,只要它进入某个状态,它就应该增加一个 .

为了获得最大值,我将输入std_logic_vector的子集声明为别名 .

我将address_int声明为无符号变量 . 然后,我在灵敏度列表中使用clk和重置定义了一个顺序过程 . 当复位被置位时,地址计数器被设置为别名值 . 复位释放后,当处于某种状态时,计数器在上升沿上翻转/递增 .

综合工具给出了以下消息:*警告:Xst:819 134行:过程灵敏度列表中缺少以下信号:DL_CADU_SIZE *

并且所有地址线都成为异步信号!这里发生了什么?是否有一些奇怪的无符号行为,整数不会出现?我通常在这里使用整数,但是为了代码维护,转换似乎更简单 . 我试过抛弃别名并进行直接转换,但它没有帮助 .

library IEEE;            
use ieee.std_logic_1164.a
use ieee.numeric_std.all;
-- entity declaration, ports, architecture, etc.

signal address_int : unsigned(8 downto 0);                                     
alias  aMaxWords   : std_logic_vector(8 downto 0) is DL_CADU_SIZE(10 downto 2);

begin
  WADDR           <= std_logic_vector(address_int);

  OUT_PROC: process (CLK_CORE, RST_N_CORE)
    begin
      if RST_N_CORE = '0' then
        address_int <= unsigned(aMaxWords);
      elsif rising_edge(CLK_CORE) then

        if next_state = WRITE_WORD then
          if address_int = unsigned(aMaxWords) then
            address_int <= (others => '0');
          else
            address_int <= address_int + 1;
          end if;
        end if; -- WRITE_WORD
      end if; -- rising_edge
    end process OUT_PROC;
end RTL;

2 回答

  • 0

    这个:

    if RST_N_CORE = '0' then
        address_int <= unsigned(aMaxWords)
    

    描述了异步复位 - 因此 aMaxWords 将被合成器视为异步,无论它是否存在 .

    合成器将您的代码解释为“当rst_n_core为低时,将aMaxWords的值复制到address_int”,因此如果aMaxWords在重置期间发生更改,则必须复制该值 . 灵敏度列表中缺少该信号意味着合成器正在制作一种电路,其行为与语言应该表达的不同,因此警告 .


    它真的不应该是大多数芯片工作的方式,合成器设计师(他们的无限智慧)多年前决定假设设计师打算在灵敏度列表中包含该信号,并发出警告,而不是说"this can't work, fix it" . 那么你得到的代码在模拟和综合中的工作方式不同 . 结束咆哮 .

  • -1

    你的重置代码:

    if RST_N_CORE = '0' then
        address_int <= unsigned(aMaxWords);
    

    是错的 . 复位的定义是将电路设置为已知状态 . 但是你的代码将它分配给一个信号 . 您应该将其指定为全部 0 或全部 1 以进行重置,或者您的 aMaxWords 必须是 constant (请注意,您的合成器可能没有足够的智能,因此应将其指定为常量):

    if RST_N_CORE = '0' then
        address_int <= (others => '0');
    

    要么

    if RST_N_CORE = '0' then
        address_int <= (others => '1');
    

相关问题