реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Условный Timing Control на Verilog, Синтезируемый
Dantist2k17
сообщение Jan 25 2018, 10:53
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 30-11-17
Пользователь №: 100 439



Цитата(DmitryR @ Jan 24 2018, 14:14) *
Решил я оптимизировать один простой контроллер, чтобы был кратким (как выстрел, ЛОЛ) и полностью конфигурируемым. В частности чтобы можно было ему задавать фронт, по которому работать. Ну и пишу:

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

Сообщение отредактировал Dantist2k17 - Jan 25 2018, 10:55
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 25 2018, 11:53
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 078
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(DmitryR @ Jan 25 2018, 12:38) *
Но define - это устаревшая конструкция, ...

А где написано, что она устаревшая? Можете привести цитату из стандата на SV или хотя бы ссылку на страницу этого стандарта?

Использую повсеместно define и уже начинаю беспокоиться за своё чувство прекрасного.. wink.gif
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 25 2018, 12:10
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 532
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Dantist2k17 @ Jan 25 2018, 13:53) *
Сам не пробовал, ну а вдруг

Объявите
`define EDGE_CLK posedge
ну или
`define EDGE_CLK negedge

и используйте

always@(`EDGE_CLK my_clk) begin
end

Это несомненно возможно, только мне не это надо. Надо, чтобы это зависело от parameter. А в верилоге условная компиляци работает только от define (ifdef/ifndef), параметр как аргумент эти директивы принимать не могут.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 25 2018, 12:27
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 3 078
Регистрация: 18-04-05
Пользователь №: 4 261



..
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Jan 25 2018, 12:38
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 198
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!
Цитата(DmitryR @ Jan 25 2018, 15:10) *
Это несомненно возможно, только мне не это надо. Надо, чтобы это зависело от 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.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 25 2018, 13:12
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 4 004
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(blackfin @ Jan 25 2018, 14:53) *
А где написано, что она устаревшая? Можете привести цитату из стандата на SV или хотя бы ссылку на страницу этого стандарта?

У Сазерленда есть статья с примерно таким названием: "скажи дефайну - прощай"...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 25 2018, 13:20
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 3 078
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(iosifk @ Jan 25 2018, 16:12) *
У Сазерленда есть статья с примерно таким названием: "скажи дефайну - прощай"...

Ну я только что просканировал весь стандарт на SV и никаких намеков на "прощай, дефайн" не нашел.

Почему я должен верить какому-то Сазерленду и не верить IEEE?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jan 25 2018, 13:27
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 4 004
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(blackfin @ Jan 25 2018, 16:20) *
Ну я только что просканировал весь стандарт на SV и никаких намеков на "прощай, дефайн" не нашел.

Почему я должен верить какому-то Сазерленду и не верить IEEE?

Я и не скзал о стандарте ни одного слова... А Сазерленд - один из основателей верилога и более ничего.. sm.gif


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
blackfin
сообщение Jan 25 2018, 14:16
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 3 078
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(iosifk @ Jan 25 2018, 16:27) *
А Сазерленд - один из основателей верилога и более ничего.. sm.gif

Видимо, в то время он ещё не догадывался, что у Altera, Xilinx, Lattice и Synopsys'a будут разные атрибуты синтеза для выполнения одних и тех же архитектурно зависимых фич. biggrin.gif

Например, тот же (* use_dsp48 = "no" *) в Vivado 2017.3 уже выглядит как (* use_dsp = "no" *).

В Quartus'e и в Synplify'e есть аналогичные, но другие атрибуты.

Переписывать ради этого кучу файлов нет никакого желания. Пусть этим занимается компилятор.. А я просто изменю одну строку в define. biggrin.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 25 2018, 17:35
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



define - это когда их используют как параметры. Тут все как с С, и проблемы те же. Им и прощай.
А дефайн для ветвления - ок и он все еще с нами

Цитата
`define EDGE_CLK posedge

именно такое решение я и видел. Я бы предпочел генерайт, именно в силу ограничений дефайна.

Боюсь реально необходимость настраиваемого фронта для модуля - ненужная вещь, которая множит ошибки. Если же вы думаете про технику улучшения времянок когда не успевая принять по переднему фронту, переходят на задний - так это порочная практика, ее надо пресекать. Да, да...
Go to the top of the page
 
+Quote Post
Shivers
сообщение Jan 26 2018, 05:29
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Лично я больше предпочитаю параметры в RTL, чем дефайны. Потому что при синтезе тулы (эсик) добавляют названия и значения параметров в название модуля: после синтеза в любой момент можно узнать, какие параметры использовались. А вот значения дефайнов синтезатор никуда не сохраняет. Итого, из-за дефайнов возникает больше всего ошибок при сборке проекта, и найти баг намного сложнее, чем при неверном задании параметра. Вместе с тем, дефайны до сих пор есть в каждом втором проекте, с которым приходится работать.
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Jan 26 2018, 06:56
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Цитата
хочу настраивать его константой времени компиляции.


Код
generate
    if(a)begin
        ...
    end
    else begin
        ...
    end
endgenerate
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd September 2018 - 02:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.00923 секунд с 7
ELECTRONIX ©2004-2016