版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、SystemVerilog 講座講座 第一講第一講: SystemVerilog 基本知識基本知識夏宇聞夏宇聞 神州龍芯集成電路設計公司神州龍芯集成電路設計公司 20082008- SystemVerilog -alias const &= |= = %=- from C / C+-int globals breakshortint enum continuelongint typedef returnByte structures do-whileShortreal unions + - += -= *= /=void casting = = if-elserepeat- Verilog -
2、1995 - System Verilog RTL RTL Netlist設計效率設計效率 testbenchCo-simOverheadHDL SimultionSystemVerilogtestbench進行全面驗證的環(huán)境進行全面驗證的環(huán)境斷言斷言驗證驗證 硬件輔助的驗證硬件輔助的驗證覆蓋覆蓋 測試平臺測試平臺仿真仿真 形式化特性形式化特性提高了驗證的水平提高了驗證的水平 System Verilog RTL RTL Netlist設計效率設計效率 結構化的和用戶定義的數(shù)據(jù)類型與封裝好的接口通信.* 蘊涵的端口實例引用testbenchCo-simOverheadHDL Simultion
3、SystemVerilogtestbench使得我們有可能使用更高速度的仿真工具,加速了設計的完成進行全面驗證的環(huán)境進行全面驗證的環(huán)境斷言斷言驗證驗證 硬件輔助的驗證硬件輔助的驗證覆蓋覆蓋 測試平臺測試平臺仿真仿真 形式化特性形式化特性提高了驗證的水平提高了驗證的水平仿真檢查仿真檢查硬件輔助驗證硬件輔助驗證SystemVerilog 斷言斷言自動測試平臺自動測試平臺覆蓋測試覆蓋測試形式化驗證形式化驗證 綜合綜合抓住設計意圖與每個設計和驗證工程師聯(lián)絡學習周期短仿真檢查仿真檢查硬件輔助驗證硬件輔助驗證 #0 阻塞賦值 計算非阻塞表達式 的RHS 連續(xù)賦值$display命令 更新非阻塞表達式的LH
4、S 阻塞賦值 更新原語的輸入和的輸出, $monitor系統(tǒng)命令 $strobe 系統(tǒng)命令 語句激活 語句暫?;顒?非阻塞賦值 監(jiān)視來自上一個時隙Verilog-2001時隙被分成4等級區(qū)域新的名稱將”延遲”事件區(qū)域去下一個時隙如何才能簡化這個隊列?指導原則No.8:不要用#0延遲未初始化的變量 = X未初始化的線網(wǎng) = Z與Verilog-2001相同未初始化的變量 = 0未初始化的線網(wǎng) *= 0SystemVerilog新添加的reg r; / 4態(tài),Verilog-2001(位寬可變)數(shù)據(jù)類型integer i; /4態(tài),Verilog-2001(32位)有符號數(shù)據(jù)類型logic w;
5、/4態(tài),(位寬可變) 0,1,x,或者 zbit b; /2態(tài),(位寬可變) 1位 0 或 1byte b8; /2態(tài),(8位)有符號整型數(shù)shortint s; /2態(tài),(16位)有符號整型數(shù)int i; /2態(tài),(32位)有符號整型數(shù)longint l; /2態(tài),(64位)有符號整型數(shù)注:* -bit 類型既可以用于變量也可以用于線網(wǎng)。另外還加入了其他一些數(shù)據(jù)類型SystemVerilog 新添加的數(shù)據(jù)類型reg 15:0 r16;logic 15:0 w16;bit 15:0 b16; reg, logic和 bit數(shù)據(jù)類型位寬可以改變對同一變量既進行連續(xù)賦值又進行過程賦值是非法的,不允
6、許的。- 在在SystemVerilog中:中:logic和和reg類型類型是一致的(類似于是一致的(類似于Verilog中中wire和和tri類類型是一致的)型是一致的)logic 是4態(tài)數(shù)據(jù)類型的變量bit 相當于2態(tài)數(shù)據(jù)類型的變量或線網(wǎng)ifdef STATE2 typedef bit bit_t; /2 state else typedef logic bit_t; /4 stateendifdefines.vhifdef STATE2 typedef bit bit_t; /2 state else typedef logic bit_t; /4 stateendifdefines.v
7、hmodule tb; bit_t q, d, clk, rst_n; dff u1(.q(q), .d(d), .clk(clk), .rst_n(rst_n);initial begin /stimulus endendmoduletb.vmodule dff( output bit_t q, input bit_t d, clk,rst_n); always (posedge clk), if (!rst_n) q=0; else q =d;endmoduledff.vverilog_cmd define.vh tb.v dff.vverilog_cmd define.vh tb.v d
8、ff.v +define+STATE2確省,為4態(tài)邏輯值仿真只用 2態(tài)邏輯值,仿真速度快功能相當于VHDL中的std_ulogic類型,很有效率與VHDL中的std_logic類型沒有功能可比較的類型ifdef STATE2 typedef bit bit_t /2-態(tài)else typedef logic bit_t;/4-態(tài)endif define.vhifdef STATE2 typedef bit bit_t /2-態(tài) typedef ? tri_t /2-態(tài)else typedef reg bit_t;/4-態(tài) typedef wire tri_t;/4-態(tài)endif define.v
9、h無多驅動器的2態(tài)類型 - 也許下一個版本的SystemVerilog能得到修正沒有容易的std_ulogic 和std_logic 之間切換的等價語句 always * orf1(a) ;等價于:always (a) 等價于:always (a,b,c) void 函數(shù)的行為類似于0延遲的任務等價于:always (a) Verilog 任務 b 和 c 是隱含的輸入always * ort1(a) ;等價于:always (a) b 和 c 是隱含的輸入-或者-或者-只有always_comb 對函數(shù)的內容的變化是敏感的無正跳變沿觸發(fā)時鐘信號(clk)無負跳變沿觸發(fā)時鐘信號(clk)目前對
10、綜合器來說該語法是非法的module ddrff ( output bit_t q, input bit_t d, clk, rst_n ); always_ff (clk, negedge rst_n) if (! rst_n) q = 0; else q = d;endmodule去掉正跳變沿是否可以允許用正負兩個沿觸發(fā)?always_ff 顯示設計者的意圖這能綜合成這能綜合成ASIC廠商庫中的廠商庫中的雙數(shù)據(jù)率(雙數(shù)據(jù)率(DDR)時序邏輯嗎?時序邏輯嗎?full_case parallel_case看似“完全一樣”的語句對應的實體是不同 的這些指令告訴綜合編譯器,編寫的設計代碼有些地方和
11、仿真器理解的有些不同綜合前與綜合后的仿真可能存在一些差別unique casepriority caseunique ifpriority if 使得仿真器、綜合器和使得仿真器、綜合器和形式化驗證工具的行為形式化驗證工具的行為變得一致變得一致priority case: - full_case full_case的仿真和綜合所有的可能都已經(jīng)定義了,任何其他的可能都是錯誤的priority case (1b1)irq0: irq= 4b1 0;irq1: irq= 4b1 1;irq2: irq= 4b1 2;irq3: irq= 4b1 3;endcasepriority if: - 所有的分
12、支被指定后不需要最后結束的elsepriority if (irq0) irq = 4b1;else if (irq1) irq = 4b2;else if (irq2) irq = 4b4; else if (irq3) irq = 4b8;priority case (1b1)irq0: irq= 4b1 0;irq1: irq= 4b1 1;irq2: irq= 4b1 2;irq3: irq= 4b1 3; default: irq = 0;endcasepriority if (irq0) irq = 4b1;else if (irq1) irq = 4b2;else if (irq
13、2) irq = 4b4; else if (irq3) irq = 4b8;else irq = 4b0;irq0到irq3中至少有一個必定為高否則仿真就出現(xiàn)運行錯誤default 或 最后的else語句使得 priority關鍵字無效unique case: - full_case / parallel_case full_case 和parallel_case的仿真和綜合所有的可能都已經(jīng)定義了,任何其他的可能都是錯誤的unique case (1b1)sel0: muxo = a;sel1: muxo = b;sel2: muxo = c;endcaseunique if: - full
14、_case/ parallel_case unique if (sel0) muxo = a;else if (sel1) muxo = b;else if (sel2) muxo = c; if sel = = 3 b011 仿真出現(xiàn)運行錯誤任何沒有預料到的sel值將使仿真出現(xiàn)運行錯誤unique case (1b1)sel0: muxo = a;sel1: muxo = b;sel2: muxo = c;default: muxo = x;endcaseunique if (sel0) muxo = a;else if (sel1) muxo = b;else if (sel2) muxo
15、 = c;else muxo = x;對沒有預料到的sel值不會出現(xiàn)仿真運行錯誤unique仍舊測試覆蓋的條件未注明的地方輸出:rd = 0; ds = 0;IDLEREADDONEDLYrd = 1rd = 1ds= 1go= 0go= 1ws= 1ws= 0Verilog 沒有枚舉類型變量參數(shù)被用于有限狀態(tài)機的設計仿真差錯訣竅綜合優(yōu)化訣竅輸出方法1(連續(xù)賦值)初始化確省值的賦值初始化輸出值到確省態(tài)輸出方法2(always 塊賦值)匿名的2態(tài) 整型(int)變量enum red, yellow,green light1,light2;enum bronze=3, silver,gold me
16、dal;enum a=0, b=7, c, d = 8 alphabet;enum bronze=4h3, silver,gold medal;silver = 4, gold = 5;silver = 4h4, gold = 4h5;語法錯誤(隱含)c= 8, (明確)d = 8;traffic_light = 0 (“red”)traffic_light = 2 (“green”)無指定值的抽象枚舉名(值可以在以后指定)枚舉變量state 和 next 未注明的地方輸出:rd = 0; ds = 0;IDLEREADDONEDLYrd = 1rd = 1ds= 1go= 0go= 1ws=
17、 1ws= 0逗號把括在內的枚舉名分隔開來 枚舉關鍵字未指定數(shù)據(jù)類型,即假定數(shù)據(jù)為整型確省類型 用戶對枚舉名 賦值枚舉的測試和賦值逗號分開的敏感列表*表示組合邏輯的敏感列表(簡化的語法,減少RTL錯誤)抽象的枚舉名x 賦值在仿真無關項優(yōu)化綜合和調試時非常有用指定4態(tài)數(shù)據(jù)類型 允許數(shù)據(jù)值為x 或者z從抽象到具體需要做的唯一修改就是在枚舉定義處賦值賦值的枚舉值無論對仿真器和綜合器以及形式化驗證工具 都相當于full_case parallel_case允許更多的類似lint的代碼檢查加入四狀態(tài)變量的枚舉類型,允許合法狀態(tài)賦值和x狀態(tài)賦值以未定義的抽象狀態(tài)開始有利于抽象有利于觀察波形有利于調試和綜合
18、確切標準的波形顯示能力正在定義中比Verilog的$monitor系統(tǒng)任務容易編寫代碼顯示枚舉名還是ASCII字符?顯示2進制數(shù)字?獨立的迭代變量聲明本地迭代變量聲明自動遞加本地迭代變量是自動變量退出循環(huán)后就不再存在Verilog-2001SystemVerilog顯式的遞加a31:0a0:31a31:0i1i0syy31:0sSystemVerilog 還增加了一個do-while循環(huán)(底測試循環(huán))大型大型ASIC頂層模塊的端口連接非常麻煩而且頂層模塊的端口連接非常麻煩而且MultOp1 regMultOut regAccumulatorMUXALU (32bit)Multiplier16
19、data16321616161616323232323232alu_outaccmultoutbsaccalu_inen_accalu_op2:0muxselld_multop1ld_multoutld_accld_shften_shftshft_lshftbs_lshft4:0ld_bsmop1mult32MultOp1 regMultOut regMultiplier端口名的匹配只需要列出一次具備所有按端口名連接的優(yōu)點MUXALU (32bit)Accumulator 代碼更簡練!本風格重點表達端口出現(xiàn)不同的地方MUXALU (32bit)Accumulator 代碼更簡練MultOut
20、regMultOp1 regMultiplierinst u1(, .data(data7:0),.);inst u2(, .data(pdata), .);inst u3(, .berr( ), .);注意:比Verilog2001有更強大的端口連接描述,表述更簡潔31行代碼680個字符按位置的端口連接按名字的端口連接43行代碼1020個字符.名字的隱含端口連接32行代碼757個字符.*的隱含端口連接23行代碼518個字符module drivera (output 7:0 y,input 7:0 a,input ena); assign y = ena? a : 8bz;endmodule
21、 n如果端口標識符相同很容易造成連接錯誤 - 出錯后很難發(fā)現(xiàn)module driverc (output 7:0 y,input 7:0 c,input ena); assign y = ena ? c : 8bz;endmodule module driverd (output 7:0 y,input 7:0 c,input ena); assign y = ena? d : 8bz;endmodule module driverb (output 7:0 y,input 7:0 b,input ena); assign y = ena? b : 8bz;endmodule 使能信號名ena
22、都相同abcenbdenceneenasel1sel2y想設計的邏輯module drivera (output 7:0 y1,input 7:0 a,input ena);module driverc (output 7:0 y3,input 7:0 c,input ena);module driverd (output 7:0 y4,input 7:0 c,input ena);module driverb (output 7:0 y2,input 7:0 b,input ena);abcenbdenceneenasel1sel2y新的SystemVerilog關鍵字alias modul
23、e ena_decode (output reg ena, enb,enc, ene,input 1:0 sel);.module onehot_busmux (output 7:0 y,input 7:0 a,b,c,d,input 1:0 sel);wire ena,enb,enc,ene;wire 7:0 y1,y2,y3,y4;alias y=y1=y2=y3=y4;ena_decode u0(.*);drivera u1(.*); drivera u2(.*, .ena(enb);drivera u3(.*, . ena(enc); drivera u4(.*, .ena(ene);
24、endmoduley,y1,y2,y3,y4都是別名連接在一起用.* 縮短了實例端口的連接合法的工具開發(fā)者很害怕這一點.*的端口連接把所有沒有必要的麻煩都清除了只列出端口連接的例外情況即可所有端口都是隱含連接的bit a 3:0;bit 3:0 p ;bit 15:0 memory 1023:0;initial beginmemory i = memoryi;memory i 15:8 = 0;endbit 1023:0 15:0 vframe;always (vcmd ) if (vcmd =INV) vfram = vframe;打包的索引可以分塊可以對整個存儲器進行操作 未用a0未用a1
25、未用a2未用a3未用p0p1p2p37:02:01:03:07:02:01:03:07:02:01:03:07:02:01:03:0用名稱用矢量位置struct addr_t src_adr; addr_t dst_adr; data_t data; pkt;initial begin pkt.src_adr = src_adr; if(pkt.src_adr = = node.adr); .end把src_adr值 賦給pkt結構中的src_adr區(qū)把node結構中的adr區(qū)與pkt結構中的dst_adr區(qū)做比較typedef logic 7:0 byte_t;typedef struct
26、packed logic 15:0 opcode;logic 7:0 arg1;logic 7:0 arg2; cmd_t;typedef union packed byte_t 3:0 bytes;cmd_t fields; instruction_u;instruction_u cmd;打包的結構打包的聯(lián)合cmd31:0cmd.fields.opcode15:0cmd.fields.arg17:0cmd.fields.arg27:0cmd_t 的區(qū)域cmd.byte1cmd.byte0cmd.byte2cmd.byte3typedef logic 7:0 byte_t;typedef st
27、ruct packed logic 15:0 opcode;logic 7:0 arg1;logic 7:0 arg2; cmd_t;typedef union packed byte_t 3:0 bytes;cmd_t fields; instruction_u;instruction_u cmd;打包的聯(lián)合使得我們能方便地用不同名稱引用同一個數(shù)據(jù)cmd 現(xiàn)在等于32hDEADBEEFinitial begincmd.fields.opcode = 16hDEAD;cmd7:0 = 8hEF;cmd.bytes1 = 8hBE;不需要測試數(shù)據(jù)類型DEAD1110 1111BE 數(shù)據(jù)映射到所有
28、成員 D E A D B E E FDEADDEADBE BE 1110 11111110 1111這是同一個打包的數(shù)據(jù)結構接口信息的封裝添加了傳遞測試平臺和斷言值所需要的端口SystemVerilog 的設計的設計總線總線總線Verilog-2001風格風格 的設計的設計復雜的信號連接n在塊中重復的總線協(xié)議n通過層次很難添加信號通信封裝在接口中n減少出錯的機會容易修改n顯著縮短代碼節(jié)省編寫時間n能建立高效交易模型n允許自動化的塊驗證接口總線sig1sig2read()write()Assertint i;logic 7:0 a;interface intf; int i; logic 7:0
29、 a;endinterface: intfint i;logic 7:0 a;typedef struct int i; logic 7:0 a; s_type; 接口就是一束連接線正象結構是一束變量一樣接口改變了但是被連接的模塊并未改變還未建立端口實例化接口接口類型聲明inftmod_am1mod_bm2inftwtop引用實例mod_a 和 mod_b給mod_a 和mod_b添加接口mod_am1mod_bm2inftwtopintfi1intfi2接口類似于跨騎在兩個模塊上的一個模塊mod_am1mod_bm2infti1-w-i2top接口實例w在mod_a中被稱為i1,在mod_b
30、中被稱為i2接口也能包含模塊端口(模塊端口將在以后討論)接口類型聲明mod_am1mod_bm2infti1-w-i2top接口實例引用具體化的接口實例w在mod_a中被稱為i1,在mod_b中被稱為i2引用定義的接口類型 被引用接口的本地訪問名 接口類型聲明inftw top接口實例引用聲明并引用了接口實例,聲明并引用了接口實例,但并未訪問過具體接口實但并未訪問過具體接口實例的線網(wǎng)和變量例的線網(wǎng)和變量, 這樣做這樣做是合法的,但沒有什么是合法的,但沒有什么用處用處.接口類型聲明mod_am1mod_bm2 錯誤:錯誤:1)聲明了接口)聲明了接口2)引用了接口)引用了接口3)但接口從未實例化過
31、)但接口從未實例化過引用了定義的接口類型 被引用接口的本地訪問名 infti1 infti2 ?接口intf聲明 模塊端口括號中列出的接口b引用了接口實例中聲明的線網(wǎng)和變量在模塊內引用了接口實例,聲明了一組線網(wǎng)和變量a.s12a.s11a.s10a.s2a.s3b.s12b.s11b.s10b.s2b.s3yy這個blk_if 接口a有一個隱含的時鐘輸入a.s12a.s11a.s10a.s2a.s3(input clk)qa.clku1 引用實例模塊m3a.s12a.s11a.s10a.s2a.s3(input clk)a.clku1 引用實例模塊m4u1.a.q=b_if.qmodport
32、s inputModport 定義了模塊接口s,其中s1,s2為輸入,q為輸出a.qa.s2 a.clku1 引用實例模塊m5u1.a.q=b_if.qmodport d 的輸入Modport 定義了模塊接口d, 其中s1,s2為輸入,q為輸出a.qb_if.s2modport d 的輸出a.s2 a.clku1 引用實例模塊m5u1.a.q=b_if.q把測試模塊中的任務放在接口中定義a.qb_if.s2從接口調用寫任務b_if.q不能對這些接口信號中的任何一個進行過程性賦值。(全部都是線網(wǎng)類型,沒有變量類型的)n一般情況下,接口將把模塊的輸出一般情況下,接口將把模塊的輸出連接到另一模塊的輸
33、入連接到另一模塊的輸入 - 輸出可能是過程性的或者連續(xù)性驅動的輸出可能是過程性的或者連續(xù)性驅動的 - 輸入是連續(xù)性驅動的輸入是連續(xù)性驅動的n既然接口是把輸出與輸入連接起來既然接口是把輸出與輸入連接起來 - 輸出常由過程性語句賦值輸出常由過程性語句賦值 - 即使輸出是由連續(xù)賦值語句指定的,當即使輸出是由連續(xù)賦值語句指定的,當它們被連接到不同模塊時,它也往往被轉它們被連接到不同模塊時,它也往往被轉變成過程性賦值變成過程性賦值n雙向和多驅動線網(wǎng)雙向和多驅動線網(wǎng) - 該類連接在接口定義中必須聲明為線網(wǎng)該類連接在接口定義中必須聲明為線網(wǎng)類型(類型(wire)雙向數(shù)據(jù)總線斷言將在以后討論斷言將在以后討論后
34、面簡述后面簡述下載下載SystemVerilog LRM自己學習自己學習final begin if (ERROR_CNT = 0) & (VECT_CNT!=0) begin $write (“n TEST PASSED- %0d vector”, VECT_CNT); $write (“n - %0d passednn”, pass_CNT); end else begin $write (“n TEST FAILED- %0d vector”, VECT_CNT); $write (“n - %0d passed- %d failed nn”, pass_CNT, ERROR_CNT);
35、end待所有生成的子過程結束后待所有未決的PLI調用被取消后結束塊才執(zhí)行$finish 命令事件隊列變?yōu)榭战K止所有程序塊(產生隱含的$finish)PLI執(zhí)行tf_dofinish()或vpi_control(vpiFinish.)final 塊不允許有延遲當前時隙 #0 阻塞賦值 計算非阻塞表達式 的RHS 連續(xù)賦值$display命令 更新非阻塞表達式的LHS 阻塞賦值更新原語的輸入和 輸出 $monitor系統(tǒng)命令 非阻塞賦值 觀察來自上一個時隙SystemVerilog時隙被分成11個等級區(qū)域(7個Verilog 和4個PLI區(qū))去下一個時隙 放置SV新命令的區(qū)域非阻塞賦值完成觀察后準
36、備(preponed) 預備啟動 準備非阻塞賦值 語句重新激活 延遲SV新的放置PLI命令的區(qū)域 $strobe系統(tǒng)命令 語句暫?;顒?語句激活PLIPLIPLIPLI 放置SV新命令的區(qū)域計算斷言 執(zhí)行測試平臺命令 非阻塞賦值 觀察來自上一個時隙 #1 step去下一個時隙 放置SV新命令的區(qū)域準備(preponed) 語句重新激活 延遲 語句暫?;顒?語句激活用于采樣和驗證輸入clocking bus (posedge clk) default input #10ns output #2ns; input data, ready, enable = top.mem1.enable; out
37、put done; output negedge ack; input #1step addr;endclockingnSystemVerilog增加了一個時鐘塊用于: - 為了驗證所做的采樣 - 驅動激勵新的clocking 和endclocking關鍵詞由缺省值指定的輸入是在時鐘clk正跳變沿前10ns采樣的 由缺省值指定的輸出是在時鐘clk正跳變沿后2ns時驅動的 采樣信號的輸入對驅動的輸出例外的輸出(該信號由時鐘clk的負跳變沿驅動)例外的輸入(在時鐘clk的正跳變沿前1step采樣該信號) 指定了同步采樣和驅動時間: - 輸入歪斜是為了采樣 - 輸出歪斜是為了驅動 - 缺省的輸入歪斜
38、是1step缺省的輸出歪斜是0信號在這兒采樣指定的時鐘域時鐘 常用(posedge clk) 信號驅動在這兒輸出的歪斜當輸入被采樣并當激勵被驅動時的時鐘塊包裝輸入的歪斜clockinputoutput clocking fifo (posedge wclk) default input #1step output negedge); input wfull ; output wdata, winc, wrst; endclocking wfull信號在wclk正跳變沿前面#1step處采樣時鐘事件是wclk的正跳變沿缺省情況下,采樣輸入正好在wclk的正跳變沿前一步輸入的歪斜wclkwfull
39、wdata,winc,wrst輸出的歪斜(negedge wclk)wdata,winc,wrs在(negedge wclk)被驅動缺省情況下,在wclk的負跳變沿時刻,驅動FIFO的激勵 測試模塊編寫時:fifo.wfull fifo.wdatafifo.winc fifo.wrst wclk的正沿wfull信號在wclk正跳變沿前#1step 處采樣wclkwfullwdata,winc,wrst輸出的歪斜(negedge wclk)wdata,winc,wrs在(negedge wclk)被驅動preponed wclk的負沿Reactive preponed Active Inacti
40、ve NBA ObservedPostpondReactive Active Inactive NBA ObservedPostpondwclk 前一步#1step 采樣驅動 等待1個wclk周期然后驅動wdata n指定一個缺省時鐘指定一個缺省時鐘 default clocking tb.fifo.wclkn每個模塊、接口、程序只允許一個缺省時鐘每個模塊、接口、程序只允許一個缺省時鐘n描述周期延遲的句法描述周期延遲的句法 # # 5; /等待等待5個周期個周期 # 1 fifo.wdata = 8hff; # 2; fifo.wdata = 8hAA; fifo.wdata = #2 d;
41、等待2個缺省的時鐘周期,然后驅動wdata 記住d的值 ,然后在2個wclk時鐘周期后驅動wdata n目的:標識驗證用的代碼段目的:標識驗證用的代碼段 default clocking tb.fifo.wclkn 一段不同與模塊的程序一段不同與模塊的程序 - 只允許使用只允許使用initial 塊塊 - 特殊的語法特殊的語法 在重新激活區(qū)執(zhí)行在重新激活區(qū)執(zhí)行 設計設計時鐘時鐘/斷言斷言 程序程序RTL 設計 時鐘和斷言 Reactive preponed Active Inactive NBA ObservedPostpondprogram name() ; /type, func, cla
42、ss,clocking ; initial endprogramDirect Programming Interface直接編程接口直接編程接口n使用更加便利使用更加便利n允許直接調用允許直接調用C C函數(shù)函數(shù)n提供了類似于提供了類似于C/C+C/C+的高級數(shù)據(jù)類型的高級數(shù)據(jù)類型不需要用戶成為PLI專家丟了什么?C程序不能調用SystemVerilog任務(而Superlog允許)來自于C程序不消費時間已提出建議允許C程序調用SystemVerilog任務好!不好!不好!nSystemVerilog 3.1-26節(jié)中有詳細的描述節(jié)中有詳細的描述n直接編程接口(直接編程接口(DPI)的雙方都是完
43、全獨立的)的雙方都是完全獨立的 - SystemVerilog 不必分析不必分析 C 的代碼的代碼 - C 編譯器也不必分析編譯器也不必分析SystemVerilog的代碼的代碼n輸入的函數(shù)輸入的函數(shù) - 用用SystemVerilog 調用的調用的C 函數(shù)函數(shù) - 輸入的函數(shù)必須聲明輸入的函數(shù)必須聲明 import “DPI” function .; n輸出的函數(shù)輸出的函數(shù) -用用C調用的調用的SystemVerilog 函數(shù)函數(shù) - 輸入的函數(shù)必須聲明輸入的函數(shù)必須聲明 export “DPI” c_identifier = function function_identifier; n所
44、有所有C 和和 SystemVerilog 函數(shù)必須在零時間內完成函數(shù)必須在零時間內完成在26節(jié)中介紹了多種形式和選擇可選擇變量nSystemVerilog 有一個內部的有一個內部的C接口接口 - 有效率的有效率的RTL建模和仿真建模和仿真 - 有效率的門級仿真有效率的門級仿真 - SystemC 在進行在進行RTL和門級仿真時效率低下和門級仿真時效率低下 - 如果用戶想嚴格地用如果用戶想嚴格地用C編程,也可以不需要用編程,也可以不需要用SystemC n如果用戶必須用如果用戶必須用C+編寫軟件,他也許想使編寫軟件,他也許想使SystemC 與與SystemVerilog交互交互 - 軟件出身
45、的工程師喜歡用軟件出身的工程師喜歡用SystemC - SystemC 具有具有C+的操作過載、指針等所有的強大功能的操作過載、指針等所有的強大功能 - SystemC有幫助庫,可以在信號級和時序細節(jié)上給予幫助有幫助庫,可以在信號級和時序細節(jié)上給予幫助 - 大多數(shù)工作將用大多數(shù)工作將用C+來做來做 這正是大多數(shù)工程師想讓Verilog仿真器nSystemVerilog 不支持指針不支持指針 - 通過改變指針來改變值通過改變指針來改變值 -很難檢測事件很難檢測事件nSystemC提供了常用的提供了常用的C語言語法,這也許得到行為語言語法,這也許得到行為 綜合工具的支持綜合工具的支持 對行為綜合器
46、廠商來說只支持C編程風格比較容易 nDPI(直接編程接口)不需要(直接編程接口)不需要PLI( (編程語言接口編程語言接口) ) - DPI 使得使得SystemVerilog與與C代碼的聯(lián)合仿真變得容易代碼的聯(lián)合仿真變得容易 - 可以把編譯后的可以把編譯后的C目標碼直接連接到目標碼直接連接到SystemVerilog的仿真器的仿真器n與與SystemVerilog一起運行的一起運行的C模型運行速度快模型運行速度快 - 沒有沒有PLI接口來降低接口來降低SystemVerilog與與C之間的通信之間的通信nSystemVerilog仍然支持仍然支持PLI(編程語言接口),編程語言接口), 因而受到歡迎因而受到歡迎EDA工具仍舊用PLI來探索結構,并與設計交互 新出版的有關SystemVerilog斷言(檢測)的書書中的例子用到: SystemVerilog斷言(SVA)特性指定語言(PSL)開放驗證庫(OVL)斷言斷言是設計者企圖使所設計的電路邏輯具有某種行為的聲明 750個錯誤在加斷言前就被查出在設計代碼加斷言后一周內,發(fā)現(xiàn)錯誤的速率快了三倍斷言發(fā)現(xiàn)了剩余錯誤中的50%斷言在全芯片查錯中最有用 可在設計過程的早期由斷言發(fā)現(xiàn)錯誤
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租房退房要求打掃衛(wèi)生的合同(2篇)
- 咨詢服務類合同(2篇)
- 人教A版湖南省名校聯(lián)考聯(lián)合體2023-2024學年高一上學期期末考試數(shù)學試題
- 初中體育+障礙跑+作業(yè)設計
- 2023年國家公務員錄用考試《申論》真題(副省卷)及答案解析
- 第4課《一著驚海天-目擊我國航母艦載戰(zhàn)斗機首架次成功著艦》八年級語文上冊精講同步課堂(統(tǒng)編版)
- 西南林業(yè)大學《操作系統(tǒng)原理》2022-2023學年期末試卷
- 西京學院《新媒體交互設計》2022-2023學年第一學期期末試卷
- 獲獎過程說明附件8
- 西京學院《工程地質》2021-2022學年第一學期期末試卷
- 工程造價咨詢服務收費標準--魯價費發(fā)〔2007〕205號
- 第一次工地會議內容與議程
- 工作面安裝瓦斯監(jiān)控安全技術措施
- (2021更新)國家開放大學電大《課程與教學論》形考任務4試題及答案
- 單門門禁一體機操作流程
- 施工現(xiàn)場安全知識答題試卷-附答案版4頁
- 腸套疊實用教案
- 學校總務處行事歷
- 勝利油田鉆完井液技術現(xiàn)狀及發(fā)展趨勢鉆井院
- 通信工程勘察設計費取費標準[整理版]
- 墩身外觀質量缺陷與防治
評論
0/150
提交評論