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