Juzujka 0 5 августа, 2019 Опубликовано 5 августа, 2019 (изменено) · Жалоба Разрабатываю CIC фильтр с порядком 7 и больше, децимацией порядка 100 и с сокращением разрядности регистров по методу Хогэнауэра. В расчётах появляются числа с разрядностью 66...80. Пока числа фигурируют в функциях, я могу использовать reg[127:0] для хранения и передачи результатов вычислений. Но при instantiation и generate нужны константы в localparam. А localparam longint param_name = f(x); имеет 64 разряда, что недостаточно. Пишу так, чтобы модель работала в Icarus. Какие предложите способы обойти это? Изменено 5 августа, 2019 пользователем Juzujka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 5 августа, 2019 Опубликовано 5 августа, 2019 · Жалоба 9 minutes ago, Juzujka said: А localparam longint param_name = f(x); имеет 64 разряда, что недостаточно используйте unsigned logic нужной разрядности (да хоть [200:0]) и не будет забот. Вопрос только как оно будет объявление воспринимать (я не пробовал такого). Второй вопрос - это как оно будет в кристалле. Для таких шин данных нужна сильная оптимизация и не исключено что кода. Если конечно кроме фильтра там ещё что-то есть. Так что советую сначала подумать как оно будет в кристалле выглядеть, возможно при правильной оптимизации отпадёт нужда в длинных параметрах Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 5 августа, 2019 Опубликовано 5 августа, 2019 · Жалоба Приветствую! 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 5 августа, 2019 Опубликовано 5 августа, 2019 · Жалоба icarus не умеет в systemverilog насколько мне известно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Juzujka 0 5 августа, 2019 Опубликовано 5 августа, 2019 · Жалоба 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 насколько мне известно. что-то поддержано, что-то нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 6 августа, 2019 Опубликовано 6 августа, 2019 · Жалоба On 8/5/2019 at 4:22 PM, _pv said: icarus не умеет в systemverilog насколько мне известно. не надо SV, всё делается в рамках верилога: localparam [127:0] AAA =128'h1234; но не сдюжит кастинг, если надо инитить двумерный localpar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться