[英]System Verilog simulation versus execution
關於SystemVerilog(SV)用於編程芯片和模擬SV代碼的問題很多。 語言結構的這種經濟性給我帶來了一些困惑:SV參考文獻的第9.2.2節說明
“總有四種形式的程序:always,always_comb,always_latch和always_ff。所有形式的always程序在整個模擬過程中不斷重復。”
當然,這些結構當然也指定了組合和鎖存邏輯的創建。 那么SV標准主要是針對模擬,還是由芯片OEM提供給客戶建議哪些SV結構會產生實際硬件,就像Altera在這里做的那樣?
Altera制造CPLD和FPGA,其中一些並不太昂貴(因此我開始學習SV)。 由Altera祝福的SV構造子集可合成將在Quartus中編譯成適合下載到芯片的形式。 Altera標記其他構造,例如許多斷言(上面引用的第16節),“支持。忽略合成”。 以並發斷言為例。
因此,我的結論是,在此處獲得的新信息之外,我可以使用例如僅針對測試平台模塊的並發斷言,但是可以在任何地方使用立即斷言。
基本上我試圖了解SV如何工作,以及我如何最好地解釋上面引用的SV標准。 謝謝。
Verilog語言水平很低,因此在為FPGA或ASIC設計硬件時,我們有組合邏輯和順序邏輯。 任何工具中的斷言都是真正用於驗證的,概念是高級別的,以便能夠獲得您想要的硬件。
SystemVerilog不僅適用於仿真,而且使用正確的設計子集將允許RTL和后合成門文件在仿真中匹配。 編寫SystemVerilog設計的方式將決定合成工具生成的內容。 只有在您隱含它們時才會創建觸發器和鎖存器。 不同的工具可以不同地優化組合部分,但如果使用最佳實踐編寫,那么它們應該在功能上都是等同的。
Verilog在一天中提供了設計指南。 SystemVerilog LRM不會在可合成組件和驗證之間拆分規范,但合成SystemVerilog的非官方指南是一個很好的指南。
關於使用不同的always
塊的問題的一部分。
從Verilog我們有:
always @* // For combinatorial logic
always @(posedge clk) // For flip-flops (sequential) Logic
暗示一個閂鎖涉及一個不完整的if / else分支,並且很難說它是一個意外還是實際意圖。
//Latch from bug or actually intended?
always @* begin
if (enable) begin
//..
end
end
系統verilog always
保持簡單, always
向后兼容verilog代碼,但添加了三種類型,因此設計人員可以明確設計意圖。
always_comb //For Combinatorial logic
always_latch //For implying latches
always_ff //For implying flip-flops (sequential logic)
always_comb
具有比always @*
更為嚴格的規則,用於在仿真中觸發,以進一步最小化RTL到門級仿真不匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.