簡體   English   中英

系統Verilog仿真與執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM