簡體   English   中英

錯誤(10219):Mux.v處的Verilog HDL連續分配錯誤(19):分配左側的對象“ muxout”必須具有網絡類型

[英]Error (10219): Verilog HDL Continuous Assignment error at Mux.v(19): object “muxout” on left-hand side of assignment must have a net type

我想用計數器和MUX制作分頻器。

我為項目制作3個模塊

// 4位計數器

module Counter (input clk, input reset, output reg[3:0] out);

   always@(posedge clk or posedge reset)
   begin
      if(reset)
         out = 4'b0000; 
      else
      begin
         if(clk)
            if(out < 4'b1111)
            out = out + 4'b0001;
            else
            out = 4'b0000;
      end
   end


endmodule

//模塊4by1 Mux

module Mux (input [3:0] muxin , input [1:0] sel, output reg muxout);


   function _4by1mux;

      input [3:0] muxin;
      input [1:0] sel;

      case (sel)
         2'b00 : _4by1mux = muxin[0];
         2'b01 : _4by1mux = muxin[1];
         2'b10 : _4by1mux = muxin[2];
         2'b11 : _4by1mux = muxin[3];
      endcase
   endfunction

   assign muxout = _4by1mux(muxin, sel);


endmodule

//模塊freqDivider

 module freqDivider(input clk, input reset, input [1:0] sel, output reg muxout);

   wire [3:0]counterbus;

   Counter ct1 (clk, reset, counterbus);
   Mux mux1 (counterbus, sel, muxout);

endmodule

模塊freqDivider位於頂部,我調用模塊Counter和Mux

但是模塊Mux有問題

Error (10219): Verilog HDL Continuous Assignment error at Mux.v(19):
object "muxout" on left-hand side of assignment must have a net type

這個錯誤

ps。 輸入sel將隨時間改變

該錯誤是由於muxout輸出具有reg類型而不是類型wire 在verilog中,線可以具有兩種總體類型,即網絡(如wire類型)或變量(如reg類型)。 要將值/邏輯分配給網絡類型,您需要使用assign語句,而不always塊。 要將值/邏輯分配給變量類型,只能使用always塊,不能assign語句。 因此,您可以在Mux模塊中將您的assign always阻塞,或者,為了更簡單的解決方案,不要將muxout輸出設置為reg ,而只需忽略reg關鍵字,它將成為wire

錯誤是您已將mux_out聲明為reg類型,而不是wire類型。 任何端口的默認類型是wire。 您正在通過assign關鍵字對該網絡進行連續分配。 reg類型的網絡上,賦值只能在程序塊內部進行(初始的,始終是)。

output reg更改為mux_out ,僅output

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM