?

基于SystemVerilog的同步FIFO的驗證平臺搭建

2017-10-20 05:58邱玉泉劉世偉楊明翰
無線電通信技術 2017年6期
關鍵詞:時鐘代碼波形

邱玉泉,曾 維,劉世偉,馮 坤,楊明翰

(成都理工大學 信息科學與技術學院,四川 成都610000)

基于SystemVerilog的同步FIFO的驗證平臺搭建

邱玉泉,曾 維,劉世偉,馮 坤,楊明翰

(成都理工大學 信息科學與技術學院,四川 成都610000)

針對于傳統驗證平臺利用Verilog搭建的驗證平臺效率低,準確度低的局限性,提出了一種基于SystemVerilog系統級語言的驗證平臺建模方法,可以有效地降低復雜度和設計風險。由于FIFO在大多數工程中利用率極高,也極易出現問題,通過對FIFO模塊進行驗證平臺建模,可以有效地降低設計與驗證的時序競爭風險,實現驗證平臺的復用和驗證過程中的自動監測,并且在搭建驗證平臺的過程中闡述了基本的驗證流程,以及結合SystemVerilog語言介紹了一些基本建模規則和技巧。

驗證流程;驗證平臺;SystemVerilog;FIFO

0 引言

以往在采用Verilog搭建測試環境時,設計者難以對測試環境進行分層設計,往往將大部分測試組件放在一個模塊中[1]。SystemVerilog則采用面向對象編程(Object Oriented Programming,OOP)的思想來完成驗證平臺的分層建模。由于FIFO的功能并不復雜,因此將其中的一些放在一個組件來完成相關的功能[2]。

FIFO是一種先進先出的數據緩存器,根據工作時鐘域,可以將FIFO分為同步FIFO和異步FIFO。同步FIFO是指讀時鐘和寫時鐘為同一個時鐘,在時鐘沿來臨時同時發生讀寫操作,而異步FIFO指讀寫時鐘不一致,讀寫時鐘是相互獨立的[3]。

1 FIFO測試驗證與分析

該FIFO使用16×8的FIFO,其接口包括datain寫入數據、dataout讀出數據、FIFO_push寫入使能信號、FIFO_o_valid讀出使能信號、rst復位信號、clk時鐘信號、FIFO_rdy_n數據丟失測試信號以及FIFO_almost_full接近滿指示信號[4]。

該FIFO包括正常寫入寫出情況、輸出數據丟失情況。數據接近滿時警告指示,數據滿時無法寫入。通過上述功能的描述,可以制定以下驗證計劃[5]:

根據FIFO的功能要求,制定相應的驗證計劃。其驗證計劃如下:① 驗證FIFO是否能夠正常讀寫,其FIFO讀入數據與寫出數據一致;② FIFO接近滿時,fifo_almost_full拉高提示快滿的指示;③ 在丟失數據的情況下,判斷FIFO是否正常完成從FIFO中提取數據,進行輸出,保證輸出的數據不被丟失。

2 搭建驗證平臺

根據FIFO的功能不復雜和滿足通用性的原則,搭建基于SystemVerilog的FIFO通用驗證平臺,可以滿足基本FIFO的功能驗證?,F根據FIFO的功能以及為了驗證代碼的可維護性和可讀性以及擴展性,將驗證代碼分為頂層模塊、接口模塊和測試模塊3部分[6]。

2.1 頂層模塊(TOP)

頂層模塊包括時鐘產生以及DUT例化程序。若在后續的FIFO驗證過程,需要增加FIFO的一些其他功能端口信號,只需在該模塊增加端口定義即可。時鐘的頻率也可以在此模塊修改參數模擬實際情況FIFO的頻率[7]。

時鐘激勵主要程序如下[8]:其中Simulation_cylce為時鐘周期,每隔10 ns翻轉一次。

parameter simulation_cycle =20;

forever begin

#(simulation_cycle/2) SystemClock =

~SystemClock;

end

2.2 接口模塊(interface)

使用接口模塊為了提高設計復用,降低錯誤風險,SystemVerilog采用接口(interface)對多個模塊共同使用一組信號,實現封裝,使之類似總線。該模塊主要是實現連接、同步以及2個或多個塊之間的通信功能,連接了設計塊和測試平臺[9],如圖1所示。

圖1 橫跨兩個模塊的接口

本文將接口設計代碼放在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上升沿發生時都處于激活狀態[10],同時使用modport對這些信號指定方向[11]。

2.3 test模塊

該文件主要編寫所有FIFO所有情況下的驗證代碼,根據驗證計劃,主要分為正常讀入寫出情況和輸出數據丟失情況。由于同步FIFO的功能較簡單,故driver、monitor以及compare都以task的形式放在test模塊中[12]。

由于仿真是可以無限仿真的,在test中增加了對仿真時間的控制,有利于減少仿真時間,并達到需要的效果。并且在其中增加了S|vcdpluson語句,以便可以生成vdp的波形文件,若需要使用fsdb波形文件,則可以用 S|fsdbDumpfile(“xxx.fsdb”)、S|fsdbDumpvars命令[13]。

仿真時間控制命令和生成波形文件的命令如下[14]:

S|vcdpluson;

# (300000*CLK_PRIOD);

S|finish;

根據驗證計劃,FIFO正常讀寫情況下,輸入和輸出在同時鐘的控制下同步進行,FIFO不會出現空和滿的情況,其模擬這種一直輸入和輸出的時序的主要代碼如下[15]:

fifo.cb.fifo_i_data<=cnt;

tdata[cnt]<=cnt;

cnt<=cnt+1;

repeat(1) @(fifo.cb);

根據傳輸的機制,丟失數據的現象不可避免。根據FIFO的需求,該FIFO對丟失數據有相應的處理,故為了驗證其FIFO的功能正確性,現根據需求模擬出FIFO丟失數據的情況。其核心代碼如下[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

代碼中根據S|urandom_range(1,8)!=3來模擬丟失數據的幾率,此處根據實際應用場景來設置相應的概率。該FIFO具有提前警示FIFO幾乎滿的功能,當丟失數據個數超過24 h,其FIFO_almost_ful會拉高來警示FIFO快要滿了。根據DUT中的相應的設計,其Verilog代碼實現如下:

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;

在通常的情況下,經過FIFO數據量很大,通過肉眼觀察波形來檢查FIFO輸入輸出的數據是否正確,其效率極低。特別是在信號繁多,數據和協議復雜的情況下,更需要一種機制來自動檢測DUT的功能和數據正確性。其monitor就是實現這種自動監控輸出的機制,使驗證更加高效可靠。以下是FIFO的monitor核心代碼實現:

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

當monitor監測到輸出時的有效數據時,需要通過將輸出和輸入數據進行自動比較,來檢測FIFO在傳輸數據的過程是否改變了相應的值。其compare進行比較的核心代碼實現如下[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

3 驗證結果的確認

驗證結果的確認主要通過自動監測確認和波形確認,根據驗證結果來判斷FIFO設計是否符合設計要求。

為了方便波形觀察,本文采用計數的方式對FIFO進行輸入。其FIFO正常讀寫情況下波形如圖2所示,可以觀察到波形中的輸入輸出數據來初步確定FIFO滿足設計要求。

圖2 FIFO正常讀寫波形圖

圖3是在FIFO在丟失數據的情況下,可以看出FIFO在丟失數據時能夠將數據保存下來,等待下一時刻有效時將丟失數據重新發送出去。

圖3 FIFO丟失數據波形圖

當丟失的數據超過24 h,fifo_almost_full幾乎滿信號拉高,如圖4所示。

圖4 幾乎滿信號波形圖

根據monitor和compare的代碼實現,其自動監測部分結果如下,通過打印的消息可得出結論,該FIFO設計滿足功能的實現。

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------------

4 結束語

在此,介紹了使用SystemVerilog進行驗證平臺建模的一般原則和技巧,以及面對建模過程中使用的一些接口,將自動檢測等新技術用于同步FIFO驗證平臺的建模中,并使用VCS仿真驗證工具進行檢驗。結果證明,使用這些建模技術的設計的驗證平臺,很容易完成代碼的復用和驗證過程中的自動監測。

[1] 張明.Verilog HDL實用教程[M].成都:電子科技大學出版社,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存儲器在數字信號源中的應用[J].電子技術,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 驗證方法學[M].夏宇聞,楊雷,陳先勇,等,譯.北京:北京航空航天大學出版社,2007.

[8] 張春,麥宋平,趙益新,譯.SystemVerilog測試驗證平臺編寫指南[M].北京:科學出版社,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] 常勇,申敏.一種基于事務的SoC功能驗證方法[J].微計算機信息,2008,24(2):137-139.

[13] 閆沫,張媛.基于SystemVerilog語言的設計驗證技術[J].現代電子技術,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] 鐘文楓.下一代芯片設計與驗證語言:SystemVerilog(驗證篇)[J].電子設計應用,2008(12):61-67.

[16] 劉杰,徐偉杰,夏宇聞,等.設計驗證中的隨機約束[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的驗證平臺搭建[J].無線電通信技術,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嵌入式設計與驗證。曾 維(1976—),男,副教授,主要研究方向:數字電路設計和模擬電路分析。

猜你喜歡
時鐘代碼波形
別樣的“時鐘”
古代的時鐘
用于SAR與通信一體化系統的濾波器組多載波波形
創世代碼
創世代碼
創世代碼
創世代碼
有趣的時鐘
Pareto最優稀疏頻率雷達波形設計
時鐘會開“花”
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合