ACTIV HDL - VHDL-“信号无法合成,错误的同步描述”

时间:2018-01-17 22:18:08

标签: vhdl

在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;

为什么?

1 个答案:

答案 0 :(得分:1)

您有一个if子句,其中包含对复位条件的检查,然后是两个单独的门控时钟条件,然后是else子句。我不认为有任何工具可以合成这个,因为你实际上不太可能想要你所描述的东西,而且无论如何都难以投入硬件。您需要阅读有关HDL和同步设计基础知识的更多信息。

以这种方式思考:如果你从上到下阅读你编写的代码,就像编译器一样,你会如何实际构建硬件来实现你所描述的?你如何构建一个硬件,在一个时钟上做一件事,在另一个时钟做另一件事,在没有时钟的情况下做第三件事?如何在FPGA LUT中实现这一点?

简而言之,要让您的代码正常工作,您需要摆脱else条款,它无论如何都不会做任何事情,合成器通常不喜欢else或{{1} } -clauses和时钟条件(elsifif rising_egde(clk))。应在主时钟语句中的单独if clk'event and clk = '1'子句中检查C的条件。另外,去掉if子句中rst = '0'的检查。您已在elsif声明中检查了rst = '1'if信号只能是bit或&#39; 0&#39;。

可合成代码如下所示:

'1'