Я прочитал "Неблокирующие присвоения в Verilog Synthesis, убивающие стили кодирования!" пользователя Клиффорд Каммингс. Он говорит, что код в конце этого вопроса "гарантированно" будет синтезирован в конвейер с тремя триггерами, но не гарантируется правильное моделирование (пример pipeb3, стр. 10; "гарантированный" комментарий находится на стр. 12 ). Документ получил награду за лучшую бумагу, поэтому я полагаю, что утверждение верно. http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf
Мой вопрос: как определяется правильность синтеза Verilog, если не на основании семантики моделирования? Большое спасибо.
Я полагаю, что вопрос о бонусных баллах заключается в следующем: дайте простейшую возможную программу Verilog, которая имеет четко определенную семантику синтеза и не имеет четко определенной семантики моделирования, при условии, что это не приведенный ниже код. Еще раз спасибо.
Фактически, может ли кто-нибудь дать мне часть Verilog, которая хорошо определена как при моделировании, так и при синтезе, но при этом они дают разные результаты?
Код:
module pipeb3 q3, d, clk);
output [7:0] q3;
input [7:0] d;
input clk;
reg [7:0] q3, q2, q1;
always @(posedge clk) q1=d;
always @(posedge clk) q3=q2;
always @(posedge clk) q1=d;
endmodule
PS: на случай, если кого-то это волнует, я подумал, что правдоподобное определение правильного инструмента синтеза может быть примерно таким: «синтезируемое оборудование будет делать то, что мог бы правильный симулятор». Но это не соответствует бумаге.
[Теперь я думаю, что это не та статья. В разделе 5.2 стандарта 1364-2001 четко сказано, что смысл программы Verilog определяется ее моделированием, которое затем определяет стандарт (недетерминизм и все такое). Нет никаких упоминаний о каких-либо «гарантиях», которые инструменты синтеза должны предоставлять помимо симуляторов.
Существует еще один стандарт 1364.1-2002, который описывает синтезируемое подмножество. Нет очевидного упоминания о том, что семантика синтезируемого оборудования должна как-то отличаться от симуляции. В разделе 5.2.2 «Моделирование устройств хранения, чувствительных к границам» говорится, что неблокирующие назначения следует использовать для моделирования триггеров. На стандартном языке это означает, что использование чего-либо еще не поддерживается.
В заключение, в разделе, упомянутом в предыдущем абзаце, говорится, что блокирующие назначения могут использоваться для вычисления RHS неблокирующего назначения. Это, по-видимому, нарушает рекомендацию № 5 Каммингса.
Клифф Каммингс числится членом рабочей группы стандарта 1364.1-2002. Этот стандарт указан как замененный на веб-сайте IEEE, но я не могу сказать, чем он был заменен.]