Verilog - 端口大小与连接大小不匹配

时间:2016-03-03 02:04:07

标签: port verilog modelsim

使用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

似乎无法使这项工作。感谢。

2 个答案:

答案 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);