kovigor 6 July 6, 2015 Posted July 6, 2015 · Report post Вот защелка: 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 Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 July 6, 2015 Posted July 6, 2015 · Report post я бы сделал все же 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)); Quote Share this post Link to post Share on other sites More sharing options...
iosifk 3 July 6, 2015 Posted July 6, 2015 · Report post Вот защелка: Открываем темплейты и выбираем нужный.. И в Моделсиме, и в Квартусе и в ISE... Зачем мудрить? Quote Share this post Link to post Share on other sites More sharing options...
kovigor 6 July 6, 2015 Posted July 6, 2015 · Report post Открываем темплейты и выбираем нужный.. И в Моделсиме, и в Квартусе и в ISE... А в ISE где их искать ? я бы сделал все же always @(r, s) ... Но и без "always", по идее, тоже должно работать ? Quote Share this post Link to post Share on other sites More sharing options...
Golikov 0 July 6, 2015 Posted July 6, 2015 · Report post А в ISE где их искать ? там такая кнопочка с лампочкой вверху, наверное в закладке язоковых примитивов, но там и поиск вроде есть.... без laways не очень понятно как это в шаблон объявления модуля вкладывается то есть if (r) q <= 1'b0; else if (s) q <= 1'b1; это вот что? сколько раз это надо повторять, это не initial и не always... не понятно с точки зрения стандарта как это расценивать. Может кто более в стандарте искушен поправят. в конструкции always @ все понятно, ждем события - @, и как только дошли до енда алвайса опять в начала ждем события. а так это как интеграл без дифференциала. ИМХО Quote Share this post Link to post Share on other sites More sharing options...
kovigor 6 July 6, 2015 Posted July 6, 2015 · Report post это вот что? сколько раз это надо повторять, это не initial и не always... не понятно с точки зрения стандарта как это расценивать. Может кто более в стандарте искушен поправят. в конструкции always @ все понятно, ждем события - @, и как только дошли до енда алвайса опять в начала ждем события. а так это как интеграл без дифференциала. ИМХО В общем, все ясно, спасибо ... Quote Share this post Link to post Share on other sites More sharing options...
Sobol' 0 July 6, 2015 Posted July 6, 2015 · Report post я бы еще явно описал то, что должен делать триггер, когда оба сигнала в единице. Например так: 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 последнюю строчку можно выкинуть. Quote Share this post Link to post Share on other sites More sharing options...
serjj1333 0 July 6, 2015 Posted July 6, 2015 · Report post Но и без "always", по идее, тоже должно работать ? Если так лень читать стандарт, то открываем modelsim/questasim, вводим предложенную вами конструкцию и видим, что вылазит ошибка: ** Error: C:/workspace/modelsim/pr40_rtl/tb/tb_pr40.sv(136): near "<=": syntax error, unexpected <=, expecting IDENTIFIER or TYPE_IDENTIFIER Хотя это настолько на поверхности, что даже простейшие редакторы верилога вам эту ошибку укажут и пометят. Quote Share this post Link to post Share on other sites More sharing options...
iosifk 3 July 6, 2015 Posted July 6, 2015 · Report post там такая кнопочка с лампочкой вверху, наверное в закладке язоковых примитивов, но там и поиск вроде есть.... Видна при активной панели редактирования HDL-файлов... Или надо открыть файл, или открыть "новый"... Quote Share this post Link to post Share on other sites More sharing options...
demon3200 0 July 6, 2015 Posted July 6, 2015 · Report post Но и без "always", по идее, тоже должно работать ? Изучите материал по приведенной ниже ссылке. Как раз по Вашему вопросу. http://svo.2.staticpublic.s3-website-us-ea...og/assignments/ Quote Share this post Link to post Share on other sites More sharing options...
kovigor 6 July 6, 2015 Posted July 6, 2015 · Report post Изучите материал по приведенной ниже ссылке ... Спасибо, сейчас гляну ... Quote Share this post Link to post Share on other sites More sharing options...
bugdesigner 0 July 6, 2015 Posted July 6, 2015 · Report post 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 Quote Share this post Link to post Share on other sites More sharing options...
likeasm 0 July 6, 2015 Posted July 6, 2015 · Report post Из лампочки примитив ловчее будет раз 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 ); Quote Share this post Link to post Share on other sites More sharing options...
nepoch 0 July 20, 2015 Posted July 20, 2015 · Report post Вот защелка: 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 и триггер, и защелка реализуется на основе этих элементов? Quote Share this post Link to post Share on other sites More sharing options...
serjj1333 0 July 20, 2015 Posted July 20, 2015 (edited) · Report post Скажите, а зачем городить защелки, если в структуре LE (логической ячейки) есть только LUT и триггер, и защелка реализуется на основе этих элементов? В большинстве случаев latch - нежелательный результат, поэтому важно знать как его описать. Это позволит не использовать конструкции, приводящие к имплементации латчей. Возможно в некоторых архитектурах и задачах они используются как равноправный элемент дизайна. В обычных ПЛИС их лучше исключить. Если же нужен "логический эквивалент", то ИМХО лучше так сделать (например): logic a, b, c, y; assign y = a && b; always@(posedge clock) c <= y; end assign q = y || c; Edited July 20, 2015 by serjj Quote Share this post Link to post Share on other sites More sharing options...