Перейти к содержанию
    

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

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

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

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

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

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

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

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

Изменено пользователем Juzujka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, Juzujka said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 насколько мне известно.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/5/2019 at 4:22 PM, _pv said:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...