Jump to content

    
Sign in to follow this  
oleg679976

Инверсия clk в триггере в Quartus

Recommended Posts

Добрый день! Я новичок и вопрос соответствующий. Изучая файл Timing Analysis of Internally Generated (видать от Altera, чьё авторство не знаю) наткнулся на то, что использовать инвертор для инверсии clk не рекомендуется, и проинвертировать clk можно с самом триггере. А у меня в Quartus эта функция недоступна.  В силу того, что работа идёт на ПЛИС Altera Flex10KE у меня стоит Quartus 9.0. Может быть дела в версии Quartus или семейство не поддерживает такую возможность? Или может сначала в где-то надо определить clk?

Инверсия clk.jpg

Share this post


Link to post
Share on other sites

а вы пишите на verilog-е , там это просто делается posedge или negedge .

module pos_trig ( input wire clk,input wire d, output reg q);

always @(posedge clk) q<=d;

endmodule

module neg_trig ( input wire clk,input wire d, output reg q);

always @(negedge clk) q<=d;

endmodule

 

Share this post


Link to post
Share on other sites
2 часа назад, Lmx2315 сказал:

а вы пишите на verilog-е , там это просто делается posedge или negedge .


module pos_trig ( input wire clk,input wire d, output reg q);

always @(posedge clk) q<=d;

endmodule

module neg_trig ( input wire clk,input wire d, output reg q);

always @(negedge clk) q<=d;

endmodule

 

Да, я знаю, что verilog намного удобнее, но я в прошлом вопросе писал, что все горит уже, и тратить доп время на перевод в verilog нет возможности

Share this post


Link to post
Share on other sites
3 часа назад, oleg679976 сказал:

что использовать инвертор для инверсии clk не рекомендуется, и проинвертировать clk можно с самом триггере. А у меня в Quartus эта функция недоступна.  

Похоже на то, что сам принцип проектирования у Вас неправильный. Потому как инверсный клок требует соответственно своего дерева распространения сигналов в ПЛИС. А это довольно дорогой ресурс...

Если хотите, то могу рассказать это подробнее....

Попробуйте сделать автомат, который будет "в середине" проекта. Тогда все проектирование станет гораздо проще. И, как правильно замечено выше, можно заменять не весь проект, а по-частям...

Share this post


Link to post
Share on other sites
19 hours ago, iosifk said:

Похоже на то, что сам принцип проектирования у Вас неправильный. Потому как инверсный клок требует соответственно своего дерева распространения сигналов в ПЛИС. А это довольно дорогой ресурс...

Не требует, по крайней мере у Xilinx. Проблема с инверсным клоком в другом - в два раза ухудшается времянка при переходах с логики, тактируемой прямым и инверсным клоком соответственно. Ну и дурной тон конечно, это да.

Share this post


Link to post
Share on other sites
21 час назад, Lmx2315 сказал:

а вы не замещайте всё - я вам написал два готовый тригера, сделайте из них графические блочки и ставьте себе в схему.

Спасибо!

Share this post


Link to post
Share on other sites
1 час назад, Bad0512 сказал:

Не требует, по крайней мере у Xilinx. Проблема с инверсным клоком в другом - в два раза ухудшается времянка при переходах с логики, тактируемой прямым и инверсным клоком соответственно. Ну и дурной тон конечно, это да.

Я даже на своем уровне знаний про ПЛИС и цифровую схемотехнику в целом, в принципе понимаю, что синхронный автомат должен изменять свои состояния по фронту, так что использовать инверсные клок не лучшая идея. У меня в проекте инверсный клок нужен для того, чтобы считать импульсы выделения фронта или спада сигналов. Насколько я понимаю их по-другому не считать.

21 час назад, iosifk сказал:

Похоже на то, что сам принцип проектирования у Вас неправильный. Потому как инверсный клок требует соответственно своего дерева распространения сигналов в ПЛИС. А это довольно дорогой ресурс...

Если хотите, то могу рассказать это подробнее....

Попробуйте сделать автомат, который будет "в середине" проекта. Тогда все проектирование станет гораздо проще. И, как правильно замечено выше, можно заменять не весь проект, а по-частям...

К сожалению, я не силён в устройстве ПЛИС, видел пару картинок устройства элементарных ячеек, но пока глубоко не разбирался в этих вещах. Поэтому не думаю, что мне это поможет. Каюсь, и осознаю, что такие вещи необходимо знать.

Share this post


Link to post
Share on other sites
21 минуту назад, oleg679976 сказал:

К сожалению, я не силён в устройстве ПЛИС, видел пару картинок устройства элементарных ячеек, но пока глубоко не разбирался в этих вещах. Поэтому не думаю, что мне это поможет. Каюсь, и осознаю, что такие вещи необходимо знать.

Так я же Вам предлагал помощь... За полчаса-час все бы и выяснили... Тем более, опыт объяснения у меня есть... Но может Вам больше нравится тут переписываться? А сутки уже прошли, и сроки как Вы писали горят..

А уж вот это: "У меня в проекте инверсный клок нужен для того, чтобы считать импульсы выделения фронта или спада сигналов. Насколько я понимаю их по-другому не считать" - так для автомата это совсем не проблема... 

Share this post


Link to post
Share on other sites
2 часа назад, oleg679976 сказал:

Я даже на своем уровне знаний про ПЛИС и цифровую схемотехнику в целом, в принципе понимаю, что синхронный автомат должен изменять свои состояния по фронту, так что использовать инверсные клок не лучшая идея. У меня в проекте инверсный клок нужен для того, чтобы считать импульсы выделения фронта или спада сигналов. Насколько я понимаю их по-другому не считать.

Люди считают импульсы по фронтам и без инверсных клоков (если есть запас по тактовой) на верилоге это вот так:

module frnt_sch (input wire clk,input wire rst,input wire in,output reg [7:0] sch);

reg [2:0] frnt=0; 

always @(posedge clk) frnt<={frnt[1:0],in};

always @(posedge clk)

if (rst==1)  sch<=0;

else

 if (frnt[2:0]==3'b011)  sch<=sch+1;//поиск фронта

 //if (frnt[2:0]==3'b110)  sch<=sch+1;//поиск спада

endmodule

Share this post


Link to post
Share on other sites
4 минуты назад, gibson1980 сказал:

Я делаю так:


if sig=1 & t_sig=0 begin

    ... фронт;

end else if sig=0 & t_sig=1 begin

    ... спад;

end

t_sig <= sig; // задержка на такт

 

Это получается чисто выделитель фронта или спада, правильно?
В силу того, что работаю в схемном редакторе делаю так как здесь с помощью триггера и логики - https://marsohod.org/verilog/157-verilogedges

Share this post


Link to post
Share on other sites
15 минут назад, Lmx2315 сказал:

Люди считают импульсы по фронтам и без инверсных клоков (если есть запас по тактовой) на верилоге это вот так:

module frnt_sch (input wire clk,input wire rst,input wire in,output reg [7:0] sch);

reg [2:0] frnt=0; 

always @(posedge clk) frnt<={frnt[1:0],in};

always @(posedge clk)

if (rst==1)  sch<=0;

else

 if (frnt[2:0]==3'b011)  sch<=sch+1;//поиск фронта

 //if (frnt[2:0]==3'b110)  sch<=sch+1;//поиск спада

endmodule

К сожалению, не понял как работает модуль. Был бы очень благодарен, если бы вы объяснили подробнее сюда или в личные сообщения. Или, если бесит мой низкий уровень знаний и понимания верилога, можно не объяснять)

1 минуту назад, gibson1980 сказал:

Все верно

Тогда получается импульс выделения фронта или спада будет длительностью в период клока. Поэтому я и считываю спадом. Других способов не смог пока придумать.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this