"Verilog 합성에서 비 차단 할당, 종료하는 코딩 스타일"을 읽었습니다. 클린드 커밍스. 그는이 질문의 맨 아래에있는 코드가 3 개의 플립 플롭 파이프 라인으로 합성되도록 "보장"되어 있지만 올바르게 시뮬레이트하는 것은 보장되지 않는다고 말했습니다 (10 페이지의 파이프 b3 예제, "보증 된"주석은 12 페이지에 있습니다)). 이 문서는 최고의 논문상을 수상했기 때문에 그 주장은 사실이라고 생각합니다. http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdfVerilog 코드에서 합성 된 하드웨어의 정확성은 무엇입니까?
내 질문 : 시뮬레이션 의미론을 참조하지 않을 경우 Verilog 합성의 정확성은 어떻게 정의됩니까? 많은 감사합니다.
보너스 포인트 질문은 다음과 같다고 가정합니다. 잘 정의 된 합성 의미론을 갖고 있으며 아래에 코드가 아니라고 가정하면 잘 정의 된 시뮬레이션 의미론이없는 가능한 가장 간단한 Verilog 프로그램을 제공하십시오. 다시 한번 감사드립니다.
사실, 누군가가 나에게 Verilog thatis 잘 정의 된 조각을 줄 수 있습니까 시뮬레이션 및 합성, 아직 두 가지 결과를 생산?
코드 :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가 : 경우 사람이 관심에, 내가 올바른 합성 툴의 그럴듯한 정의의 라인을 따라 수도 있지만 "합성 된 하드웨어가 뭔가를 할 것이다 정확한 시뮬레이터 수 있었다" . 그러나 이는 논문과 일치하지 않습니다.
[나는 이제 그 종이가 옳지 않다고 생각한다. 1364-2001 표준의 섹션 5.2에서는 Verilog 프로그램의 의미가 표준에 따라 (비 결정론 및 전체) 정의가 진행되는 시뮬레이션에 의해 정의된다고 분명히 말합니다. 합성 도구가 시뮬레이터와 관련하여 제공해야하는 "보증"에 대해서는 언급이 없습니다.
합성 가능한 하위 집합을 설명하는 또 다른 표준 1364.1-2002가 있습니다. 합성 하드웨어의 의미가 시뮬레이션과 어떻게 다른지 분명히 언급하지는 않습니다. 섹션 5.2.2 "가장자리 감지 저장 장치 모델링"에서는 플립 플롭을 모델링 할 때 비 차단 할당을 사용해야한다고 설명합니다. standard-speak에서는 다른 것의 사용이 지원되지 않는다는 것을 의미합니다.
마지막으로, 이전 단락에서 언급 한 섹션에서는 블로킹 할당을 사용하여 비 블로킹 할당의 RHS를 계산할 수 있습니다. 이것은 Cummings의 추천 # 5를 위반하는 것으로 보입니다.
클리프 커밍 즈 (Cliff Cummings)는 1364.1-2002 표준 작업 그룹의 구성원으로 등록되어 있습니다. 이 표준은 IEEE 웹 사이트에서 대체 된 것으로 나와 있지만 대체 할 수있는 내용을 알 수는 없습니다.]
나는 "합성 된 하드웨어가 올바른 시뮬레이터가 할 수있는 것을 할 것"이라고 정의 할 것입니다. 시뮬레이터는 합성 하드웨어와 동일한 결과를 제공해야합니다. – Morgan
분명히 틀렸어. 나는 두려워. 시뮬레이션은 의도적으로 비 결정적이므로 다른 올바른 시뮬레이터는 다른 결과를 줄 수 있습니다. 실제로 똑같은 올바른 시뮬레이터를 실행하면 결과가 달라질 수 있습니다 (AFAIK). 따라서 동일한 하드웨어가 옳고 그름이 무작위로 바뀝니다. 별로. (원래의 정의는 하드웨어에 의해 생성 된 결과가 의미하는 바를 설명하기 위해 많은 조항을 필요로합니다.) – user1002059
IEEE 1364는 이제 IEEE 1800 - SystemVerilog의 일부입니다. 기본적으로 두 언어를 하나의 사양으로 병합했습니다. 그들은 1800이 1364에 더해지기 때문에이 작업을 수행했지만, 틈이있었습니다. 하나의 명세에 넣으면 구멍이없는 것을 쉽게 확인할 수 있습니다. –