邱玉泉,曾 維,劉世偉,馮 坤,楊明翰
(成都理工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,四川 成都610000)
基于SystemVerilog的同步FIFO的驗(yàn)證平臺搭建
邱玉泉,曾 維,劉世偉,馮 坤,楊明翰
(成都理工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,四川 成都610000)
針對于傳統(tǒng)驗(yàn)證平臺利用Verilog搭建的驗(yàn)證平臺效率低,準(zhǔn)確度低的局限性,提出了一種基于SystemVerilog系統(tǒng)級語言的驗(yàn)證平臺建模方法,可以有效地降低復(fù)雜度和設(shè)計風(fēng)險。由于FIFO在大多數(shù)工程中利用率極高,也極易出現(xiàn)問題,通過對FIFO模塊進(jìn)行驗(yàn)證平臺建模,可以有效地降低設(shè)計與驗(yàn)證的時序競爭風(fēng)險,實(shí)現(xiàn)驗(yàn)證平臺的復(fù)用和驗(yàn)證過程中的自動監(jiān)測,并且在搭建驗(yàn)證平臺的過程中闡述了基本的驗(yàn)證流程,以及結(jié)合SystemVerilog語言介紹了一些基本建模規(guī)則和技巧。
驗(yàn)證流程;驗(yàn)證平臺;SystemVerilog;FIFO
以往在采用Verilog搭建測試環(huán)境時,設(shè)計者難以對測試環(huán)境進(jìn)行分層設(shè)計,往往將大部分測試組件放在一個模塊中[1]。SystemVerilog則采用面向?qū)ο缶幊?Object Oriented Programming,OOP)的思想來完成驗(yàn)證平臺的分層建模。由于FIFO的功能并不復(fù)雜,因此將其中的一些放在一個組件來完成相關(guān)的功能[2]。
FIFO是一種先進(jìn)先出的數(shù)據(jù)緩存器,根據(jù)工作時鐘域,可以將FIFO分為同步FIFO和異步FIFO。同步FIFO是指讀時鐘和寫時鐘為同一個時鐘,在時鐘沿來臨時同時發(fā)生讀寫操作,而異步FIFO指讀寫時鐘不一致,讀寫時鐘是相互獨(dú)立的[3]。
該FIFO使用16×8的FIFO,其接口包括datain寫入數(shù)據(jù)、dataout讀出數(shù)據(jù)、FIFO_push寫入使能信號、FIFO_o_valid讀出使能信號、rst復(fù)位信號、clk時鐘信號、FIFO_rdy_n數(shù)據(jù)丟失測試信號以及FIFO_almost_full接近滿指示信號[4]。
該FIFO包括正常寫入寫出情況、輸出數(shù)據(jù)丟失情況。數(shù)據(jù)接近滿時警告指示,數(shù)據(jù)滿時無法寫入。通過上述功能的描述,可以制定以下驗(yàn)證計劃[5]:
根據(jù)FIFO的功能要求,制定相應(yīng)的驗(yàn)證計劃。其驗(yàn)證計劃如下:① 驗(yàn)證FIFO是否能夠正常讀寫,其FIFO讀入數(shù)據(jù)與寫出數(shù)據(jù)一致;② FIFO接近滿時,fifo_almost_full拉高提示快滿的指示;③ 在丟失數(shù)據(jù)的情況下,判斷FIFO是否正常完成從FIFO中提取數(shù)據(jù),進(jìn)行輸出,保證輸出的數(shù)據(jù)不被丟失。
根據(jù)FIFO的功能不復(fù)雜和滿足通用性的原則,搭建基于SystemVerilog的FIFO通用驗(yàn)證平臺,可以滿足基本FIFO的功能驗(yàn)證?,F(xiàn)根據(jù)FIFO的功能以及為了驗(yàn)證代碼的可維護(hù)性和可讀性以及擴(kuò)展性,將驗(yàn)證代碼分為頂層模塊、接口模塊和測試模塊3部分[6]。
2.1 頂層模塊(TOP)
頂層模塊包括時鐘產(chǎn)生以及DUT例化程序。若在后續(xù)的FIFO驗(yàn)證過程,需要增加FIFO的一些其他功能端口信號,只需在該模塊增加端口定義即可。時鐘的頻率也可以在此模塊修改參數(shù)模擬實(shí)際情況FIFO的頻率[7]。
時鐘激勵主要程序如下[8]:其中Simulation_cylce為時鐘周期,每隔10 ns翻轉(zhuǎn)一次。
parameter simulation_cycle =20;
forever begin
#(simulation_cycle/2) SystemClock =
~SystemClock;
end
2.2 接口模塊(interface)
使用接口模塊為了提高設(shè)計復(fù)用,降低錯誤風(fēng)險,SystemVerilog采用接口(interface)對多個模塊共同使用一組信號,實(shí)現(xiàn)封裝,使之類似總線。該模塊主要是實(shí)現(xiàn)連接、同步以及2個或多個塊之間的通信功能,連接了設(shè)計塊和測試平臺[9],如圖1所示。
圖1 橫跨兩個模塊的接口
本文將接口設(shè)計代碼放在FIFO_io.sv文件中,用interface和endinterface將接口代碼包裹在里面,并且聲明信號的位寬以及接口類型,其部分代碼如下:
interface fifo_io(input bit clk);
logic rst_n;
logic [DW-1:0] fifo2bus_data; //fifo to bus data
clocking cb @(posedge clk);
………
endclocking
modport TB(clocking cb,output rst_n);
endinterface
上面fifo_io的接口聲明中,將接口中所要用到的所有信號都放入接口聲明中,并且使用clocking……endclocking將同一個時鐘域的信號包裹一起,這些代碼在時鐘clk上升沿發(fā)生時都處于激活狀態(tài)[10],同時使用modport對這些信號指定方向[11]。
2.3 test模塊
該文件主要編寫所有FIFO所有情況下的驗(yàn)證代碼,根據(jù)驗(yàn)證計劃,主要分為正常讀入寫出情況和輸出數(shù)據(jù)丟失情況。由于同步FIFO的功能較簡單,故driver、monitor以及compare都以task的形式放在test模塊中[12]。
由于仿真是可以無限仿真的,在test中增加了對仿真時間的控制,有利于減少仿真時間,并達(dá)到需要的效果。并且在其中增加了S|vcdpluson語句,以便可以生成vdp的波形文件,若需要使用fsdb波形文件,則可以用 S|fsdbDumpfile(“xxx.fsdb”)、S|fsdbDumpvars命令[13]。
仿真時間控制命令和生成波形文件的命令如下[14]:
S|vcdpluson;
# (300000*CLK_PRIOD);
S|finish;
根據(jù)驗(yàn)證計劃,F(xiàn)IFO正常讀寫情況下,輸入和輸出在同時鐘的控制下同步進(jìn)行,F(xiàn)IFO不會出現(xiàn)空和滿的情況,其模擬這種一直輸入和輸出的時序的主要代碼如下[15]:
fifo.cb.fifo_i_data<=cnt;
tdata[cnt]<=cnt;
cnt<=cnt+1;
repeat(1) @(fifo.cb);
根據(jù)傳輸?shù)臋C(jī)制,丟失數(shù)據(jù)的現(xiàn)象不可避免。根據(jù)FIFO的需求,該FIFO對丟失數(shù)據(jù)有相應(yīng)的處理,故為了驗(yàn)證其FIFO的功能正確性,現(xiàn)根據(jù)需求模擬出FIFO丟失數(shù)據(jù)的情況。其核心代碼如下[16-17]:
if(S| urandom_range(1,8)!=3) begin
fifo.cb.fifo_rdy_n<=1′b0;
ready<=1′b0;
repeat(1) @(fifo.cb);
end else begin
fifo.cb.fifo_rdy_n<=1′b1;
ready<=1′b1;
repeat(1) @(fifo.cb);
end
代碼中根據(jù)S|urandom_range(1,8)!=3來模擬丟失數(shù)據(jù)的幾率,此處根據(jù)實(shí)際應(yīng)用場景來設(shè)置相應(yīng)的概率。該FIFO具有提前警示FIFO幾乎滿的功能,當(dāng)丟失數(shù)據(jù)個數(shù)超過24 h,其FIFO_almost_ful會拉高來警示FIFO快要滿了。根據(jù)DUT中的相應(yīng)的設(shè)計,其Verilog代碼實(shí)現(xiàn)如下:
if( fifo_level > ({{(AW-3){1′b1}},3′b0}))
fifo_almost_full <= 1′b1;
if(fifo_level < ({1′b1,{(AW-1){1′b0}}}))
fifo_almost_full <= 1′b0;
在通常的情況下,經(jīng)過FIFO數(shù)據(jù)量很大,通過肉眼觀察波形來檢查FIFO輸入輸出的數(shù)據(jù)是否正確,其效率極低。特別是在信號繁多,數(shù)據(jù)和協(xié)議復(fù)雜的情況下,更需要一種機(jī)制來自動檢測DUT的功能和數(shù)據(jù)正確性。其monitor就是實(shí)現(xiàn)這種自動監(jiān)控輸出的機(jī)制,使驗(yàn)證更加高效可靠。以下是FIFO的monitor核心代碼實(shí)現(xiàn):
if(fifo.cb.fifo_o_valid) begin
rdata [r_cnt]<=fifo.cb.fifo_o_data;
r_cnt<=r_cnt+1;
repeat(1) @(fifo.cb);
end else begin
repeat(1) @(fifo.cb);
end
當(dāng)monitor監(jiān)測到輸出時的有效數(shù)據(jù)時,需要通過將輸出和輸入數(shù)據(jù)進(jìn)行自動比較,來檢測FIFO在傳輸數(shù)據(jù)的過程是否改變了相應(yīng)的值。其compare進(jìn)行比較的核心代碼實(shí)現(xiàn)如下[18]:
if(tdata[i]==rdata[i]) begin
S|display("tdata[%0d]=%0d",i,tdata[i],
S|display("rdata[%0d]=%0d",i,rdata[i],
S|display("-----SUCCESSFUL----- ");
repeat(1) @(fifo.cb);
end else begin
S|display("tdata[%0d]=%0d",i,tdata[i],
S|display("rdata[%0d]=%0d",i,rdata[i],
S|display("-----FAILED----- ");
repeat(1) @(fifo.cb);
end
驗(yàn)證結(jié)果的確認(rèn)主要通過自動監(jiān)測確認(rèn)和波形確認(rèn),根據(jù)驗(yàn)證結(jié)果來判斷FIFO設(shè)計是否符合設(shè)計要求。
為了方便波形觀察,本文采用計數(shù)的方式對FIFO進(jìn)行輸入。其FIFO正常讀寫情況下波形如圖2所示,可以觀察到波形中的輸入輸出數(shù)據(jù)來初步確定FIFO滿足設(shè)計要求。
圖2 FIFO正常讀寫波形圖
圖3是在FIFO在丟失數(shù)據(jù)的情況下,可以看出FIFO在丟失數(shù)據(jù)時能夠?qū)?shù)據(jù)保存下來,等待下一時刻有效時將丟失數(shù)據(jù)重新發(fā)送出去。
圖3 FIFO丟失數(shù)據(jù)波形圖
當(dāng)丟失的數(shù)據(jù)超過24 h,fifo_almost_full幾乎滿信號拉高,如圖4所示。
圖4 幾乎滿信號波形圖
根據(jù)monitor和compare的代碼實(shí)現(xiàn),其自動監(jiān)測部分結(jié)果如下,通過打印的消息可得出結(jié)論,該FIFO設(shè)計滿足功能的實(shí)現(xiàn)。
tdata[0]=0 300135
rdata[0]=0 300135
------------SUCCESSFUL------------
tdata[1]=1 300145
rdata[1]=1 300145
------------SUCCESSFUL------------
tdata[2]=2 300155
rdata[2]=2 300155
------------SUCCESSFUL------------
tdata[3]=3 300165
rdata[3]=3 300165
------------SUCCESSFUL------------
tdata[4]=4 300175
rdata[4]=4 300175
------------SUCCESSFUL------------
在此,介紹了使用SystemVerilog進(jìn)行驗(yàn)證平臺建模的一般原則和技巧,以及面對建模過程中使用的一些接口,將自動檢測等新技術(shù)用于同步FIFO驗(yàn)證平臺的建模中,并使用VCS仿真驗(yàn)證工具進(jìn)行檢驗(yàn)。結(jié)果證明,使用這些建模技術(shù)的設(shè)計的驗(yàn)證平臺,很容易完成代碼的復(fù)用和驗(yàn)證過程中的自動監(jiān)測。
[1] 張明.Verilog HDL實(shí)用教程[M].成都:電子科技大學(xué)出版社,1999.
[2] SystemVerilog Testbench Workshop Student Guide[M].California:Synopsys Customer Education Services,2011.
[3] Cummings C E.Simualtion and Synthesis Techniques for Asyachrononous FIFO Design[M].USA:Sunburst Design,Inc.,2000.
[4] 張毅,周成英.高速同步FIFO存儲器在數(shù)字信號源中的應(yīng)用[J].電子技術(shù),2003(11):48-50.
[5] Lam W K.Hardwave Design Verification:Simulation and Formal Method-Based Approaches[M].Upper Saddle River,NJ:Prentice Hall,2005:81-120.
[6] Janick B.Writing Testbench Using SystemVerilog[M].USA:Springer,2005.
[7] Janick B,Eduard C,Hunter A L ,et al.SystemVerilog 驗(yàn)證方法學(xué)[M].夏宇聞,楊雷,陳先勇,等,譯.北京:北京航空航天大學(xué)出版社,2007.
[8] 張春,麥宋平,趙益新,譯.SystemVerilog測試驗(yàn)證平臺編寫指南[M].北京:科學(xué)出版社,2009
[9] Stuart S,Simon D,Peter F.SystemVerilog for Design[M]. US:Springer:2006.
[10] Janick B.Write Testbenches Using SystemVerilog[M].USA:Springer,2006.
[11] Lam W K.Hardwave Design Verification:Simulation and Formal Method-Based Approaches[M].Upper Saddle River,NJ:Prentice Hall,2005.
[12] 常勇,申敏.一種基于事務(wù)的SoC功能驗(yàn)證方法[J].微計算機(jī)信息,2008,24(2):137-139.
[13] 閆沫,張媛.基于SystemVerilog語言的設(shè)計驗(yàn)證技術(shù)[J].現(xiàn)代電子技術(shù),2008,31(6):8-11.
[14] Bhadra J,Abadir M S,Wang L,et al.A Survey of Hybrid Techniques for Functional Verification[C]∥Design & Test of Computers,2007:112-122.
[15] 鐘文楓.下一代芯片設(shè)計與驗(yàn)證語言:SystemVerilog(驗(yàn)證篇)[J].電子設(shè)計應(yīng)用,2008(12):61-67.
[16] 劉杰,徐偉杰,夏宇聞,等.設(shè)計驗(yàn)證中的隨機(jī)約束[J].中國集成電路,2006(11):28-31.
[17] Willamette H D L.SystemVerilog for Verification Training[M].USA:Willamette HDL,2008.
VerificationPlatformofSynchronousFIFOBasedonSystemVerilog
QIU Yu-quan,ZENG Wei,LIU Shi-wei,FENG Kun,YANG Ming-han
(College of Information Science & Technology,Chengdu University of Technology,Chengdu Sichuan 610000,China)
This paper mainly introduces the practical verification environment of synchronous FIFO based on SystemVerilog structures,which breaks through the traditional limitations in verification platform modeling,can greatly improve the efficiency of chip test and interface protocol,and can effectively reduce the risk of design. The FIFO verification platform in this paper can effectively reduce the risk of the time sequence competition between design and verification,realize verification platform reuse and automatic monitoring in verification process. The paper also describes basic verification process,and introduces some of basic rules and modeling skills combined with SystemVerilog language in the process of building verification platform.
verification process; verification platform; SystemVerilog; FIFO
TP391.8
A
1003-3114(2017)06-64-3
10. 3969/j.issn. 1003-3114. 2017.06.16
邱玉泉,曾維,劉世偉,等.基于SystemVerilog的同步FIFO的驗(yàn)證平臺搭建[J].無線電通信技術(shù),2017,43(6):64-66,96.
[QIU Yuquan,ZENG Wei,LIU Shiwei,et al. Verification Platform of Synchronous FIFO Based on SystemVerilog [J]. Radio Communications Technology,2017,43(6):64-66,96.]
2017-07-23
邱玉泉(1992—),男,碩士研究生,主要研究方向:FPGA嵌入式設(shè)計與驗(yàn)證。曾 維(1976—),男,副教授,主要研究方向:數(shù)字電路設(shè)計和模擬電路分析。