关于verilog2选一多路选择器的问题

Illegal reference to net "r",这是错误,下面是我的代码(要求是s=0输出a,s=1输出b)
module mux(
input[3:0]a,
input[3:0]b,
input s,
output[3:0]r
);
input a,b,s;
output r;
assign r=(s?a:b);
always @(a or b or s)
begin : mux
case({s})
1'b0 : r<=a;
1'b1 : r<=b;
default : r<=a;
endcase
end
endmodule
模拟的时候就出现上面的错误代码,要怎么改啊?求帮忙
财富值不多,但还是求帮忙- -

在端口定义处 加上 reg [3:0]r;试试
而且你这assign和always模块干的是同一件事儿吧?追问

试过了,说r定义过了不行

追答

module mux(a,b,s,r);
//因为你在声明端口的时候就已经定义了输入输出,后面有重新写了,不晓得是不是这里重复了
input [3:0]a;
input [3:0]b,
input s,
output[3:0]r;
reg [3:0]r;//我不是很习惯像你那么写,我定义端口一般是这样的格式,不晓得有没有帮助

assign r=(s?a:b);
always @(a or b or s)
begin : mux
case({s})
1'b0 : r<=a;
1'b1 : r<=b;
default : r<=a;
endcase
end
endmodule

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-15
加一句
tri r;
相似回答