Verilog宏复制

Verilog宏复制,verilog,system-verilog,Verilog,System Verilog,我有一个带有宏的sys_defs.vh头文件: `define REG_WIDTH 5 我试着比较一辆同样宽度的巴士,就像这样: input [2:0][`REG_WIDTH-1:0] aregs_in, ... if(aregs_in[i] != {`REG_WIDTH{1}}) //do stuff 但是当我尝试模拟时,我得到以下警告 警告-[CWUC]与未调整大小的常量连接。 串联中使用了未调整大小的常量“1”。无尺码 常量将用作32位常量 基本上,我只是想把它

我有一个带有宏的sys_defs.vh头文件:

`define REG_WIDTH 5
我试着比较一辆同样宽度的巴士,就像这样:

input [2:0][`REG_WIDTH-1:0]           aregs_in,
...
if(aregs_in[i] != {`REG_WIDTH{1}})
  //do stuff
但是当我尝试模拟时,我得到以下警告

警告-[CWUC]与未调整大小的常量连接。 串联中使用了未调整大小的常量“1”。无尺码 常量将用作32位常量


基本上,我只是想把它与111111进行比较,在111111中,一个人的#是宏定义的

在Verilog
1
中,它自己推断出一个32位的十进制值为1。您需要为单个位设置
1'b1

input [2:0][`REG_WIDTH-1:0]           aregs_in,
...
if(aregs_in[i] != {`REG_WIDTH{1'b1}})
  //do stuff

在Verilog
1
中,它本身会推断出一个值为1的32位十进制数。您需要为单个位设置
1'b1

input [2:0][`REG_WIDTH-1:0]           aregs_in,
...
if(aregs_in[i] != {`REG_WIDTH{1'b1}})
  //do stuff

在Verilog中,您可以

   if(~&aregs_in[i]) //~& is the NAND operator
      // do stuff
在SystemVerilog中,这将更具描述性

  if(aregs_in[i] != '1) // '1 means 'fill with 1's'
      // do stuff

在Verilog中,您可以

   if(~&aregs_in[i]) //~& is the NAND operator
      // do stuff
在SystemVerilog中,这将更具描述性

  if(aregs_in[i] != '1) // '1 means 'fill with 1's'
      // do stuff