Verilog:使用reg / wire变量作为参数进行实例化

时间:2018-03-15 21:33:38

标签: verilog hdl

假设你有一个带有所有必需语句和作业的模块+子模块:

module top (...);
input wire [7:0] sw;
output wire [7:0] o_ledset;
output wire [6:0] o_LED1; 
output wire [6:0] o_LED2; 
output wire [6:0] o_LED3; 
output wire [6:0] o_LED4;
reg [7:0] ledset;
reg [6:0] LED1;
reg [6:0] LED2;
reg [6:0] LED3;
reg [6:0] LED4;

assign o_ledset = ~ledset;
assign o_LED1 = ~LED1;
assign o_LED2 = ~LED2;
assign o_LED3 = ~LED3;
assign o_LED4 = ~LED4;

step1 inst1 (sw, ledset, LED1, LED2, LED3, LED4);

....
endmodule

module step1 (sw, ledset, LED1, LED2, LED3, LED4);
input wire [7:0] sw;
output reg [7:0] ledset;
output reg [6:0] LED1;
output reg [6:0] LED2;
output reg [6:0] LED3;
output reg [6:0] LED4;

然而,当我尝试在ISPLever中生成JEDEC文件时,它会抛出一个错误,指出它是"期望连接输出连接,找到ledset。"由于LED用于低电平有效配置,我必须使用ledset和LEDx作为模块实例化的参数。

我遵循其他网站的建议,包括宣布ledset为"输出线"只是"输出"在step1模块中,它只是告诉我"分配目标(变量)必须是reg或genvar"类型。

我还尝试使用以下行实例化模块:

step1 inst1 (.sw (sw), 
.ledset (ledset), 
.LED1 (LED1), 
.LED2 (LED2), 
.LED3 (LED3), 
.LED4 (LED4));

由于某种原因,它没有被认可,因为它会引发一个期待的结束模式"错误。我尝试的另一种方法是更改​​模块声明:

module step1 (
input wire [7:0] sw,
output reg [7:0] ledset,
output reg [6:0] LED1,
output reg [6:0] LED2,
output reg [6:0] LED3,
output reg [6:0] LED4);

刚刚抛出相同的错误,结果我被困在端口声明部分。

如何解决此错误?

0 个答案:

没有答案