




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、SYSTEM VERILOG HARDWARE DESIGN AND MODLEING Wang JinxiangMicroelectronics Center of HIT第1頁(yè)/共40頁(yè)參考書(shū):1. Sauart Sutherland, Simon Davidmann. SystemVerilog 硬件設(shè)計(jì)及建模. 科學(xué)出版社,2007年2. IEEE Std 1800-2005, SystemVerilog Language Reference Manual LRM第2頁(yè)/共40頁(yè)主要內(nèi)容:1. 簡(jiǎn)介2. 聲明的位置3. 文本值和數(shù)據(jù)類型4. 用戶自定義和枚舉數(shù)據(jù)類型5. 數(shù)組、結(jié)構(gòu)體和
2、聯(lián)合體6. 過(guò)程塊、任務(wù)和函數(shù)7. 過(guò)程語(yǔ)句8. 層次化設(shè)計(jì)9. 接口10.設(shè)計(jì)實(shí)例:狀態(tài)機(jī)、ATM開(kāi)關(guān)11.行為級(jí)和交易級(jí)建模第3頁(yè)/共40頁(yè) 為什么要學(xué)習(xí)SystemVerilog? SystemVerilog起源 SystemVerilog針對(duì)硬件設(shè)計(jì)關(guān)鍵增強(qiáng)第1章 SystemVerilog 簡(jiǎn)介第4頁(yè)/共40頁(yè)1.1 為什么要學(xué)? Verilog, VHDL, SystemC SystemVerilog優(yōu)點(diǎn) EDA公司的支持!第5頁(yè)/共40頁(yè)1.2 SystemVerilog起源 IEEE 1364-2005 Verilog標(biāo)準(zhǔn)的擴(kuò)展 整合了SUPERLOG、VERA、C、C+及 V
3、HDL特性,同時(shí)包括了OVA和PSL斷言 SystemVerilog是設(shè)計(jì)與驗(yàn)證的統(tǒng)一的語(yǔ)言 SystemVerilog與Verilog向下兼容 SystemVerilog是由Accellera標(biāo)準(zhǔn)機(jī)構(gòu)制定第6頁(yè)/共40頁(yè)1.2.1 SystemVerilog標(biāo)準(zhǔn)歷程2002年6月:SystemVerilog 3.0(綜合)2003年5月:SystemVerilog 3.1(驗(yàn)證)2004年5月:SystemVerilog 3.1a2004年6月:Accellera捐贈(zèng)給IEEE2005年11月:IEEE 18002005 IEEE13642005(Verilog)第7頁(yè)/共40頁(yè)1.2.2
4、SystemVerilog獲得的捐贈(zèng) SUPERLOG擴(kuò)展可綜合子集CoDesign Automation Open VERA驗(yàn)證語(yǔ)言Synopsys PSL斷言IBM Open VERA斷言Synopsys DirectC和適用的應(yīng)用程序設(shè)計(jì)接口Synopsys 單獨(dú)編輯和$readmem擴(kuò)展Mentor Graphics 標(biāo)簽聯(lián)合體和高層次語(yǔ)言特征BlueSpec第8頁(yè)/共40頁(yè)1.3 SystemVerilog關(guān)鍵增強(qiáng) 設(shè)計(jì)內(nèi)部的封裝通信和協(xié)議檢查的接口 類似C語(yǔ)言中的數(shù)據(jù)類型,如int 用戶自定義類型(typedef) 枚舉類型、結(jié)構(gòu)體和聯(lián)合體 類型轉(zhuǎn)換 package 外部編譯單元區(qū)
5、域 +、-、+=等賦值操作 顯式過(guò)程塊 priority和unique修飾符 通過(guò)引用傳送到任務(wù)、函數(shù)和模塊第9頁(yè)/共40頁(yè) package定義及從package中導(dǎo)入定義 $unit編譯聲明空間未命名塊中的聲明增強(qiáng)的時(shí)間單位定義第2章 SystemVerilog 聲明的位置 logic、enum、typedef、struct第10頁(yè)/共40頁(yè)2.1 package在Verilog中,變量、線網(wǎng)、任務(wù)和函數(shù)的聲明必須在module和endmodule關(guān)鍵字之間,如果一個(gè)任務(wù)在多個(gè)模塊中被引用,如何處理?Verilog采用include編譯指令和其它編碼技巧來(lái)解決問(wèn)題,但同時(shí)引入了其它的問(wèn)題,如
6、設(shè)計(jì)維護(hù)等。SystemVerilog借鑒了VHDL中package的概念,很好地解決了這個(gè)問(wèn)題!第11頁(yè)/共40頁(yè)2.1.1 package內(nèi)容 package中的內(nèi)容在package和endpackage之間定義,可以包含的可綜合結(jié)構(gòu)有:1. parameter和localparam常量定義2. const變量定義3. typedef用戶自定義類型4. 全自動(dòng)task和function定義5. import語(yǔ)句6. 操作符重載定義第12頁(yè)/共40頁(yè)2.1.1 package內(nèi)容 package definitions; parameter VERSION = “1.1”; typedef
7、enum ADD, SUB, MUL opcodes_t; typedef struct logic 31 : 0 a, b; opcodes_t opcode; instruction_t; function automatic 31:0 multiplier( input 31:0 a, b); return a * b; endfunction endpackage第13頁(yè)/共40頁(yè)2.1.2 package內(nèi)容的引用 四種引用方式:1. 用范圍解釋操作符直接引用2. 將package中特定子項(xiàng)導(dǎo)入到模塊或接口中3. 用通配符導(dǎo)入package中的子項(xiàng)到模塊或接口中4. 將package
8、中子項(xiàng)導(dǎo)入到$unit中第14頁(yè)/共40頁(yè)2.1.2 package內(nèi)容的引用方法1: module ALU(input definitions:instruction_t IW, input logic clock, output logic 31:0 result); always_ff (posedge clock) begin case (IW.opcode) definitions:ADD: result = IW.a + IW.b; definitions:SUB: result = IW.a IW.b; definitions:MUL: result = definitions:
9、multiplier(IW.a, IW.b); endcase end endmodule第15頁(yè)/共40頁(yè)2.1.2 package內(nèi)容的引用方法2: module ALU(input definitions:instruction_t IW, input logic clock, output logic 31:0 result); import definitions:ADD; import definitions:SUB; import definitions:MUL; import definitions:multiplier; always_ff (posedge clock) b
10、egin case (IW.opcode) ADD: result = IW.a + IW.b; SUB: result = IW.a IW.b; MUL: result = multiplier(IW.a, IW.b); endcase end / import definitions:opcodes_t; ? endmodule第16頁(yè)/共40頁(yè)2.1.2 package內(nèi)容的引用方法3: module ALU(input definitions:instruction_t IW, input logic clock, output logic 31:0 result); import d
11、efinitions:*; always_comb begin case (IW.opcode) ADD: result = IW.a + IW.b; SUB: result = IW.a IW.b; MUL: result = multiplier(IW.a, IW.b); endcase end endmodule通配符導(dǎo)入并不自動(dòng)導(dǎo)入整個(gè)package,只是相當(dāng)于添加了一條搜索路徑!第17頁(yè)/共40頁(yè)2.1.3 package綜合指導(dǎo)package中的的任務(wù)和函數(shù)必須說(shuō)明為自動(dòng)的才能被綜合,并且不能包括靜態(tài)變量。自動(dòng)任務(wù)或函數(shù)的存儲(chǔ)區(qū)在每次調(diào)用時(shí)才會(huì)分配,引用自動(dòng)package中的自動(dòng)任
12、務(wù)或函數(shù)的每個(gè)模塊看到的是不被其它模塊共享的唯一副本,保證了綜合前后行為相同。 package中的變量聲明是不可綜合的!第18頁(yè)/共40頁(yè)2.2 $unit編譯單元聲明 內(nèi)容:1. 時(shí)間單位和精度聲明2. 變量、常量聲明3. net聲明4. 用戶定義數(shù)據(jù)類型,使用typedef、enum和class5. 任務(wù)和函數(shù)編譯單元是同時(shí)編譯的所有源文件。編譯單元為軟件工具提供了一種對(duì)整個(gè)設(shè)計(jì)的各個(gè)子塊單獨(dú)編譯的方法。SystemVerilog可以在package,模塊、接口和程序塊的外部進(jìn)行聲明,這些外部聲明在“編譯單元域”中,對(duì)所有同時(shí)編譯的模塊都是可見(jiàn)的。(與后面的例子似乎有些矛盾!)第19頁(yè)/共
13、40頁(yè)2.2 $unit編譯單元聲明 parameter VERSION = “1.2a”; reg resetN = 1; typedef struct packed reg 31:0 address; reg 31:0 data; reg 31:0 opcode; instruction_word_t; function automatic int log2(input int n); if (n 1) begin n = n / 2; log2 +; end return(log2); endfunction第20頁(yè)/共40頁(yè)2.2 $unit編譯單元聲明module register(
14、output instruction_word_t q; input instruction_word_t d; input wire clock); always (posedge clock, negedge resetN) if (!resetN) q = 0; else q = d; endmodule第21頁(yè)/共40頁(yè)2.2 $unit編譯單元聲明編譯單元域只作用于同時(shí)編譯的源文件。每次編譯源文件就創(chuàng)建一個(gè)唯一僅針對(duì)此次編譯的編譯單元域!假定模塊CPU和模塊controller都引用外部聲明的變量reset,考慮以下兩種情況:(1)如果兩個(gè)模塊同時(shí)編譯(2)如果每個(gè)模塊分別編譯第(2
15、)種情況第二次編譯時(shí)看不到第一次編譯中的reset聲明,可能編譯失敗,也可能使reset成為隱式的net,如果是后一種情況,那么就有了兩個(gè)叫reset的不同信號(hào)!第22頁(yè)/共40頁(yè)2.2.1 編碼指導(dǎo)(1)不要在$unit空間進(jìn)行任何聲明,所有共享的聲明都要在package中進(jìn)行(2)需要時(shí)可以將package導(dǎo)入到$unit中(3)如果聲明分散在多個(gè)文件中,會(huì)使代碼結(jié)構(gòu)混亂、邏輯性差、難于調(diào)試、產(chǎn)生錯(cuò)誤!第23頁(yè)/共40頁(yè)2.2.2 標(biāo)識(shí)符搜索規(guī)則(1)搜索按IEEE1364 Verilog標(biāo)準(zhǔn)定義的局部聲明(2)搜索通配導(dǎo)入到當(dāng)前作用域的package中的聲明(3)搜索編譯單元域中的聲明(
16、4)搜索設(shè)計(jì)層次中的聲明,遵循IEEE Verilog搜索規(guī)則SystemVerilog搜索規(guī)則保證了與Verilog完全向后兼容第24頁(yè)/共40頁(yè)2.2.3 源代碼順序 module parity_gen(input wire 63 :0 data); parity = data; endmodule reg parity; module parity_check(input wire63 : 0 data, output logic err); assign err = (data != parity); endmodule一個(gè)好習(xí)慣:先聲明,后引用!編譯不會(huì)有錯(cuò),但兩個(gè)模塊中的parit
17、y其實(shí)并不相同,第一個(gè)是隱式的線網(wǎng),第二個(gè)是$unit變量!第25頁(yè)/共40頁(yè) module ALU (input definitions : instruction_t iw, input logic clock; output logic 31 : 0 result); import definitions : instruction_t; module ALU (input instruction_t iw, input logic clock; output logic 31 : 0 result);2.2.4 將package導(dǎo)入$unit原則 package也可以通過(guò)通配符導(dǎo)入到$
18、unit域中。通配符導(dǎo)入只是將package加到SystemVerilog源路徑中!第26頁(yè)/共40頁(yè)2.2.4 將package導(dǎo)入$unit原則(1)文件編譯順序信賴性(2)多文件編譯與單文件編譯(3)每個(gè)文件使用導(dǎo)入語(yǔ)句(同時(shí)編譯時(shí)非法?。?)條件編譯將package導(dǎo)入到$unit同樣會(huì)遇到在$unit中進(jìn)行聲明和定義時(shí)的問(wèn)題!第27頁(yè)/共40頁(yè) ifndef DFFS_DONE define DFFS_DONE package definitions; parameter VERSION = “1.1”; typedef enum ADD, SUB, MUL opcode_t; t
19、ypedef struct logic 31 :0 a, b; opcode_t opcode; instruction_t; function automatic 31 : 0 multiplier (input 31 : 0 a, b); return a * b; endfunction endpackage import definitions : *; endif2.2.4 將package導(dǎo)入$unit原則第28頁(yè)/共40頁(yè) include “definitions.pkg” /編譯package文件 module alu (input instruction_t IW, inpu
20、t logic clock, output logic 31 : 0 result); always_comb begin case (IW.opcode) ADD : result = IW.a + IW.b; SUB : result = IW.a - IW.b; MUL : result = multiplier(IW.a, IW.b); endcase end endmodule2.2.4 將package導(dǎo)入$unit原則第29頁(yè)/共40頁(yè) include “definitions.pkg” /編譯package文件 module alu_test ; instruction_t t
21、est_word; logic 31 :0 alu_out; logic clock = 0; ALU dut(.IW(test_word), .result(alu_out), .clock(clock); always #10 clock = clock; initial begin (negedge clock) test_word.a = 5; test_word.b = 7; test_word.opcode = ADD; / endmodule2.2.4 將package導(dǎo)入$unit原則如果definitions.pkg單獨(dú)編譯如何?第30頁(yè)/共40頁(yè)2.2.5 綜合指導(dǎo)在編譯單
22、元域聲明的可綜合結(jié)構(gòu)有:(1)typedef用戶定義類型(2)自動(dòng)函數(shù)(3)自動(dòng)任務(wù)(4)parameter和localparam常量(5)package導(dǎo)入 package中定義的變量是共享變量,不可綜合 package中定義的靜態(tài)任務(wù)和函數(shù)也是不可綜合的!第31頁(yè)/共40頁(yè)2.3 未命名語(yǔ)句塊中的聲明 Verilog允許在命名的beginend或forkjoin塊中聲明局部變量,局部變量避免了對(duì)同名但用途不同的模塊級(jí)變量的無(wú)意義訪問(wèn)。 module chip(input clock); integer i; always (posedge clock) begin : loop integ
23、er i; for (i = 0; i = 127; i = i + 1) begin end end endmodule 第32頁(yè)/共40頁(yè)2.3 未命名語(yǔ)句塊中的聲明 在命名塊中聲明的變量可以用包含塊名的層次路徑引用,層次化引用不可綜合,通常在驗(yàn)證程序使用。 module test; reg clock; chip chip(.clock(clock); always #5 clock = clock; initial begin clock = 0; repeat (5) (negedge clock); $display(“chip.i = %0d”, chip.i); $displa
24、y(“chip.loop.i = %0d”, chip.loop.i); end endmodule 第33頁(yè)/共40頁(yè)2.3 未命名語(yǔ)句塊中的聲明 SystemVerilog擴(kuò)展了Verilog,允許在未命名塊中聲明變量,語(yǔ)法與在命名塊中聲明相同。 module chip(input clock); integer i; always (posedge clock) begin integer i; for (i = 0; i = 127; i = i + 1) begin end end endmodule 未命名塊中聲明的變量不能被層次化引用!第34頁(yè)/共40頁(yè)2.4 仿真時(shí)間單位和精度
25、 Verilog語(yǔ)言不能在時(shí)間值后指定時(shí)間單位,時(shí)間值之間有簡(jiǎn)單的關(guān)系如1時(shí)間單位延時(shí)3個(gè)時(shí)間單位延時(shí),可是 always #5 clock = clock; 時(shí)鐘周期是多長(zhǎng)?10ps?10ns?10ms?單從這條語(yǔ)句本身不能得到答案,那么Verilog中又是如何解決的呢?第35頁(yè)/共40頁(yè)2.4.1 編譯指令timescale 編譯指令timescale包括兩部分:時(shí)間單位和時(shí)間精度,時(shí)間精度表明仿真時(shí)時(shí)間的最小取值。timescale對(duì)文件編譯順序有依賴性。 timescale 1ns/1ns module A(); nand #3 (); endmodule module B(); na
26、nd #5 (); endmodule timescale 1ms/1ms module C(); nand #2 (); endmodule timescale 1ns/1ns module A(); nand #3 (); endmodule module B(); nand #5 (); endmodule timescale 1ms/1ms module C(); nand #2 (); endmoduleFile AFile BFile CFile AFile CFile B第36頁(yè)/共40頁(yè)2.4.2 SystemVerilog時(shí)間單位和精度1. 包含時(shí)間單位的時(shí)間值: module adder(input wire63 : 0 a, b, output reg 63 :0 sum, output reg carry); timeunit 1ns; timeprecision 10ps; /是模塊的一部分
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公共設(shè)施冬季施工監(jiān)管措施
- 急診科護(hù)理帶教資源與支持計(jì)劃
- 建筑工程合同管理人員職責(zé)
- 物業(yè)管理可持續(xù)發(fā)展戰(zhàn)略計(jì)劃
- 歷史知識(shí)普及活動(dòng)計(jì)劃
- 一年級(jí)下冊(cè)地方生態(tài)環(huán)境教育計(jì)劃
- 小學(xué)五年級(jí)道德教育實(shí)踐計(jì)劃
- 智能合約法律效力確認(rèn)與合規(guī)性評(píng)估補(bǔ)充協(xié)議
- 抖音網(wǎng)紅抖音號(hào)數(shù)據(jù)共享及內(nèi)容運(yùn)營(yíng)合作協(xié)議
- 零售企業(yè)智能供應(yīng)鏈金融合作協(xié)議
- 浮生六記課件
- 中國(guó)城市規(guī)劃與建設(shè)發(fā)展報(bào)告
- 人工智能技術(shù)與知識(shí)產(chǎn)權(quán)保護(hù)
- 中國(guó)企業(yè)可持續(xù)發(fā)展報(bào)告指南CASS-ESG 6.0-土木工程建筑業(yè)
- 交通運(yùn)輸行業(yè)消防隱患排查措施
- 2025浙江杭州學(xué)軍中學(xué)保送生自主招生數(shù)學(xué)試卷(含答案詳解)
- 養(yǎng)生館員工管理制度
- 第三單元 傳承中華傳統(tǒng)文化 單元測(cè)試題(含答案)-2024-2025學(xué)年下學(xué)期 七年級(jí)道德與法治
- TCAWAORG 014-2024 老年綜合評(píng)估及干預(yù)技術(shù)應(yīng)用規(guī)范
- 生物安全委員會(huì)的職責(zé)與管理制度
- 《接地線掛設(shè)操作》課件
評(píng)論
0/150
提交評(píng)論