1.$width語法
在verilog中,$width是時(shí)序檢查函數(shù),用于檢查脈沖的位寬是否符合要求。
$width ( reference_event , timing_check_limit , threshold [ , [ notify_reg ] ] ) ;
reference_event代表一個(gè)上升沿(下降沿)觸發(fā)事件。
語法中隱形地表達(dá)了data_event。
data event = reference event signal with opposite edge。
如果reference_event為上升沿,則最近的一個(gè)下降沿是data_event,兩者的時(shí)間間隔為脈沖寬度。
如果reference_event為下升沿,則最近的一個(gè)上降沿是data_event,兩者的時(shí)間間隔為脈沖寬度。
圖1:event示意圖[1]
圖2:參數(shù)說明[2]
?期望的場景:脈沖寬度 >= limit
?不期望的場景:
?產(chǎn)生timing violation場景的:threshold < 脈沖寬度< limit
?不產(chǎn)生timing violation場景的:脈沖寬度
圖2:width檢測時(shí)序示意圖[1]
NOTE:很多時(shí)候threshold的值為0.
2.案例說明
此案例中,使用的仿真工具為VCS,limit為 6000ps。小于6000ps的脈沖位寬均產(chǎn)生了Timing violation。
threshold為2000ps,位寬小于threshold的脈沖也產(chǎn)生了Timing violation,此處檢查比協(xié)議要求得更加嚴(yán)格。
"/auto/asic/design/try/top/rtl/width_tb.v", 34: Timing violation in width_tb $width( posedge clk:1000, : 2000, limit: 6000 ); "/auto/asic/design/try/top/rtl/width_tb.v", 34: Timing violation in width_tb $width( posedge clk:5000, : 10000, limit: 6000 ); $finish called from file "/auto/asic/design/try/top/rtl/width_tb.v", line 10. $finish at simulation time 100000 V C S S i m u l a t i o n R e p o r t
module width_tb; reg clk; initial begin $fsdbDumpfile("width_tb.fsdb"); $fsdbDumpvars(0, width_tb); #100; $finish; end initial begin clk = 1'b0; #1; clk = 1'b1; #1; clk = 1'b0; #3; clk = 1'b1; #5; clk = 1'b0; #5; clk = 1'b1; #10; clk = 1'b0; #5; clk = 1'b1; #15; clk = 1'b0; end specify $width(posedge clk,6,2); endspecify endmodule
-
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110134 -
VCS
+關(guān)注
關(guān)注
0文章
79瀏覽量
9624 -
CLK
+關(guān)注
關(guān)注
0文章
127瀏覽量
17180 -
時(shí)序仿真
+關(guān)注
關(guān)注
0文章
14瀏覽量
7446
原文標(biāo)題:網(wǎng)表時(shí)序仿真,淺說$width
文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論