VHDL-“;信号无法合成,同步描述不良”;

VHDL-“;信号无法合成,同步描述不良”;,vhdl,active-hdl,Vhdl,Active Hdl,我在Xillinx中合成此代码时出错。此错误是: 无法合成信号Z_1,同步描述错误 实体uk3为 港口( rst:以位表示; C:整数; 时钟:以位为单位; S:输出整数 ); 结束uk3; --}}自动维护区段的结束 uk3的架构uk3是 开始 过程(C、clk、rst) 变量Z_1:整数:=0; 开始 如果rst='1',则Z_1:=0; elsif rst='0'和clk'事件以及clk='1'和C=1 然后 Z_1:=Z_1+1; elsif rst='0'和clk'事件以及clk='1

我在Xillinx中合成此代码时出错。此错误是: 无法合成信号Z_1,同步描述错误

实体uk3为
港口(
rst:以位表示;
C:整数;
时钟:以位为单位;
S:输出整数
);
结束uk3;
--}}自动维护区段的结束
uk3的架构uk3是
开始
过程(C、clk、rst)
变量Z_1:整数:=0;
开始
如果rst='1',则Z_1:=0;
elsif rst='0'和clk'事件以及clk='1'和C=1
然后
Z_1:=Z_1+1;
elsif rst='0'和clk'事件以及clk='1'和C=2
然后
Z_1:=Z_1+2;
其他的
Z_1:=Z_1;
如果结束;

您可能应该正确描述您的同步过程。这不是c/c++,您应该为此使用适当的模板,否则它将无法合成。我要特别指出的是,你们应该只有一个对时钟边缘敏感的语句

例如:

process (clk,rst)
variable Z_1 : integer:=0;
begin
    if rst='1' then 
        Z_1:=0;
    elsif rising_edge(clk) then
        case C is
            when 1 =>
                Z_1:=Z_1 + 1;
            when 2 => 
                Z_1:=Z_1 + 2;
            when others =>
                null;
        end case;
        S<=Z_1;
    end if;

end process;
过程(时钟、rst)
变量Z_1:整数:=0;
开始
如果rst='1',则
Z_1:=0;
elsif上升沿(clk)则
案例C是
当1=>
Z_1:=Z_1+1;
当2=>
Z_1:=Z_1+2;
当其他人=>
无效的
终例;

STeraz nie da sięwykompliować:uk3的架构uk3是begin进程(clk,rst)变量Zęu 1:INTEGER:=0;如果rst='1',则Z_1:=0;如果上升沿(clk),则情况C为1=>Z_1:=Z_1+1;当2=>Z_1:=Z_1+2;终例;D#错误:COMP96_0093:uk3.vhd:(47,21):子程序调用中的实际参数类型与子程序形式参数类型不匹配。#错误:COMP96_0301:uk3.vhd:(48,4):当所有备选方案都不存在时,必须存在其他选项covered@Pietryno另请参见。@Pietryno您的评论似乎是另一个问题。如果是这样,请问另一个问题。我建议使用同步重置。使
Z_1
成为一个信号而不是一个变量。同一个问题不要问两次。
process (clk,rst)
variable Z_1 : integer:=0;
begin
    if rst='1' then 
        Z_1:=0;
    elsif rising_edge(clk) then
        case C is
            when 1 =>
                Z_1:=Z_1 + 1;
            when 2 => 
                Z_1:=Z_1 + 2;
            when others =>
                null;
        end case;
        S<=Z_1;
    end if;

end process;