Как я могу исправить ошибку присвоения более чем одного значения в verilog?

#verilog #hierarchical

#verilog #система-verilog #иерархический

Вопрос:

Ниже приведена попытка изучить иерархический дизайн verilog. Это схема, которую я реализую:

введите описание изображения здесь

Модуль верхнего уровня для схемы — это:

  module D_Filiflop_Hierarchal_top_level (clock, reset, i_d, q);

    input clock;
    input reset;
    input i_d;
    output [1:0] q;


    D_Flipflop u0 (.clk(clock), .rst(reset), .q(q[0]), .d(i_d));
    D_Flipflop u1 (.clk(clock), .rst(reset), .q(q[1]), .d(q[0]));

endmodule

  

И ниже определен модуль общего триггера:

 module D_Flipflop(clk,rst, d, q);
input clk;
input rst;
output d;
output reg q;

always @ (posedge clk or posedge rst) begin

    if (rst) begin
    q <= 1'b0;
    end

    else begin
    q <= d;
    end

end 

endmodule
  

Но это сообщение об ошибке, которое показывает консоль:

 Error (12014): Net "q[0]", which fans out to "q[0]", cannot be assigned more than one value
    Error (12015): Net is fed by "D_Flipflop:u0|q"
    Error (12015): Net is fed by "D_Flipflop:u1|d"
  

введите описание изображения здесь

Как я могу исправить эту ошибку?

Ответ №1:

Измените output на input для d :

 module D_Flipflop(clk,rst, d, q);
input clk;
input rst;
input d;
output reg q;