Dantist2k17 0 25 января, 2018 Опубликовано 25 января, 2018 (изменено) · Жалоба Решил я оптимизировать один простой контроллер, чтобы был кратким (как выстрел, ЛОЛ) и полностью конфигурируемым. В частности чтобы можно было ему задавать фронт, по которому работать. Ну и пишу: clocking get_edge @((posedge clk iff a) or (negedge clk iff !a)); И сразу же выясняется, что ни clocking, ни даже iff синтезатором (Квартус) не поддерживаются. У кого-нибудь есть идеи, как это сделать элегантно с помощью синтезируемых конструкций? Я понимаю, как это сделать с помощью условной компиляции, но это мне кажется как-то... Не совсем современно, что ли. Сам не пробовал, ну а вдруг Объявите `define EDGE_CLK posedge ну или `define EDGE_CLK negedge и используйте always@(`EDGE_CLK my_clk) begin end Изменено 25 января, 2018 пользователем Dantist2k17 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба Но define - это устаревшая конструкция, ... А где написано, что она устаревшая? Можете привести цитату из стандата на SV или хотя бы ссылку на страницу этого стандарта? Использую повсеместно define и уже начинаю беспокоиться за своё чувство прекрасного.. ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryR 0 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба Сам не пробовал, ну а вдруг Объявите `define EDGE_CLK posedge ну или `define EDGE_CLK negedge и используйте always@(`EDGE_CLK my_clk) begin end Это несомненно возможно, только мне не это надо. Надо, чтобы это зависело от parameter. А в верилоге условная компиляци работает только от define (ifdef/ifndef), параметр как аргумент эти директивы принимать не могут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба .. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба Приветствую! Это несомненно возможно, только мне не это надо. Надо, чтобы это зависело от parameter. А в верилоге условная компиляци работает только от define (ifdef/ifndef), параметр как аргумент эти директивы принимать не могут.Вы так и не ответили чем же тогда Вас не устраивает parameter clk_sel=0; wire real_clk = clk_sel ? clk : !clk; Так как после синтеза (для FPGA) в любом случае для клоков под negedge будет добавлен инвертор. А вот будет ли он (инвертор) : встроенным в примитив триггера, или как примитив для целой ALM или LCELL макро ячейки или даже как отдельный gobal buffer к инвертному выходу PLL или проосто инвертер на LUT или ... зависит от многих факторов, а не от того как это описанно в RTL - !clk или negedge. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба А где написано, что она устаревшая? Можете привести цитату из стандата на SV или хотя бы ссылку на страницу этого стандарта? У Сазерленда есть статья с примерно таким названием: "скажи дефайну - прощай"... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба У Сазерленда есть статья с примерно таким названием: "скажи дефайну - прощай"... Ну я только что просканировал весь стандарт на SV и никаких намеков на "прощай, дефайн" не нашел. Почему я должен верить какому-то Сазерленду и не верить IEEE? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба Ну я только что просканировал весь стандарт на SV и никаких намеков на "прощай, дефайн" не нашел. Почему я должен верить какому-то Сазерленду и не верить IEEE? Я и не скзал о стандарте ни одного слова... А Сазерленд - один из основателей верилога и более ничего.. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба А Сазерленд - один из основателей верилога и более ничего.. :) Видимо, в то время он ещё не догадывался, что у Altera, Xilinx, Lattice и Synopsys'a будут разные атрибуты синтеза для выполнения одних и тех же архитектурно зависимых фич. Например, тот же (* use_dsp48 = "no" *) в Vivado 2017.3 уже выглядит как (* use_dsp = "no" *). В Quartus'e и в Synplify'e есть аналогичные, но другие атрибуты. Переписывать ради этого кучу файлов нет никакого желания. Пусть этим занимается компилятор.. А я просто изменю одну строку в define. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба define - это когда их используют как параметры. Тут все как с С, и проблемы те же. Им и прощай. А дефайн для ветвления - ок и он все еще с нами `define EDGE_CLK posedge именно такое решение я и видел. Я бы предпочел генерайт, именно в силу ограничений дефайна. Боюсь реально необходимость настраиваемого фронта для модуля - ненужная вещь, которая множит ошибки. Если же вы думаете про технику улучшения времянок когда не успевая принять по переднему фронту, переходят на задний - так это порочная практика, ее надо пресекать. Да, да... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 26 января, 2018 Опубликовано 26 января, 2018 · Жалоба Лично я больше предпочитаю параметры в RTL, чем дефайны. Потому что при синтезе тулы (эсик) добавляют названия и значения параметров в название модуля: после синтеза в любой момент можно узнать, какие параметры использовались. А вот значения дефайнов синтезатор никуда не сохраняет. Итого, из-за дефайнов возникает больше всего ошибок при сборке проекта, и найти баг намного сложнее, чем при неверном задании параметра. Вместе с тем, дефайны до сих пор есть в каждом втором проекте, с которым приходится работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Sam_ 0 26 января, 2018 Опубликовано 26 января, 2018 · Жалоба хочу настраивать его константой времени компиляции. generate if(a)begin ... end else begin ... end endgenerate Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться