在Xillinx中合成此代码时出错。此错误是:
“信号Z_1无法合成,错误的同步描述”
entity uk3 is
port(
rst : in BIT;
C : in INTEGER;
clk : in BIT;
S : out INTEGER
);
end uk3;
--}} End of automatically maintained section
architecture uk3 of uk3 is
begin
process (C,clk,rst)
variable Z_1 : integer:=0;
begin
if rst='1' then Z_1:=0;
elsif rst='0'and clk'event and clk='1'and C=1
then
Z_1:=Z_1 + 1;
elsif rst='0'and clk'event and clk='1'and C=2
then
Z_1:=Z_1 + 2;
else
Z_1:=Z_1;
end if;
S<=Z_1;
end process;
-- enter your statements here --
end uk3;
为什么?
答案 0 :(得分:1)
您有一个if
子句,其中包含对复位条件的检查,然后是两个单独的门控时钟条件,然后是else
子句。我不认为有任何工具可以合成这个,因为你实际上不太可能想要你所描述的东西,而且无论如何都难以投入硬件。您需要阅读有关HDL和同步设计基础知识的更多信息。
以这种方式思考:如果你从上到下阅读你编写的代码,就像编译器一样,你会如何实际构建硬件来实现你所描述的?你如何构建一个硬件,在一个时钟上做一件事,在另一个时钟做另一件事,在没有时钟的情况下做第三件事?如何在FPGA LUT中实现这一点?
简而言之,要让您的代码正常工作,您需要摆脱else
条款,它无论如何都不会做任何事情,合成器通常不喜欢else
或{{1} } -clauses和时钟条件(elsif
或if rising_egde(clk)
)。应在主时钟语句中的单独if clk'event and clk = '1'
子句中检查C
的条件。另外,去掉if
子句中rst = '0'
的检查。您已在elsif
声明中检查了rst = '1'
,if
信号只能是bit
或&#39; 0&#39;。
可合成代码如下所示:
'1'