SystemVerilog: параметр, используемый в конкатенации, дает ошибку с irun

Cadence irun выдает ошибку для кода ниже, где fifo_depth_base2 - параметр, как показано ниже:

ncvlog: * E, NONOWD (buff_mgr.v, 17 | 46): Незаконное использование константы без явной спецификации ширины [4.1.14 (IEEE)].

Я могу понять эту ошибку, но мой вопрос в том, как бы я иначе назначил ее для параметризованного дизайна.

// rd pointer and read logic
always @(posedge clk or posedge rst) begin
    if(rst) rd_ptr <= 0;
else begin  
    case({flush, rd})
        2'b10, 2'b11: rd_ptr <= {fifo_depth_base2{'b0}}; // error here
        ...
 endcase
end
end

person user3242374    schedule 28.04.2014    source источник
comment
Я думаю, что в SystemVerilog при использовании такой конструкции fifo_depth_base2{'b0}, fifo_depth_base2 должна быть константой. Вы, вероятно, можете использовать цикл for, чтобы сделать его параметризованным, или просто rd_ptr <= '0.   -  person Ari    schedule 28.04.2014
comment
См. Это: stackoverflow.com/questions/23239366/   -  person Ari    schedule 28.04.2014
comment
@Ari, fifo_depth_base2 - это параметр, поэтому он уже является константой.   -  person Greg    schedule 28.04.2014


Ответы (1)


Вам не хватает 1 перед 'b0. Симулятору неизвестен размер 'b0 в битах, потому что он не указан.

{fifo_depth_base2{'b0}}; должно быть {fifo_depth_base2{ 1'b0}};

С SystemVerilog вы можете использовать: rd_ptr <= '0;, где '0 означает заполнение нулями

person Greg    schedule 28.04.2014