2016-02-27 4 views
0

У меня есть sys_defs.vh заголовочный файл с макросом:Verilog репликации с макро

`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, где # одного является макро определено

+2

SystemVerilog также поддерживает ' '1':' если (aregs_in [я] = «1)' – toolic

ответ

3

В Verilog 1 сам по себе выводит 32-разрядное десятичное со значением одного. Вы хотите, чтобы 1'b1 для одного бита.

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

В 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 
Смежные вопросы