我在 VHDL 顺序过程中有一个地址计数器。它的空闲值在配置寄存器中设置为某个最大值;之后,只要它进入某个状态,它就应该加一。
为了获得最大值,我将输入 std_logic_vector 的子集声明为别名。
我将 address_int 声明为无符号变量。然后,我在敏感度列表中定义了一个带有 clk 和 reset 的顺序过程。当复位有效时,地址计数器设置为别名值。释放复位后,计数器在处于特定状态时在上升沿翻转/递增。
综合工具给了我这个消息:*WARNING:Xst:819 line 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;