Во-первых, ваша реализация вашей схемы неправилен: 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, чтобы подтвердить, что он действительно работает.
Не могли бы вы добавить к вопросу сообщения об ошибках, которые вы видите? – rick
, если даёт мне часовую ошибку, но я не уверен, почему, потому что я пытаюсь сделать это асинхронно без часов, просто используя управляющий вход – user3023323
Вход 'C', вероятно, обрабатывается как« часы »с помощью инструмента синтеза , так как 'C' может использоваться как возможность для выведенных защелок в реализации. Инструменты синтеза не предназначены для обработки конструкций с такими петлями и могут попытаться сломать петлю, выведя защелки. Я предполагаю, что дизайн является лишь частью какого-то теста, поскольку такой дизайн не масштабируется для больших систем. –