eu1cc 0 14 февраля, 2012 Опубликовано 14 февраля, 2012 · Жалоба module comp ( // {{ALTERA_ARGS_BEGIN}} DO NOT REMOVE THIS LINE! comp_in, clr, clk, clr_out // {{ALTERA_ARGS_END}} DO NOT REMOVE THIS LINE! ); // Port Declaration // {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! input comp_in; input clr; input clk; output clr_out; // {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! reg clr_out; reg zamok; initial begin clr_out = 0; zamok = 0; end always @ (clk or comp_in) begin clr_out <= 0; if (clr == 1) begin zamok <= 0; end if (comp_in == 1) begin if (zamok == 0) clr_out <= 1; zamok <= 1; end end endmodule Подскажите по поводу корректности кода. Вроде в ModelSim работает, но смущает, что clr_out <= 0; вроде бы может присвотся не в попад с тактом. Пытаюсь сделать одновибратор. т.е. когда приходит posedge comp_in должен произойти однократный сброс через clr_out, а затем при любом comp_in ничего не происходить, пока не придет сброс по clr. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 4 14 февраля, 2012 Опубликовано 14 февраля, 2012 · Жалоба вроде бы может присвотся не в попад с тактом. с каким "тактом"? если хотите с тактом, то нужно так: always @(posedge clk а у Вас что?.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eu1cc 0 14 февраля, 2012 Опубликовано 14 февраля, 2012 · Жалоба clk и есть такт. always @ (posedge clk) - это положтельный перепад, а always @ (clk) - это любой перепад. Разве не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 4 14 февраля, 2012 Опубликовано 14 февраля, 2012 · Жалоба clk и есть такт. always @ (posedge clk) - это положтельный перепад, а always @ (clk) - это любой перепад. Разве не так? НЕТ. Вы создали список чувствительности, ваша конструкция триггер вообще не порождает. Да и если бы запись была верной - нет в ПЛИС триггеров, реагирующих на любой фронт. Вы поймите, что не все, что вы сможете написать, в ПЛИС реализуемо. Почитайте 1364.1 - 2002 IEEE Standard for Verilog Register Transfer Level Synthesis. Еще поищите книги автора (соавтора) Yatin Trivedi. Вы сам один заниматесь этой темой? Коллеги (если работаете), преподаватели (если учитесь) могут помочь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eu1cc 0 15 февраля, 2012 Опубликовано 15 февраля, 2012 · Жалоба Один занимаюсь. А почему тогда в ModelSim все показывает правильно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 15 февраля, 2012 Опубликовано 15 февраля, 2012 · Жалоба Один занимаюсь. А почему тогда в ModelSim все показывает правильно? А что по Вашему моделсим должен был показать? Реально Ваша схема вырождается в комбинационную логику без триггеров, можете проверить на rtl viewer. Modelsim правильно покажет и несинтезируемую конструкцию типа initial begin #5 a=b end Раз помочь некому, советую начать с азов проектирования на ПЛИС с помощью языков HDL - книг и статей сейчас навалом даже на русском. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eu1cc 0 15 февраля, 2012 Опубликовано 15 февраля, 2012 · Жалоба Странно, но многая литература пишет, что always @ (clk) именно срабатывание по любому фронту....... ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Костян 0 15 февраля, 2012 Опубликовано 15 февраля, 2012 · Жалоба Странно, но многая литература пишет, что always @ (clk) именно срабатывание по любому фронту....... ? действительно...такая конструкция срабатывает по любому фронту. но она не синтезируемая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scorp 0 16 февраля, 2012 Опубликовано 16 февраля, 2012 (изменено) · Жалоба Странно, но многая литература пишет, что always @ (clk) именно срабатывание по любому фронту....... ? одна из самых распространенных ошибок начинающих разработчиков цифровых схем. Очень многие, начиная писать на HDL языках, продолжают мыслить в алгоритмах языков обычного программирования. Автору хотелось бы сказать, что в HDL языках, коим является и verilog следует четко разделять синтезируемое и несинтезируемое подмножество языка. Синтезируемое - это то, в рамках чего вы создаете схему, здесь каждый шаг, должен быть продуман с точки зрения аппаратной реализации, то бишь что вы подразумеваете, применив данную конструкцию языка. Несинтезируемое подмножество - та часть языка в которой вы вольны писать как душе угодно, эта часть не применяется для создания схем, её основное назначение-создание тестового окружения проекта, создание тестовых воздействий, вывод результатов моделирования и др. Изменено 16 февраля, 2012 пользователем Nix_86 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klop 0 18 февраля, 2012 Опубликовано 18 февраля, 2012 · Жалоба Несинтезируемое подмножество - та часть языка в которой вы вольны писать как душе угодно, эта часть не применяется для создания схем, её основное назначение-создание тестового окружения проекта, создание тестовых воздействий, вывод результатов моделирования и др. Только и в этой части сильно не рекомендую писать как душе угодно что бы избежать воплей типа : (много непечатных слов) у меня в Questasim все работоло а в NC-Sim кое что не пашет и tapeout через день ( снова много непечатных слов) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eu1cc 0 20 февраля, 2012 Опубликовано 20 февраля, 2012 · Жалоба Что-то ничего не получается. Помогите, пожалуйста!!! Есть три входных сигнала: clk - 100MHz, comp, reset. и один выходной pld_out. Нужно, что-бы при reset == 0 при (posedge comp) pld_out стал 1, а затем при (posedge clk) pld_out стал 0, и больше не менялся, пока reset == 0, и т.д. Заранее огромное спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stu 0 20 февраля, 2012 Опубликовано 20 февраля, 2012 · Жалоба и когда ему поменяться? после того как: I) reset == 1 II)1)reset == 1 и затем 2)reset == 0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eu1cc 0 20 февраля, 2012 Опубликовано 20 февраля, 2012 · Жалоба Да, когда reset станет 1, потом 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stu 0 20 февраля, 2012 Опубликовано 20 февраля, 2012 (изменено) · Жалоба хы. тогда можете так: module tst( input wire clk , input wire comp , input wire reset, output wire pld_out, output wire en, en1 ); assign pld_out = (comp && ~reset && en1) ? 1'b1 : (clk) ? 1'b0 : pld_out; assign en = (reset) ? 1'b1 : (clk && pld_out) ? 1'b0 : en; assign en1 = (~reset && en) ? 1'b1 : (clk) ? 1'b0 : en1; endmodule но щас Вам более корректный код отпишут. напишут "ай-ай, латчи, тыры-пыры" =) как тактировать один сигнал двумя клоками, как Вы описали, я не понимаю. хотя корректнее было бы, записать значения comp и reset в регистры и с ними работать для избежания случайностей Изменено 20 февраля, 2012 пользователем stu Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eu1cc 0 21 февраля, 2012 Опубликовано 21 февраля, 2012 · Жалоба Да, я с защелками тоже столкнулся, решил, что их нельзя использовать... Вроде все просто, но оказалась какая-то засада... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться