bogaev_roman 0 24 мая, 2010 Опубликовано 24 мая, 2010 (изменено) · Жалоба Есть кусок следующего кода: always @(posedge rx_outclock or negedge rx_locked or negedge rst_) begin if(~rst_) begin rx_locked_t <= 1'b0; end else begin rx_locked_t <= rx_locked; end end Смущает, что используется два управляющих сигнала rx_locked и negedge rst_. В качестве сброса используется один, а второй поступает на информационный вход, ну а подобных триггеров мне не известно. Ну и квартус выдает предупреждение: Critical Warning (10237): Verilog HDL warning at cntrl_.v(168): can't infer register for assignment in edge-triggered always construct because the clock isn't obvious. Generated combinational logic instea Я в данный момент занимаюсь объединением нескольких модулей и этот кусок не мой, а влазить и переписывать код, а затем проверять его ну очень не хочется. Вопрос: насколько критично предупреждение и можно ли подобную конструкцию все-таки реализовать на триггере? Заранее спасибо. Изменено 24 мая, 2010 пользователем bogaev_roman Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
st232bd 0 24 мая, 2010 Опубликовано 24 мая, 2010 (изменено) · Жалоба Может проблемма не в Verilog, а в кристалле, который вы используете. У него нет тригеров с тремя входами синхронизации, вот и ругается, что уложить не может, только как комбинаионную схему. Изменено 24 мая, 2010 пользователем st232bd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
masics 0 24 мая, 2010 Опубликовано 24 мая, 2010 · Жалоба по-моему, это ошибка предыдущего разработчика. На всякий случай, если можете, посмотрите какая была реализация в оригинальном проекте (и предупреждение, если было). Но, я думаю, можно убрать "negedge rx_locked" и получить FF в чистом виде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glock17 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Смущает, что используется два управляющих сигнала rx_locked и negedge rst_. В качестве сброса используется один, а второй поступает на информационный вход, ну а подобных триггеров мне не известно. По-хорошему так, как описано в коде, вообще не делается. Если сигнал rx_locked - асинхронный, то его нужно сначала синхронизировать с rx_outclock: reg rx_locked_a, rx_locked_s; always @(posedge rx_outclock) rx_locked_a <= rx_locked; always @(posedge rx_outclock) rx_locked_s <= rx_locked_a; а затем сделать примерно так: always @(posedge rx_outclock or negedge rst_) begin if(!rst_) rx_locked_t <= 1'b0; else rx_locked_t <= rx_locked_s; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба negedge rx_locked вот это выкидывай, явно ошибка разработчика, а не заметил он ее при отладке потому, что варнинги синтезатора не читал, а код потенциально рабочий, выстрелит раз в пятилетку, да и то на глюк спишут %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Смущает, что используется два управляющих сигнала rx_locked и negedge rst_. Скорее всего он хотел aclr по negedge rx_locked always @(posedge rx_outclock or negedge rx_locked or negedge rst_) if(~rst_) rx_locked_t <= 1'b0; else if(~rx_locked ) rx_locked_t <= 1'b0; else rx_locked_t <= rx_locked; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Всем Всем спасибо за советы, действительно сигнал negedge rx_locked там ни к чему, так и сказал, что варнигни не читал и просто ошибся :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба вот это выкидывай, явно ошибка разработчика, а не заметил он ее при отладке потому, что варнинги синтезатора не читал, а код потенциально рабочий, выстрелит раз в пятилетку, да и то на глюк спишут %) Почему потенциально рабочий? Там же вообще триггера не будет. Или Вы думаете, что автор кода его и не хотел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Почему потенциально рабочий? Там же вообще триггера не будет. Или Вы думаете, что автор кода его и не хотел? Хоть и не телепат, но мне кажется что этот триггер и был синхронизатором, а потом этот сигнал locked шел на какой нить статусный регистр, читаемый раз в пятилетку в еще один регистр какого нибудь проца. Метастабильность проц даже не увидит, а выстрелить такой код сможет только в случае когда кто нить повесит на него прерывание по фронту и будет долго ковырять почему схема при определенном положении звезд дает сбои %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Хоть и не телепат, но мне кажется что этот триггер и был синхронизатором, а потом этот сигнал locked шел на какой нит статусный регистр Именно так оно и было :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба Хоть и не телепат... Именно так оно и было :) Все-таки, телепат! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aprox 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Там же вообще триггера не будет. Или Вы думаете, что автор кода его и не хотел? Вот вам и verilog! В AHDL таких глупостей в принципе не бывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Вот вам и verilog! В AHDL таких глупостей в принципе не бывает. А вы с C знакомы? Там вообще если написать if( var = 5) ... Будет не сравнение, а присвоение. Ужасно тупой язык! В ассемблере такого нет! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Вот вам и verilog! В AHDL таких глупостей в принципе не бывает. Это не верилог такой, это разработчик такой. Может человек просто описался. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 27 мая, 2010 Опубликовано 27 мая, 2010 · Жалоба Просто логически неправильно подавать один и тот же сигнал rx_locked и на тактовый вход триггера, и на вход данных. В AHDL "такую глупость" тоже никто не мешает сделать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться