Vhdl Verilog实例化错误

Vhdl Verilog实例化错误,vhdl,instantiation,verilog,ports,flip-flop,Vhdl,Instantiation,Verilog,Ports,Flip Flop,我有一个问题,只是调用一个模块的JK触发器。我们的项目是制造一个状态机,我的逻辑是正确的,但我得到一个错误,它说 “VHDL模块实例化错误:无法按错误和名称连接实例端口” 错误出现在第67行,这是JK_FF的第一个实例 编辑:我假设问题与寄存器有关,如下所示 但我真的不知道如何修复这个错误 //Project 2 "main" module Project2(q3, q2, q1, q0, w, z0, z1, CLK, RST, enable); //honestly not too su

我有一个问题,只是调用一个模块的JK触发器。我们的项目是制造一个状态机,我的逻辑是正确的,但我得到一个错误,它说 “VHDL模块实例化错误:无法按错误和名称连接实例端口”

错误出现在第67行,这是JK_FF的第一个实例

编辑:我假设问题与寄存器有关,如下所示

但我真的不知道如何修复这个错误

//Project 2 "main" 
module Project2(q3, q2, q1, q0, w, z0, z1, CLK, RST, enable);
//honestly not too sure if I need the Q or not
reg q0,q1,q2,q3;
input enable, w, CLK, RST;
output q0,q1,q2,q3,z0,z1;

initial begin
//k3 <= 1'b1; // essentially k3 = 1
end

and(newClock, CLK, enable); // this is the ned clock

//now i do my assignments i'm guessing
not(wnot, w);
not(q3not, q3);
not(q2not, q2);
not(q1not, q1);
not(q0not, q0);

// j0 assignment
and(j0temp,w,q3not,q2not,q1not); 
and(j0temp1,wnot,q2);
and(j0temp2,wnot,q1);
or(j0,j0temp, j0temp1, j0temp2);

// k0 assignment
and(k0temp,q3not,q2not);
or(k0,wnot,q1, k0temp);

//j1 assignment
and(j1temp, wnot,q3not,q2not,q1not,q0not);
and(j1temp1,w,q2);
and(j1temp2,w,q0);
or(j1,q3, j1temp, j1temp1, j1temp2);

//k1 assignments
and(k1temp,w,q1);
and(k1temp1,q2,q0);
and(k1temp2,q3not,q2not,q1,q0not);
or(k1,k1temp,k1temp1,k1temp2);

//j2 assignments
and(j2temp,wnot,q0);
and(j2temp1,w,q1);
and(j2temp2,wnot,q3);
or(j2, j2temp,j2temp1,j2temp2);

//k2 assignments
or(k2,wnot,q1);

//j3 assignments
and(j3,wnot,q2,q1,q0);

//z0 assignments
and(z0temp,wnot,q0not,q2);
and(z0temp1,wnot,q1,q2);
or(z0,z0temp,z0temp1);

//z1 assignments
and(z1temp, wnot,q2);
and(z1temp1,wnot,q1,q0not);
and(z1temp2,q2,q1);
or(z1, z1temp, z1temp1, z1temp2);

//instantiate the flip flops
JK_FF y0(.j(j0),.k(k0),.CLK(newClock), .RST(RST), .Q(q0), .Qnot(q0not));
JK_FF y1(.j(j1),.k(k1),.CLK(newClock), .RST(RST), .Q(q1), .Qnot(q1not));
JK_FF y2(j2,k2,newClock, RST, q2, q2not);
JK_FF y3(j3,k3,newClock, RST, q3, q3not);



endmodule

//asynchronous reset JK flip flop module
module JK_FF(j,k,CLK,RST,Q, Qnot);
input j,k,CLK,RST;
output Q; // not sure what this does or if used
output Qnot;
reg    Q;
reg    Qnot;

always @(negedge CLK or negedge RST)

        if(RST)begin
        Q <= 0;
        Qnot <= 1;
        end
        else if(~j && k) begin
        Q <= 0;
        Qnot <= 1;
        end
        else if(~j && ~k) begin
        Q <= Q;
        Qnot <= Qnot;
        end
        else if(j && ~k) begin
        Q <= 1;
        Qnot <= 0;
        end
        else if(j && k) begin
        Q <= Qnot;
        Qnot <= Q;
        end

endmodule
//项目2“主”
模块项目2(q3、q2、q1、q0、w、z0、z1、时钟、RST、启用);
//老实说,我不太确定我是否需要Q
注册q0、q1、q2、q3;
输入使能,w,CLK,RST;
输出q0、q1、q2、q3、z0、z1;
初始开始

//k3在IEEE Std 1364中的某个地方,它规定净声明和变量声明必须出现在post声明之后。应该在数据类型部分的某个位置。如果我找到了参考资料,我会更新我的答案

轻松修复:移动第4行
reg q0、q1、q2、q3以下<代码>输出q0、q1、q2、q3、z0、z1

就我个人而言,我更喜欢使用IEEE Std 1364-2001中引入的端口声明样式,减少代码行数,提高可读性

module Project2(
  output reg  q3, q2, q1, q0,
  input  wire w, 
  output wire z0, z1,
  input  wire CLK, RST, enable );
还要注意的是,您在
k3
上缺少一个驱动程序,这将给您带来
JK_FF y3


引文更新:

根据IEEE标准1364-2001第12.3.3节,并在IEEE标准1364-2005第12.3.3节和IEEE标准1800-2012第23.2.2.1节中重复:

如果端口声明不包括网络或变量类型,则可以在网络或变量声明中再次声明端口


在IEEE Std 1364中的某个地方,它规定净声明和变量声明必须出现在post声明之后。应该在数据类型部分的某个位置。如果我找到了参考资料,我会更新我的答案

轻松修复:移动第4行
reg q0、q1、q2、q3以下<代码>输出q0、q1、q2、q3、z0、z1

就我个人而言,我更喜欢使用IEEE Std 1364-2001中引入的端口声明样式,减少代码行数,提高可读性

module Project2(
  output reg  q3, q2, q1, q0,
  input  wire w, 
  output wire z0, z1,
  input  wire CLK, RST, enable );
还要注意的是,您在
k3
上缺少一个驱动程序,这将给您带来
JK_FF y3


引文更新:

根据IEEE标准1364-2001第12.3.3节,并在IEEE标准1364-2005第12.3.3节和IEEE标准1800-2012第23.2.2.1节中重复:

如果端口声明不包括网络或变量类型,则可以在网络或变量声明中再次声明端口

您知道为什么在编写verilog时会显示“VHDL模块”实例化错误吗?您确定IDE知道您使用的语言吗?您知道为什么在编写verilog时会显示“VHDL模块”实例化错误吗?您确定IDE知道您使用的语言吗?