Ошибка создания экземпляра Verilog

У меня возникла проблема с простым вызовом модуля для триггера JK. Наш проект состоит в том, чтобы создать конечный автомат, и моя логика верна, но я получаю сообщение об ошибке «Ошибка создания экземпляра модуля VHDL: невозможно подключить порты экземпляра как по ошибке, так и по имени».

ошибка находится в строке 67, которая является первым экземпляром JK_FF

РЕДАКТИРОВАТЬ: я предполагаю, что проблема как-то связана с регистром, заданным этим http://quartushelp.altera.com/11.1/mergedProjects/msgs/msgs/evrfx_veri_not_a_structural_net_expression.htm

но я действительно не уверен, как исправить эту ошибку.

//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

person Tough Griff    schedule 21.05.2013    source источник
comment
Вы знаете, почему это говорит об ошибке создания экземпляра модуля VHDL, когда вы пишете verilog? Вы уверены, что IDE знает, на каком языке вы работаете?   -  person Tim    schedule 22.05.2013


Ответы (1)


Где-то в IEEE Std 1364 указано, что объявления net и переменных должны стоять после объявлений post. Должно быть где-то в разделе Тип данных. Я обновлю свой ответ, если найду ссылку.

Простое решение: переместите строку 4 reg q0,q1,q2,q3; ниже output 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 Std 1364-2001, раздел 12.3.3, и повторяется в IEEE Std 1364-2005, раздел 12.3.3 и IEEE Std 1800-2012, раздел 23.2.2.1:

«Если объявление порта не включает тип сети или переменной, то порт может быть снова объявлен в объявлении сети или переменной».

person Greg    schedule 21.05.2013