【问题标题】:Unexpected warning in Verilog simulation for port sizeVerilog 模拟中针对端口大小的意外警告
【发布时间】:2021-12-17 23:31:28
【问题描述】:

我不明白为什么模拟器会发出警告以及电路为什么不能正常工作。

这是 Verilog 代码:

`timescale 1ns/1ns
module circuitIVEightBitAssign(input [7:0]a,flag,output [7:0]b);
    assign #(143) b = flag ? ~a : (~(a) + 1'b1) ;
endmodule

这是测试台:

`timescale 1ns/1ns
module circuitIVAllTB();
    wire [7:0]b1;
    reg [7:0]a;
    reg flag;
    circuitIVEightBitAssign g2(a,flag,b1);
    initial begin
    #10
    flag = 0;
    a = 8'b00000000;
    #500
    a = 8'b11111111;
    #500
    a = 8'b00000111;
    #500
    flag = 1;
    #500
    flag = 0;
    #500
    $stop;
    end
endmodule

警告是:

** 警告:(vsim-3015) [PCDPC] - 端口大小 (8) 与端口“标志”的连接大小 (1) 不匹配。端口定义位于: C:/Users/Ali/OneDrive/Desktop/CA2_00FALL/circuitIVEightBitAssign.v(2)。 时间:0 ns 迭代:0 实例:/circuitIVAllTB/g2 文件: C:/Users/Ali/OneDrive/Desktop/CA2_00FALL/circuitIVAllTB.v 行:6

但是,flag 是 1 位的。为什么 modelsim 会给我这个警告?

【问题讨论】:

    标签: verilog simulation system-verilog modelsim test-bench


    【解决方案1】:

    circuitIVEightBitAssign 模块中,您将 flag 声明为 8 位,而不是 1 位。要将其声明为 1 位,您需要再次添加 input 关键字。变化:

    module circuitIVEightBitAssign(input [7:0]a,flag,output [7:0]b);
    

    到:

    module circuitIVEightBitAssign(input [7:0]a,input flag,output [7:0]b);
    

    在您的代码中,宽度信息用于两个信号。 input [7:0]a,flag 等同于:

    input [7:0] a,
    input [7:0] flag,
    

    【讨论】:

    • 重复端口方向有效,但还有其他方法。您还可以重复范围或数据类型。 SystemVerilog 有一系列关于方向、种类(var/wire)、数据类型、范围的隐式默认值。如果您关闭任何一项,则从端口到端口的声明中都会记住一些规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多