甘肅省城鄉(xiāng)與住房建設(shè)廳網(wǎng)站怎么網(wǎng)站推廣
SystemVerilog 教程
像 Verilog 和 VHDL 之類的硬件描述語言 (HDL) 主要用于描述硬件行為,以便將其轉(zhuǎn)換為由組合門電路和時(shí)序元件組成的數(shù)字塊。為了驗(yàn)證 HDL 中的硬件描述正確無誤,就需要具有更多功能特性的面向?qū)ο蟮木幊陶Z言 (OOP) 來支持復(fù)雜的測(cè)試過程,這種語言通常被稱為硬件驗(yàn)證語言 (HVL)。
SystemVerilog 是 Verilog 的擴(kuò)展,具有諸多此類驗(yàn)證功能,能支持工程師在仿真中使用復(fù)雜的測(cè)試激勵(lì)文件結(jié)構(gòu)和隨機(jī)激勵(lì)來驗(yàn)證設(shè)計(jì)。
為何不首選使用 Verilog?
回望 20 世紀(jì) 90 年代,Verilog 是驗(yàn)證設(shè)計(jì)功能的主要語言,這類設(shè)計(jì)較小、并不太復(fù)雜并且所含功能特性較少。但隨著設(shè)計(jì)變得越來越復(fù)雜,對(duì)于使用更好的工具來完成設(shè)計(jì)并進(jìn)行驗(yàn)證的需求也與日俱增。相比于 Verilog,SystemVerilog 的主要優(yōu)勢(shì)體現(xiàn)在它能夠執(zhí)行受約束的隨機(jī)激勵(lì)、在測(cè)試激勵(lì)文件構(gòu)造中使用 OOP 功能特性、功能覆蓋范圍、斷言等等。
什么是驗(yàn)證?
驗(yàn)證是確保給定硬件設(shè)計(jì)能按期望方式來工作的過程。芯片設(shè)計(jì)是極為昂貴且耗時(shí)的過程,制造更是需要花費(fèi)數(shù)百萬。如果能夠在設(shè)計(jì)進(jìn)程中盡早發(fā)現(xiàn)設(shè)計(jì)中的功能缺陷,就能有助于節(jié)省成本。如果在設(shè)計(jì)流程晚期才發(fā)現(xiàn)設(shè)計(jì)缺陷,那么就必須重復(fù)所有設(shè)計(jì)步驟,這將耗用更多資源、金錢和時(shí)間。如果不得不重復(fù)整個(gè)設(shè)計(jì)流程,那么這被稱為芯片流片。
那 Vera、e 和其它類似的 HVL 又如何?
這些語言由來已久。SystemVerilog 能夠被視作為 Verilog(最常用的 HDL)的擴(kuò)展,在 SystemVerilog 中驗(yàn)證 Verilog 設(shè)計(jì)自然是合情合理的。并且,SystemVerilog 支持 OOP,故而能在更高抽象層次進(jìn)行設(shè)計(jì)驗(yàn)證。
如何在驗(yàn)證過程中使用 SystemVerilog?
硬件設(shè)計(jì)主要由多個(gè) Verilog (.v) 文件構(gòu)成,并包含一個(gè)頂層模塊,其中所有其它子模塊都會(huì)通過例化來達(dá)成所需的行為和功能。對(duì)給定 Verilog 設(shè)計(jì)進(jìn)行驗(yàn)證需要一個(gè)稱為測(cè)試激勵(lì)文件的環(huán)境,近年來,該環(huán)境通常都是以 SystemVerilog 編寫的。利用不同激勵(lì)來驅(qū)動(dòng)設(shè)計(jì)的意圖是通過觀測(cè)其輸出,并將其與期望的值進(jìn)行比較,從而觀察設(shè)計(jì)行為是否與期望相符。
為此,頂層設(shè)計(jì)模塊會(huì)在測(cè)試激勵(lì)文件環(huán)境內(nèi)進(jìn)行例化,設(shè)計(jì)輸入/輸出端口會(huì)與相應(yīng)的測(cè)試激勵(lì)文件組件信號(hào)相連接。我們利用已知能使設(shè)計(jì)正常運(yùn)作的某些值來驅(qū)動(dòng)設(shè)計(jì)輸入。通過分析輸出,并將其與期望的值進(jìn)行比對(duì),來查看設(shè)計(jì)行為是否正確。
示例
這里提供了一個(gè)簡(jiǎn)單的 D 觸發(fā)器 Verilog 設(shè)計(jì)驗(yàn)證示例。DFF 的功能是 Q 輸出管腳被鎖存到每個(gè)正時(shí)鐘沿的 D 輸入管腳中的值,使其成為正時(shí)鐘沿觸發(fā)的觸發(fā)器。同時(shí),我們假定該觸發(fā)器具有低電平有效復(fù)位管腳和時(shí)鐘。
// File : d_ff.v
module d_ff (clk, resetn, q, d);input clk;input resetn;input d;output q;reg q;always @ (posedge clk)if (! resetn)q <= 0;elseq <= d;endmodule
我們需要為此設(shè)計(jì)構(gòu)建一個(gè)測(cè)試激勵(lì)文件,以便將某些信號(hào)值驅(qū)動(dòng)到其輸入管腳 clk、reset 和 d,并觀測(cè)輸出結(jié)果。通過驅(qū)動(dòng)相應(yīng)的激勵(lì)并檢查結(jié)果,即可確認(rèn)其功能行為正常。隨后,綜合工具即可將此設(shè)計(jì)轉(zhuǎn)化為真實(shí)的硬件邏輯和門電路。
// File : tb_top.sv
module tb_top ();reg clk;reg resetn;reg d;wire q;// Instantiate the designd_ff d_ff0 ( .clk (clk),.resetn (resetn),.d (d),.q (q));// Create a clockalways #10 clk <= ~clk;initial beginresetn <= 0;d <= 0;#10 resetn <= 1;#5 d <= 1;#8 d <= 0;#2 d <= 1;#10 d <= 0;end
endmodule
tb_top 文件表示一個(gè)簡(jiǎn)單的測(cè)試激勵(lì)文件,您在其中已創(chuàng)建一個(gè) d_ff0 設(shè)計(jì)的對(duì)象,并將其端口與測(cè)試激勵(lì)文件中的信號(hào)相連接。隨后,您只需在測(cè)試激勵(lì)文件中分配或驅(qū)動(dòng)信號(hào)即可,這些信號(hào)將會(huì)被傳遞到設(shè)計(jì)上。