我一直得到错误:[Synth 8-327]推断过去一个小时在行地址1 <= d(31 DOWNTO 0)处变量'd_reg'的锁存器。我不确定为什么没有收到此错误。我已经将输入列表中的所有变量添加到了流程中,并为代码中的所有if语句添加了else。这是我所知道的给出隐式闩锁的两个原因,但事实证明我仍然可以得到它们。
有人看到我的问题吗?
PORT (d : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0) := "00000000000000000000000000000000";
address : IN STD_LOGIC_VECTOR(31 DOWNTO 0) ;
ce_l : IN STD_LOGIC ;
oe_l : IN STD_LOGIC ;
we_l : IN STD_LOGIC ;
results : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --binary for which segments of digit to turn on
anodesList : INOUT STD_LOGIC_VECTOR(7 downto 0) := "00000000"; --binary for which annode to turn on
clk : IN STD_LOGIC) ;
(部分)我的代码:
SIGNAL address1 : STD_LOGIC_VECTOR(31 DOWNTO 0) := "00000000000000000000000000000000";
SIGNAL check : STD_LOGIC_VECTOR(0 DOWNTO 0) := "0";
writeprocess:PROCESS(clk, ce_l,we_l, address1, check)
begin
IF (clk = '1' AND clk'event) THEN
IF(check = "1") THEN
IF (ce_l = '0' AND we_l = '0') THEN
address1 <= d(31 DOWNTO 0);
ELSE
address1 <= address1;
END IF;
ELSE
address1 <= address1;
END IF;
ELSE
address1 <= address1;
END IF;
END PROCESS writeprocess ;
答案 0 :(得分:3)
在流程中if / else或case语句的所有可能变体中不提供信号的更新分配时,通常会得到推断的锁存器。
在您的情况下,您的流程语句包含5个信号,但只有两个问题(clk和address1)。您有一个格式正确的“ IF(clk ='1'AND clk'event)THEN”同步条件语句,但是有一个 ELSE 子句很可能是造成问题的原因。除非您明确修改VHDL,否则VHDL会将信号的值保留为先前的状态,因此不需要:
[i.split('\n\n') for i in text.split('\n\n\n\n\n')]
>>[['Article Title',
' Some text: Text blurb.',
'More blurb.',
'Even more blurb. ',
'Some more blurb. '],
['\nSecond Article Title',
'Some text: Text blurb.',
'More blurb.',
'Even more blurb. ',
'Some more blurb. ']]
...我怀疑正在引起您所看到的警告,尽管它也可能是过程敏感度列表中不必要的信号。尝试使用没有不必要的信号和条件的简化版本:
ELSE
address1 <= address1;