如何将值传递给`define N

问题描述 投票:0回答:1

我正在使用

iverilog
模拟器,我想在编译期间将值传递给
N
。我需要使用哪个命令,有人可以帮助我使用
`define
吗?

`define N

module Nbcd(A, B ,S);
 input [N*4-1:0] A,B;
 output[N*4-1:0] S;

genvar i;
  generate
   for(i=0; i<=N-1; i=i+1)
      bcd (.A(A[4*i+3:i*4]),
           .B(B[4*i+3:i*4]).
           .S(S[4*i+3:i*4])
          );
  endgenerate
endmodule

测试台

module Nbcd();
  reg [N*4-1:0] A,B;
  wire [N*4-1:0] S;
  integer i;

  Nbcd U1 (.A(A),.B(B),.S(S));

  initial begin
    for (i=o; i<=N-1; i=i+1)
      begin
        A=i;
        b=i+1;        
    end
endmodule  
  
verilog iverilog
1个回答
5
投票

我相信大多数模拟器都允许

-define
命令行选项。

irun test.sv -define N=0

iverilog使用略有不同

-Dkey=value

-DN=0

使用方法

要使用

`define
(勾选定义),您需要在其前面放置一个勾选,因此当您想要使用命令行提供的值时,请使用
`N
,例如:

module Nbcd(A, B ,S);
 input [`N*4-1:0] A,B;
 output[`N*4-1:0] S;

我在 EDA Playground 上有一个 工作示例,iverilog 版本为 0.9.7。该值通过命令行

-DN=10
提供,并使用
$display("N : %d", `N);
在模拟中显示该值。

提示

您可能还想添加以下代码,以便它可以在没有命令行选项的情况下运行或提醒用户这是必需的:

`ifndef N
  `define N 0
`endif
© www.soinside.com 2019 - 2024. All rights reserved.