2013-11-28 3 views
0

Я пытаюсь программировать свою NEXYS2 доски с SR защелки с вентилями с разрешающим сигналом C. Мои входов являются (S, R, С) и выходы: (Q, Qbar). ниже приведен некоторый код в VHDL, который я пытался, но продолжаю получать ошибки. также ниже приведены схемы, если это поможет кому-либо понять мой вопрос. если вы знаете это в verilog, все в порядке. Спасибо заранееVHDL или Verilog SR защелка

process(S,R,C,Q,Qbar) 
begin 
    if (C = '1') then 
     Q <= (R nand Qbar); 
     Qbar <= (S nand Q); 
    end if; 
end process; 

Schematic

+0

Не могли бы вы добавить к вопросу сообщения об ошибках, которые вы видите? – rick

+0

, если даёт мне часовую ошибку, но я не уверен, почему, потому что я пытаюсь сделать это асинхронно без часов, просто используя управляющий вход – user3023323

+0

Вход 'C', вероятно, обрабатывается как« часы »с помощью инструмента синтеза , так как 'C' может использоваться как возможность для выведенных защелок в реализации. Инструменты синтеза не предназначены для обработки конструкций с такими петлями и могут попытаться сломать петлю, выведя защелки. Я предполагаю, что дизайн является лишь частью какого-то теста, поскольку такой дизайн не масштабируется для больших систем. –

ответ

0

Ваша схема верна.

Проблема заключается в вашем коде VHDL, поскольку вы полностью не указали функциональные возможности схемы (обратите внимание, что выходные значения для c = '0' не были определены), что вызывает вывод защелок (только зарегистрированные схемы могут быть сконструированы с неполными спецификациями, потому что тогда результирующие сигналы сохраняются в триггерах D-типа).

Вы можете сделать следующее (среди других альтернатив):

entity sr_latch is 
    port ( 
    s, r, c: in bit; 
    q, qbar: buffer bit); 
end entity; 

architecture sr_latch of sr_latch is 
begin 
    q <= (s nand c) nand qbar; 
    qbar <= (r nand c) nand q; 
end architecture 
2

Во-первых, ваша реализация вашей схемы неправилен: R должно быть ~ S, и S должны быть ~ R. попробуйте проследить логику с помощью S или R, равного 1 , когда C - 1 - выходы должны быть установлены высокими.

Исправленная Verilog (я только получил Altera & Verilog здесь):

module top(
      input wire S, R, C, 
      output reg Q, Qbar); 

    always @(S, R, C, Q, Qbar) 
     if(C) begin 
     Q <= (~R & Q) | S; 
     Qbar <= (~S & Q) | R; 
     end 
endmodule 

Это синтезирует Ok на Altera, 2 предупреждений вдоль линий

Warning (10240): Verilog HDL Always Construct warning at test.v(5): inferring latch(es) for variable "Q", which holds its previous value in one or more paths through the always construct 

и предупреждение от что он проанализировал две комбинационные петли в качестве защелок. Вид технологии выглядит правдоподобным, но у вас есть проблема с этим стилем кодирования, что может привести к проблемам.

Проблема в том, что вы явно кодируете только пути обратной связи, но также вы можете оставить синтезатор для вывода защелки. Ваш код включает в себя if(C = '1'), поэтому синтезатор запоминает поведение памяти - защелка - когда C не равно 1. Однако этот бессмыслен, так как вы также прямо указываете, где защелка содержит пути обратной связи. Не делайте обоих; ошибочно предположить, что любой синтезатор достаточно умен, чтобы понять, что вы на самом деле имели в виду. Вот версии, которая не оставляет никаких сомнений в том, что вы хотите:

module top(
      input wire S, R, C, 
      output wire Q, Qbar); 

    wire S2 = ~(C & S); 
    wire R2 = ~(C & R); 
    assign Q = ~(S2 & Qbar); 
    assign Qbar = ~(R2 & Q); 
endmodule 

Это вместо дает два «Found комбинационной петли 2 узлы» предупреждений, так как можно было ожидать. Это также синтезирует Ok, и взгляды RTL/технологии выглядят нормально, с первого взгляда.

Стандартная оговорка: временные аналсиры не подходят для схем времени с использованием комбинационных петель. это, вероятно, все будет работать, только если вы просто играете , но если это реальный дизайн, вам нужно будет серьезно подумать о своих ограничениях и действительно ли анализатор прослеживает ваш путь обратной связи (вероятно, он имеет «т). Вам нужно будет синхронизировать время с sdf back-annotation, чтобы подтвердить, что он действительно работает.

+0

Большое вам спасибо за помощь, но схемы верны. что я точно знаю, и высказывания, которые вы предложили, не дадут мне правильный результат. – user3023323

+0

Я не сказал, что схема была неправильной - я сказал, что ваша * реализация * вашей * схемы была неправильной. Ваш код не соответствует вашей схеме. Тем не менее, это почти так. Прочитайте остальную часть моего сообщения. – EML

Смежные вопросы