Jump to content

    
Sign in to follow this  
Juzujka

длинные числа в localparam в Verilog

Recommended Posts

Разрабатываю CIC фильтр с порядком 7 и больше, децимацией порядка 100 и с сокращением разрядности регистров по методу Хогэнауэра.

В расчётах появляются числа с разрядностью 66...80.

Пока числа фигурируют в функциях, я могу использовать reg[127:0] для хранения и передачи результатов вычислений.

Но при instantiation и generate нужны константы в localparam.

А localparam longint param_name = f(x); имеет 64 разряда, что недостаточно.

Пишу так, чтобы модель работала в Icarus.

Какие предложите способы обойти это?

Edited by Juzujka

Share this post


Link to post
Share on other sites
9 minutes ago, Juzujka said:

А localparam longint param_name = f(x); имеет 64 разряда, что недостаточно

используйте unsigned logic нужной разрядности (да хоть [200:0]) и не будет забот. Вопрос только как оно будет объявление воспринимать (я не пробовал такого).

Второй вопрос - это как оно будет в кристалле. Для таких шин данных нужна сильная оптимизация и не исключено что кода. Если конечно кроме фильтра там ещё что-то есть. Так что советую сначала подумать как оно будет в кристалле выглядеть, возможно при правильной оптимизации отпадёт нужда в длинных параметрах

Share this post


Link to post
Share on other sites

Приветствую!

1 hour ago, Juzujka said:

А localparam longint param_name = f(x); имеет 64 разряда, что недостаточно.

Вы можете специфицировать тип localparam так же как и для вектора 

// явно 
localparam logic      [127:0]  AAA =128'h1234;
localparam bit   [3:0][127:0]  BBBB='{1,2,3,4};
// неявно приводя к ветору заданой разрядности
localparam                     ССС =256'h5678;

Удачи! Rob.

Share this post


Link to post
Share on other sites
42 minutes ago, RobFPGA said:

 


// явно 
localparam logic      [127:0]  AAA =128'h1234;
localparam bit   [3:0][127:0]  BBBB='{1,2,3,4};
// неявно приводя к ветору заданой разрядности
localparam                     ССС =256'h5678;

 

 

2 hours ago, Nick_K said:

используйте unsigned logic нужной разрядности (да хоть [200:0]) и не будет забот. Вопрос только как оно будет объявление воспринимать (я не пробовал такого).

Спасибо, logic и bit Icarus воспринимает.

3 hours ago, _pv said:

icarus не умеет в systemverilog насколько мне известно.

что-то поддержано, что-то нет.

Share this post


Link to post
Share on other sites
On 8/5/2019 at 4:22 PM, _pv said:

icarus не умеет в systemverilog насколько мне известно.

не надо SV, всё делается в рамках верилога:

localparam [127:0]  AAA =128'h1234;

но не сдюжит кастинг, если надо инитить двумерный localpar

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this