kovigor 5 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба Вот защелка: http://files.d-lan.dp.ua/download.php?file...33d13ca27ab19b2 (простите, но я так и не могу разобраться, как тут вставлять картинки, а не ссылки). А вот текст на Verilog. Вроде, все правильно: module my_latch (r, s, q) input r, s; output q; reg q; if (r) q <= 1'b0; else if (s) q <= 1'b1; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба я бы сделал все же always @(r, s) begin if(r) q <= 1'b0; else if(s) q <= 1'b1; end или даже always @(r, s) begin if(s) q <= 1'b1; if(r) q <= 1'b0; end по смыслу тоже, запись глаже.... а можно прям как на картинке assign q = (~r & (s | q)); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба Вот защелка: Открываем темплейты и выбираем нужный.. И в Моделсиме, и в Квартусе и в ISE... Зачем мудрить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба Открываем темплейты и выбираем нужный.. И в Моделсиме, и в Квартусе и в ISE... А в ISE где их искать ? я бы сделал все же always @(r, s) ... Но и без "always", по идее, тоже должно работать ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба А в ISE где их искать ? там такая кнопочка с лампочкой вверху, наверное в закладке язоковых примитивов, но там и поиск вроде есть.... без laways не очень понятно как это в шаблон объявления модуля вкладывается то есть if (r) q <= 1'b0; else if (s) q <= 1'b1; это вот что? сколько раз это надо повторять, это не initial и не always... не понятно с точки зрения стандарта как это расценивать. Может кто более в стандарте искушен поправят. в конструкции always @ все понятно, ждем события - @, и как только дошли до енда алвайса опять в начала ждем события. а так это как интеграл без дифференциала. ИМХО Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба это вот что? сколько раз это надо повторять, это не initial и не always... не понятно с точки зрения стандарта как это расценивать. Может кто более в стандарте искушен поправят. в конструкции always @ все понятно, ждем события - @, и как только дошли до енда алвайса опять в начала ждем события. а так это как интеграл без дифференциала. ИМХО В общем, все ясно, спасибо ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sobol' 0 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба я бы еще явно описал то, что должен делать триггер, когда оба сигнала в единице. Например так: always @* begin if (r && !s) q <= 1'b0; else if (!r && s) q <= 1'b1; else if (r && s) q <= 1'bZ; else q <= q; end последнюю строчку можно выкинуть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба Но и без "always", по идее, тоже должно работать ? Если так лень читать стандарт, то открываем modelsim/questasim, вводим предложенную вами конструкцию и видим, что вылазит ошибка: ** Error: C:/workspace/modelsim/pr40_rtl/tb/tb_pr40.sv(136): near "<=": syntax error, unexpected <=, expecting IDENTIFIER or TYPE_IDENTIFIER Хотя это настолько на поверхности, что даже простейшие редакторы верилога вам эту ошибку укажут и пометят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба там такая кнопочка с лампочкой вверху, наверное в закладке язоковых примитивов, но там и поиск вроде есть.... Видна при активной панели редактирования HDL-файлов... Или надо открыть файл, или открыть "новый"... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demon3200 0 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба Но и без "always", по идее, тоже должно работать ? Изучите материал по приведенной ниже ссылке. Как раз по Вашему вопросу. http://svo.2.staticpublic.s3-website-us-ea...og/assignments/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба Изучите материал по приведенной ниже ссылке ... Спасибо, сейчас гляну ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bugdesigner 0 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба module my_latch (r, s, q) input r, s; output q; reg q; if (r) q <= 1'b0; else if (s) q <= 1'b1; endmodule Процедурные присваивания допустимы по стандарту только в блоке always. Правильно будет как посоветовал Golikov A Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
likeasm 0 6 июля, 2015 Опубликовано 6 июля, 2015 · Жалоба Из лампочки примитив ловчее будет раз LDCE #( .INIT(1'b0) // Initial value of latch (1'b0 or 1'b1) ) LDCE_inst ( .Q(Q), // Data output .CLR(CLR), // Asynchronous clear/reset input .D(D), // Data input .G(G), // Gate input .GE(GE) // Gate enable input ); два LDCPE #( .INIT(1'b0) // Initial value of latch (1'b0 or 1'b1) ) LDCPE_inst ( .Q(Q), // Data output .CLR(CLR), // Asynchronous clear/reset input .D(D), // Data input .G(G), // Gate input .GE(GE), // Gate enable input .PRE(PRE) // Asynchronous preset/set input ); три LDPE #( .INIT(1'b0) // Initial value of latch (1'b0 or 1'b1) ) LDPE_inst ( .Q(Q), // Data output .PRE(PRE), // Asynchronous preset/set input .D(D), // Data input .G(G), // Gate input .GE(GE) // Gate enable input ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nepoch 0 20 июля, 2015 Опубликовано 20 июля, 2015 · Жалоба Вот защелка: http://files.d-lan.dp.ua/download.php?file...33d13ca27ab19b2 (простите, но я так и не могу разобраться, как тут вставлять картинки, а не ссылки). А вот текст на Verilog. Вроде, все правильно: module my_latch (r, s, q) input r, s; output q; reg q; if (r) q <= 1'b0; else if (s) q <= 1'b1; endmodule Скажите, а зачем городить защелки, если в структуре LE (логической ячейки) есть только LUT и триггер, и защелка реализуется на основе этих элементов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 20 июля, 2015 Опубликовано 20 июля, 2015 (изменено) · Жалоба Скажите, а зачем городить защелки, если в структуре LE (логической ячейки) есть только LUT и триггер, и защелка реализуется на основе этих элементов? В большинстве случаев latch - нежелательный результат, поэтому важно знать как его описать. Это позволит не использовать конструкции, приводящие к имплементации латчей. Возможно в некоторых архитектурах и задачах они используются как равноправный элемент дизайна. В обычных ПЛИС их лучше исключить. Если же нужен "логический эквивалент", то ИМХО лучше так сделать (например): logic a, b, c, y; assign y = a && b; always@(posedge clock) c <= y; end assign q = y || c; Изменено 20 июля, 2015 пользователем serjj Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться