Перейти к содержанию
    

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

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

Инверсия clk.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а вы пишите на 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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 нет возможности

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, oleg679976 сказал:

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 hours ago, iosifk said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Bad0512 сказал:

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

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 минуту назад, oleg679976 сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я делаю так:

if sig=1 & t_sig=0 begin

    ... фронт;

end else if sig=0 & t_sig=1 begin

    ... спад;

end

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 сказал:

Все верно

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...