使用ModelSim PE学生版10.4a。为1-4 demux写了一个模块。为该模块写了一个测试平台。编译好。在尝试模拟时,我收到以下错误:
#**警告:(vsim-3015)D:/ModelSim/examples/Lab3_3.v(42):[PCDPC] - 端口大小(1)与端口'的连接大小(4)不匹配在&#39 ;.端口定义位于:D:/ModelSim/examples/Lab3_3.v(1)。
#时间:0 ns迭代次数:0实例:/ tb_demux / DA0文件:D:/ModelSim/examples/Lab3_3.v
#**错误(可抑制):( vsim-3053)D:/ModelSim/examples/Lab3_3.v(42):端口' out'的非法输出或inout端口连接。 #时间:0 ns迭代次数:0实例:/ tb_demux / DA0文件:D:/ModelSim/examples/Lab3_3.v
#**警告:(vsim-3015)D:/ModelSim/examples/Lab3_3.v(42):[PCDPC] - 端口大小(4)与端口' out&#39的连接大小(1)不匹配;。端口定义位于:D:/ModelSim/examples/Lab3_3.v(1)。
#时间:0 ns迭代次数:0实例:/ tb_demux / DA0文件:D:/ModelSim/examples/Lab3_3.v
代码是:
module demux(input in, input[1:0] S, output reg[3:0] out);
always @(in or S)
begin
case(S)
2'b00: begin
out[0] = in;
out[1] = 0;
out[2] = 0;
out[3] = 0;
end
2'b01: begin
out[0] = 0;
out[1] = in;
out[2] = 0;
out[3] = 0;
end
2'b10: begin
out[0] = 0;
out[1] = 0;
out[2] = in;
out[3] = 0;
end
2'b11: begin
out[0] = 0;
out[1] = 0;
out[2] = 0;
out[3] = in;
end
endcase
end
endmodule
module tb_demux;
wire[3:0] out;
reg[1:0] S;
reg in;
demux DA0(out, S, in);
initial
begin
S = 2'b00; in = 0;
#100 S = 2'b01; in = 1;
#100 S = 2'b10; in = 0;
#100 S = 2'b11; in = 1;
end
initial #400 $stop;
initial $monitor("Select = %b, In = %b, Out = %b", S, in, out);
endmodule
似乎无法使这项工作。感谢。
答案 0 :(得分:3)
从测试平台尚未正确完成设计的实例化。 设计中的端口错误地映射到测试平台。
将设计的实例化从测试平台更改为以下内容:
demux DA0(in,s,out);
使用name而不是verilog中的顺序来实例化设计总是更好,以避免这些类型的端口不匹配。
答案 1 :(得分:0)
我明白了。我显然是以错误的顺序将变量输入测试平台。
正确的行是:
demux DA0(in, S, out);
因此变量的顺序与模块中声明的顺序相同:
module demux(input in, input[1:0] S, output reg[3:0] out);