色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

systemverilog中的assertion用法整理

冬至子 ? 來源:Bug記錄 ? 作者:woodfan ? 2023-06-06 11:51 ? 次閱讀

時(shí)序電路講究建立時(shí)間、保持時(shí)間需要留有裕量。這也說明了,在電路中信號(hào)的順序以及之間的時(shí)序關(guān)系十分重要

如果激勵(lì)的輸入輸出不滿足設(shè)計(jì)的要求,那么測(cè)試的結(jié)果也是不可靠的。同樣,如果設(shè)計(jì)內(nèi)部不滿足要求,輸入輸出的關(guān)系也不正確。為了檢驗(yàn)這之間的關(guān)系,便引入了assertion.

參考資料可知幾點(diǎn),非時(shí)序邏輯時(shí),assertion的形式如下:

ASSERTION_TEST:
 assert (condition)
 else
  $error("check failed");

而對(duì)于時(shí)序邏輯的assertion,形式如下:

ASSERTION_TEST:
 assert
  property(
  @(posedge clk) disable iff (rst)
   condition
  )
  else
   $error("check failed");

property ASSERTION_TEST:
  @(posedge clk) disable iff (rst)
   condition
  )
endproperty

ASSERTION_ACTION: assert property (ASSERTION_TEST)

其它的一些系統(tǒng)函數(shù),操作符作用如下,可以進(jìn)參考資料查看:

圖片

那么,接下來我們就做個(gè)小測(cè)試,使用req ack的握手過程作為檢測(cè)過程。

圖片

信號(hào)的時(shí)序圖要求如上圖,握手過程為:

  1. req信號(hào)拉高,此時(shí)ack信號(hào)還是低電平
  2. 在req信號(hào)拉高后,ack信號(hào)拉高
  3. req端檢測(cè)到ack拉高,拉低req信號(hào)
  4. ack端的處理結(jié)束,檢測(cè)到req信號(hào)拉低,ack信號(hào)拉低

那么,我們簡(jiǎn)單寫一個(gè)ack應(yīng)答的模塊,內(nèi)容如下:

module req2ack(
  input  clk ,
  input  rst ,

  input  en  ,
  input  req ,
  output reg ack 
);

reg [7:0] req_arr;

always @ (posedge clk or posedge rst)
begin
 if (rst)
  req_arr <= 'd0;
 else if (en)
  req_arr <= {req_arr[5:0], {2{req}}};
end

always @ (posedge clk or posedge rst)
begin
 if (rst) 
  ack <= 1'b1;
 else if (en)
  ack <= req_arr[7] ; 
end

endmodule

req經(jīng)過8個(gè)時(shí)鐘周期和使能信號(hào)的延遲后,ack做出應(yīng)答。

tb簡(jiǎn)單寫為:

module tb;

reg clk ;
reg rst ;
reg en  ;
reg req ;
wire ack;

initial begin
 clk = 0;
 rst = 1;
 en  = 0;
 req = 0;
 #100
 rst = 0;
 en  = 1;
 #100
 req = 1;
 wait(ack);
 req = 0;
 #50
 req = 1;
 #20
 req = 0;
 #50
 $finish;
end

initial begin
 $fsdbDumpfile("tb.fsdb");
 $fsdbDumpvars;
 $fsdbDumpSVA;
end

always #10 clk = ~clk;

req2ack req_inst(
  .clk(clk) ,
  .rst(rst) ,
  .en (en ) ,
  .req(req) ,
  .ack(ack) 
);

`ifdef ASSERTION_ENABLE
 `include "tb_assertion.v"
`endif

endmodule

提供20ns的周期時(shí)鐘,使能信號(hào);以及兩次req信號(hào)拉高的模擬激勵(lì)。

assertion定義在tb_assertion.v文件中,在仿真時(shí)定義ASSERTION_ENABLE的宏,可以調(diào)用assertion檢查。

tb_assertion.v定義為:

check_req_ack_rise:
    assert property(
 @(posedge clk) disable iff (rst)
  $rose(req) |- > ##1 (req & ~ack)[*0:$] ##1 (req & ack)
 )
 else
   $error("req to ack rising edge is fail");

check_req_ack_fall:
    assert property(
 @(posedge clk) disable iff (rst)
  $rose(ack) |- > (req & ack)[*0:$] ##1 (~req & ack)[*0:$] ##1 (~req & ~ack)
 )
 else
  $error("req to ack falling edge is fail");

第一塊內(nèi)容,檢查req-ack握手過程的1,2兩步;第二塊內(nèi)容,檢查req-ack握手過程的3,4步。

$rose(req)的意思是由上文或參考資料可知,等到req信號(hào)的上升沿有效;

|->操作符表示,LHS(左側(cè)表達(dá)式)條件滿足,則在同一時(shí)刻去檢查RHS的表達(dá)式;

##1 代表延時(shí)1個(gè)時(shí)鐘周期;

(req & ~ ack)[*0:$] 代表此時(shí)req信號(hào)為高,ack信號(hào)為低的情況滿足0或多個(gè)時(shí)鐘周期;周期不確定

第一塊內(nèi)容的意思是,等到req信號(hào)上升沿,過一個(gè)時(shí)鐘周期檢查req拉高,ack為低的情況是否滿足,這個(gè)過程可能持續(xù)多個(gè)周期,不確定;然后就是ack信號(hào)拉高。檢查結(jié)束

第二塊內(nèi)容的意思是,等到ack信號(hào)上升沿,檢查req和ack的信號(hào)是否都拉高,這個(gè)過程可能持續(xù)多個(gè)周期,不確定;然后req信號(hào)拉低,ack保持,也會(huì)持續(xù)多個(gè)周期,最后ack信號(hào)也拉低。

最后,在運(yùn)行vcs時(shí),需要加入“+fsdb+sva_success -assert”

測(cè)試結(jié)果:

圖片

圖片

那么,我們對(duì)激勵(lì)稍作修改下:

initial begin
 clk = 0;
 rst = 1;
 en  = 0;
 req = 0;
 #100
 rst = 0;
 en  = 1;
 #100
 req = 1;
 wait(ack);
 #20
 req = 0;
 wait(~ack);
 #50
 $finish;
end

Assertion的結(jié)果:

圖片

這只是作為一個(gè)小例子,而且寫的過于匆忙,我相信應(yīng)該是有更好的assertion寫法,所以權(quán)當(dāng)是一次記錄的草稿內(nèi)容。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110091
  • 時(shí)序電路
    +關(guān)注

    關(guān)注

    1

    文章

    114

    瀏覽量

    21700
  • VCS
    VCS
    +關(guān)注

    關(guān)注

    0

    文章

    79

    瀏覽量

    9605
  • 時(shí)鐘信號(hào)
    +關(guān)注

    關(guān)注

    4

    文章

    448

    瀏覽量

    28568
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SystemVerilog的Virtual Methods

    SystemVerilog多態(tài)能夠工作的前提是父類的方法被聲明為virtual的。
    發(fā)表于 11-28 11:12 ?707次閱讀

    SystemVerilog的“const”類屬性

    SystemVerilog可以將類屬性聲明為常量,即“只讀”。目的就是希望,別人可以讀但是不能修改它的值。
    發(fā)表于 11-29 10:25 ?2138次閱讀

    SystemVerilog的聯(lián)合(union)介紹

    SystemVerilog ,聯(lián)合只是信號(hào),可通過不同名稱和縱橫比來加以引用。
    的頭像 發(fā)表于 10-08 15:45 ?1400次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的聯(lián)合(union)介紹

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:08 ?188次下載

    SystemVerilog的斷言手冊(cè)

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:12 ?20次下載

    SystemVerilog枚舉類型的使用建議

    SystemVerilog枚舉類型雖然屬于一種“強(qiáng)類型”,但是枚舉類型還是提供了一些“不正經(jīng)”的用法可以實(shí)現(xiàn)一些很常見的功能,本文將示例一些在枚舉類型使用過程的一些“不正經(jīng)”
    的頭像 發(fā)表于 09-01 14:20 ?1715次閱讀

    SystemVerilog可以嵌套的數(shù)據(jù)結(jié)構(gòu)

    SystemVerilog除了數(shù)組、隊(duì)列和關(guān)聯(lián)數(shù)組等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)還可以嵌套。
    的頭像 發(fā)表于 11-03 09:59 ?1604次閱讀

    SystemVerilog的package

    SystemVerilog packages提供了對(duì)于許多不同數(shù)據(jù)類型的封裝,包括變量、task、function、assertion等等,以至于可以在多個(gè)module中共享。
    的頭像 發(fā)表于 11-07 09:44 ?1260次閱讀

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同數(shù)據(jù)類型的集合。
    的頭像 發(fā)表于 11-07 10:18 ?2455次閱讀

    SystemVerilog的Shallow Copy

    SystemVerilog的句柄賦值和對(duì)象復(fù)制的概念是有區(qū)別的。
    的頭像 發(fā)表于 11-21 10:32 ?918次閱讀

    SystemVerilog的Semaphores

    SystemVerilogSemaphore(旗語)是一個(gè)多個(gè)進(jìn)程之間同步的機(jī)制之一,這里需要同步的原因是這多個(gè)進(jìn)程共享某些資源。
    的頭像 發(fā)表于 12-12 09:50 ?3376次閱讀

    SystemVerilogbind用法總結(jié)+送實(shí)驗(yàn)源碼和腳本

    bind是systemverilog中一個(gè)重要的知識(shí)點(diǎn),很多時(shí)候能夠在驗(yàn)證中發(fā)揮重要的作用,今天就針對(duì)這個(gè)知識(shí)點(diǎn)做一個(gè)梳理,希望能幫助到大家。
    的頭像 發(fā)表于 01-11 08:59 ?8803次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>bind<b class='flag-5'>用法</b>總結(jié)+送實(shí)驗(yàn)源碼和腳本

    聊聊形式驗(yàn)證的SVA

    SVA,即SystemVerilog Assertion,在simulation和Formal都有極為廣泛的應(yīng)用,這里介紹一些基本的概念和常用的語法。
    的頭像 發(fā)表于 06-14 09:31 ?1827次閱讀
    聊聊形式驗(yàn)證<b class='flag-5'>中</b>的SVA

    Systemverilog的Driving Strength講解

    systemverilog,net用于對(duì)電路連線進(jìn)行建模,driving strength(驅(qū)動(dòng)強(qiáng)度)可以讓net變量值的建模更加精確。
    的頭像 發(fā)表于 06-14 15:50 ?1573次閱讀
    <b class='flag-5'>Systemverilog</b><b class='flag-5'>中</b>的Driving Strength講解

    SystemVerilogifndef如何避免重復(fù)編譯

    `ifndef是SystemVerilog/Verilog的一種條件編譯命令,可以認(rèn)為其是"if not defined"的縮寫,其用法與`ifdef相反,他們主要用來根據(jù)其后
    的頭像 發(fā)表于 06-25 15:59 ?3260次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>ifndef如何避免重復(fù)編譯
    主站蜘蛛池模板: 国产亚洲精品久久77777| 美国z0069| 日本妞欧洲| 在线少女漫画| 国产一区二区三区四区五在线观看 | 风情韵味人妻HD| 两个人在线观看的视频720 | 国产精品亚洲电影久久成人影院| 男女边吃奶边做边爱视频| 亚洲精品蜜夜内射| 国产精品99久久久久久AV下载 | 九九精品视频一区二区三区| 入禽太深免费观看| 99国产精品免费视频| 久久vs国产| 小泽玛丽av无码观看| 不卡无线在一二三区| 免费的av不用播放器的| 一级毛片在线免费视频| 国产亚洲免费观看| 婷婷综合亚洲爱久久| 成片免费观看视频大全| 你是淫荡的我的女王| 综合一区无套内射中文字幕| 国产在线亚洲精品观| 午夜福利网国产A| 观看免费做视频| 日本午夜精品久久久无码| 999人在线精品播放视频| 恋老视频 国产国佬| 亚洲一区免费香蕉在线| 国产亚洲日韩欧美视频| 我的好妈妈8高清在线观看WWW| 成人精品亚洲| 日本六九视频| 成人国产亚洲欧美成人综合网| 女王羞辱丨vk| 99综合之综合久久伊人| 男女爽爽无遮挡午夜视频在线观看| 中文日韩亚洲欧美字幕| 老师紧窄粉嫩|