systemVerilog快速入門PPT.ppt_第1頁
systemVerilog快速入門PPT.ppt_第2頁
systemVerilog快速入門PPT.ppt_第3頁
systemVerilog快速入門PPT.ppt_第4頁
systemVerilog快速入門PPT.ppt_第5頁
已閱讀5頁,還剩119頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、SystemVerilog 講座,第一講: SystemVerilog 基本知識,夏宇聞 神州龍芯集成電路設計公司 2008,Verilog HDL的發(fā)展歷史,1984: Gateway Design Automation 推出 Verilog 初版 1989: Gateway 被Cadence Design Systems 公司收購 1990: Cadence 向業(yè)界公開 Verilog HDL 標準 1993: OVI 提升 the Verilog 標準,但沒有被普遍接受 1995: IEEE 推出 Verilog HDL (IEEE 1364-1995)標準 2001: IEEE 推出

2、Verilog IEEE Std1364-2001 標準 2002: IEEE 推出 Verilog IEEE Std1364.1-2002 標準 2002: Accellera 對 SystemVerilog 3.0 進行標準化 Accellera 是OVI / 4態(tài),Verilog-2001(位寬可變)數(shù)據(jù)類型 integer i; /4態(tài),Verilog-2001(32位)有符號數(shù)據(jù)類型 logic w; /4態(tài),(位寬可變) 0,1,x,或者 z bit b; /2態(tài),(位寬可變) 1位 0 或 1 byte b8; /2態(tài),(8位)有符號整型數(shù) shortint s; /2態(tài),(16

3、位)有符號整型數(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ù)類型位寬可以改變,幾乎通用的數(shù)據(jù)類型logic(等價于原來的 reg類型),logic 類型類似于VHDL中的std_ulogic類型 - 對應的具體元件待定 - 只允許使用一個驅動源,或者來自于一個或者多個過程塊的過程賦值,對同一

4、變量既進行連續(xù)賦值又進行過程賦值是非法的,不允許的。,- 在SystemVerilog中:logic和reg類型是一致的(類似于Verilog中wire和tri類型是一致的),wire數(shù)據(jù)類型仍舊有用因為: - 多驅動源總線: 如多路總線交換器(bus crossbars ,ifdef STATE2 typedef bit bit_t; /2 state else typedef logic bit_t; /4 state endif,defines.vh,設計策略:用各種typedefs,只要用typedef 就可以很容易地在4態(tài)和2態(tài)邏輯仿真之間切換以加快仿真速度,verilog_cmd

5、define.vh tb.v dff.v,verilog_cmd define.vh tb.v dff.v +define+STATE2,確省,為4態(tài)邏輯值仿真,只用 2態(tài)邏輯值,仿真速度快,已確定的和待確定的類型,四態(tài)和兩態(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.vh,ifdef STATE2 typedef bit bit_

6、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.vh,無多驅動器的2態(tài)類型,- 也許下一個版本的SystemVerilog能得到修正,沒有容易的std_ulogic 和std_logic 之間切換的等價語句,Verilog-2001 數(shù)據(jù)類型(模塊內部),模塊的輸入必須是線網(wǎng)類型的信號,module A(out,in); output out; input in; reg out; wire in; always (in) out = in; endmodu

7、le,module B(out,in); output out; input in; wire out; wire in; assign out = in; endmodule,用reg類型的輸出 (過程賦值語句的LHS必須用變量類型),輸出是線網(wǎng)類型的 (用連續(xù)賦值驅動的變量類型),Verilog-2001 數(shù)據(jù)類型(模塊外部),信號由源驅動的必須定義為線網(wǎng)類型,module A(out,in); 黑箱 輸出 輸入,module B(out,in); 黑箱 輸出 輸入,實例的輸入往往由測試模塊的變量驅動,a2b,輸出信號必須定義為線網(wǎng)類型,module test; reg t_in; wir

8、e a2b; wire t_out; A u1(.out(a2b), .in(t_in); B u2(.out(t_out), .in(a2b); initial t_in =1;,t_out,Verilog-2001 數(shù)據(jù)類型(模塊內部、外部和測試放在一起),線網(wǎng)聲明語句,過程賦值語句的LHS必須用變量類型,通常是reg類型,這些都聲明為線網(wǎng)類型,module test; reg t_in; wire a2b; wire t_out; A u1(.out(a2b), .in(t_in); B u2(.out(t_out), .in(a2b); initial t_in =1; . endmo

9、dule,a2b,t_out,變量 聲明語句,SystemVerilog對端口定義沒有限制,SystemVerilog允許過程或者連續(xù)賦值給變量賦值,線網(wǎng)聲明語句,logic 類型可以替代所有其他類型,包括reg類型,這些都聲明為線網(wǎng)類型,module test; logic t_in; logic a2b; logic t_out; A u1(.out(a2b), .in(t_in); B u2(.out(t_out), .in(a2b); initial t_in =1; . endmodule,a2b,t_out,只有一個驅動源的變量都可以聲明為logic類型,SystemVerilog

10、表示數(shù)字的語法有改進,module fsm_sv1b_3; . always * begin next = x; case (stat側 endmodule,類似VHDL的(Other=) 語句進行“填滿”的操作,x 等于Verilog-2001的bx,z 等于Verilog-2001的bz,1 等于賦-1的值(即-1的2進制補碼,也就是所有位賦為1),0 等于賦給0的值(也就是所有位賦為0),特定邏輯過程,SystemVerilog 有三個新的特定的邏輯過程來表達設計者的意圖:,always_comb always_latch always_ff,always_comb begin tmp1

11、= a end,always_latch if (en) q = d;,always_ff (posedge clk, negedge rst_n) if (!rst_n) q = 0 ; else q = d;,允許仿真工具進行某些 語法功能檢查(linting functionality),always_comb特定邏輯過程,always_comb -允許仿真工具檢查正確的組合邏輯代碼風格,正確的,module ao1( output bit_t y, input bit_t a, b, c, d ); bit_t tmp1, tmp2; always_comb begin tmp1 =

12、a end endmodule,module ao1( output bit_t y, input bit_t en, d ); always_comb if (en) q = 0 ; endmodule,錯誤: 想生成組合邏輯 但產生了鎖存器,可能發(fā)生的 錯誤信息:,always_latch特定邏輯過程,always_latch -允許仿真工具檢查正確的鎖存器邏輯代碼風格,正確的,module lat1( output bit_t q, input bit_t en, d ); always_latch if (en) q = d; endmodule,module lat1( output

13、 bit_t q, input bit_t en, d ); always_latch if (en) q = d; else q = q; endmodule,錯誤: 組合邏輯反饋環(huán) 路不能生成鎖存器,可能發(fā)生的 錯誤信息:,always_ff特定邏輯過程,always_ff -允許仿真工具檢查正確的寄存器邏輯代碼風格,正確的,module dff1( output bit_t q, input bit_t d, clk, rst_n ); always_ff (posedge clk, negedge rst_n) if (!rst_n) q = 0; else q = d ; endmo

14、dule,module dff1 ( output bit_t q, input bit_t d, clk, rst_n ); always_ff (clk, rst_n) if (!rst_n) q = 0; else q = q; endmodule,錯誤: 非法敏感列表 不能生成觸發(fā)器,可能發(fā)生的 錯誤信息:,always * 與 always_comb 的差別,它們之間的真正有什么差別,IEEE VSG和Accellera SystemVerilog 委員會還在辯論中,尚未最后確認,module fsm_svlb_3 . always * begin next = x; case (s

15、tate) . end . endmodule,always_comb 對于函數(shù)內容的變化是敏感的,存在一些差別,always_comb 可用來檢查非法鎖存器,always_comb 在0時刻結束時自動觸發(fā)一次,* 可以寫在always 塊內,module fsm_svlb_3 . always_comb begin next = x; case (state) . end . endmodule,Void 函數(shù),沒有返回值的函數(shù) 不必從Verilog 表達式中被調用 -Void 函數(shù)可以象Verilog 任務一樣,獨立地調用 與Verilog 任務不同, Void 函數(shù) - 不能等待 - 不

16、能包括延遲 - 不能包括事件觸發(fā) - 被always_comb 搜尋到的信號自動加入敏感列表,always_comb 與 Void 函數(shù),module comb1( output bit_t 2:1 y, input bit_t a, b, c) ; always_comb orf1(a); function void orf1; input a; y1 = a | b | C; endfunction always_comb ort1(a); task ort1; input a; y2 = a | b | C; endtask endmodule,always * orf1(a) ;,等價

17、于: always (a),等價于: always (a,b,c),void 函數(shù)的行為 類似于0延遲的任務,等價于: always (a),Verilog 任務,b 和 c 是隱含的輸入,always * ort1(a) ;,等價于: always (a),b 和 c 是隱含的輸入,-或者-,-或者-,只有always_comb 對函數(shù)的內容的變化是敏感的,always_ff 用于雙數(shù)據(jù)率(DDR)時序邏輯?,有可能提高未來綜合工具的性能?,無正跳變沿觸發(fā)時鐘信號(clk) 無負跳變沿觸發(fā)時鐘信號(clk),目前對綜合器來說 該語法是非法的,module ddrff ( output bit

18、_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ù)率(DDR)時序邏輯嗎?,設計意圖unique/priority,有優(yōu)先的還是沒有優(yōu)先的? 來回考慮 綜合時常容易產生的錯誤!,full_case parallel_case,看似“完全一樣”的語句 對應的實體是不同 的,這些指令告訴綜合編譯器,編 寫的設計代碼有

19、些地方和仿真 器理解的有些不同,綜合前與綜合后 的仿真可能存在 一些差別,unique 和 priority 這兩個新添的指令告訴仿真器和綜合器同一個信息,unique case priority case unique if priority if,使得仿真器、綜合器和 形式化驗證工具的行為 變得一致,設計意圖 priority,priority case: - full_case,full_case的 仿真和綜合,所有的可能都已經(jīng)定義了, 任何其他的可能都是錯誤的,priority case (1b1) irq0: irq= 4b1 0; irq1: irq= 4b1 1; irq2: i

20、rq= 4b1 2; irq3: irq= 4b1 3; endcase,priority if: - 所有的分支被指定后不需要最后結束的else,priority 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; endcase,

21、priority if (irq0) irq = 4b1; else if (irq1) irq = 4b2; else if (irq2) irq = 4b4; else if (irq3) irq = 4b8; else irq = 4b0;,irq0到irq3中至少有一個必定為高否則仿真就出現(xiàn)運行錯誤,default 或 最后的else語句 使得 priority關鍵字無效,設計意圖 Unique,unique case: - full_case / parallel_case,full_case 和parallel_case 的仿真和綜合,所有的可能都已經(jīng)定義了, 任何其他的可能都是錯

22、誤的,unique case (1b1) sel0: muxo = a; sel1: muxo = b; sel2: muxo = c; endcase,unique if: - full_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: m

23、uxo = c; default: muxo = x; endcase,unique if (sel0) muxo = a; else if (sel1) muxo = b; else if (sel2) muxo = c; else muxo = x;,對沒有預料到的sel值不會出現(xiàn)仿真運行錯誤,unique仍舊測試 覆蓋的條件,Moore FSM舉例 - - 狀態(tài)圖,FSM狀態(tài)圖,兩個always塊的編碼風格(符號、參數(shù)賦值時序always塊),module sm2a (rd,ds,go,ws,clk,rstN); output rd, ds; input go, ws, clk, rst

24、N; parameter IDLE = 2b00, READ = 2b01, DLY = 2b10, DONE = 2b11; reg 1:0 state, next; always (posedge clk or negedge rstN) if (!rstN) state =IDLE; else state = next;,Verilog 沒有 枚舉類型變量,參數(shù)被用于 有限狀態(tài)機的設計,兩個always塊的編碼風格(組合邏輯always塊-連續(xù)賦值輸出),always (state or go or ws) begin next = 2bx; case(state) IDLE: if (

25、go) next = READ; else next = IDLE; READ: next = DLY; DLY : if (!ws) next = DONE; else next = READ; DONE: next = IDLE; endcase end assign rd = (state = read)|(state=DLY); assign ds = (state = DONE); endmodule,仿真差錯訣竅,綜合優(yōu)化訣竅,輸出方法1 (連續(xù)賦值),兩個always塊的編碼風格(組合邏輯always塊-always阻塞賦值輸出), always (state or go or

26、ws) begin next = 2bx; rd = 1b0; ds = 1 b0; case(state) IDLE: if (go) next = READ; else next = IDLE; READ: begin rd = 1b1; next = DLY; end DLY : begin rd = 1b1; if (!ws) next = DONE; else next = READ; end DONE: begin ds = 1b1; next = IDLE; end endcase end endmodule,初始化確省值的賦值 初始化輸出值到確省態(tài),輸出方法2 (always

27、塊賦值),枚舉(enumerated)數(shù)據(jù)類型(更高抽象層面的功能強大的數(shù)據(jù)類型),typedef enumred, yellow,green,blue,white,black clolors_t; clolors_t light1, light2; initial begin light1 = red; if (light1 = red) light1 = green; end,匿名的2態(tài) 整 型(int)變量,enum red, yellow,green light1,light2;,enum bronze=3, silver,gold medal;,enum a=0, b=7, c, d

28、 = 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”),枚舉類型的抽象,module fsm_svla_3; . enum IDLE, READ, DLY, DONE, XX state, next; . endmodule,無指定值的抽象 枚舉名(值可以在 以后指定),枚舉變量 state 和

29、next,逗號把括在內的 枚舉名分隔開來,枚舉關鍵字,枚舉-賦整型值,module fsm_svla_3; . enum IDLE = 3b000, READ = 3b001, DLY = 3b010, DONE = 3b011, XX = 3b111 state, next; . endmodule,未指定數(shù)據(jù)類型, 即假定數(shù)據(jù)為整型,確省類型,用戶對枚舉名 賦值,在 FSM 設計用3個always塊 應用枚舉,module fsm_svla_3; (output reg rd,ds, input go, ws, clk,rst_n ); enum IDLE , READ , DLY , D

30、ONE , XX state, next; always (posedge clk, negedge rst_n) if (!rst_n) state = IDLE; else state = next; always * begin next = xx; case (state) IDLE: if (go) next = READ; else next = IDLE; READ: next = DLY; DLY: if (!ws) next = DONE; else next = READ; DONE: next = IDLE; end .,枚舉的測試 和賦值,. always (posed

31、ge clk, negedge rst_n) if (!rst_n) begin rd = 1b0; ds = 1b0; end else begin rd = 1b0; ds = 1b0; case (next) READ: rd = 1b1; DLY: rd = 1b1; DONE: ds = 1b1; endcase end endmodule,逗號分開的敏感列表,*表示組合邏輯的敏感列表 (簡化的語法,減少RTL錯誤),抽象的枚舉名,枚舉 指定四狀態(tài)值,module fsm_svlb_3; . enum reg 1:0 IDLE = 2b00, READ = 2b01, DLY = 2

32、b10, DONE = 2b11, XX = x state, next; . endmodule,x 賦值在仿真無關項 優(yōu)化綜合和調試時非 常有用,指定4態(tài)數(shù)據(jù)類 型 允許數(shù)據(jù)值 為x 或者z,在 FSM 設計用3個always塊 應用賦值枚舉,module fsm_svla_3; (output reg rd,ds, input go, ws, clk,rst_n ); enum reg 1:0 IDLE=2b00 , READ=2b01 , DLY=2b10 , DONE =2b11 , XX =x state, next; always (posedge clk, negedge rs

33、t_n) if (!rst_n) state = IDLE; else state = next; always * begin next = xx; case (state) IDLE: if (go) next = READ; else next = IDLE; READ: next = DLY; DLY: if (!ws) next = DONE; else next = READ; DONE: next = IDLE; end .,. always (posedge clk, negedge rst_n) if (!rst_n) begin rd = 1b0; ds = 1b0; en

34、d else begin rd = 1b0; ds = 1b0; case (next) READ: rd = 1b1; DLY: rd = 1b1; DONE: ds = 1b1; endcase end endmodule,從抽象到具體需要做的唯一 修改就是在枚舉定義處賦值,賦值的枚舉值,在 FSM 設計用3個always塊 SystemVerilog 3.0 - 應用賦值枚舉,module fsm_svla_3; (output reg rd,ds, input go, ws, clk,rst_n ); enum reg 1:0 IDLE=2b00 , READ=2b01 , DLY=2

35、b10 , DONE =2b11 , XX =x state, next; always_ff (posedge clk, negedge rst_n) if (!rst_n) state = IDLE; else state = next; always_comb begin next = xx; unique case (state) IDLE: if (go) next = READ; else next = IDLE; READ: next = DLY; DLY: if (!ws) next = DONE; else next = READ; DONE: next = IDLE; en

36、d .,. always (posedge clk, negedge rst_n) if (!rst_n) begin rd = 1b0; ds = 1b0; end else begin rd = 1b0; ds = 1b0; case (next) READ: rd = 1b1; DLY: rd = 1b1; DONE: ds = 1b1; endcase end endmodule,無論對仿真器和綜合器以及 形式化驗證工具 都相當于 full_case parallel_case,允許更多的類似lint 的代碼檢查,在 FSM 設計用3個always塊 SystemVerilog 3.0

37、 - 應用賦值枚舉,enum reg 1:0 IDLE=2b00, READ=2b01, DLY=2b10, DONE =2b11 , XX =x state, next;,加入四狀態(tài)變量的枚舉類 型,允許合法狀態(tài)賦值和 x狀態(tài)賦值,以未定義的抽象 狀態(tài)開始,enum IDLE, READ, DLY, DONE, XX state, next;,有利于抽象,有利于觀察波形,有利于調試和 綜合,枚舉類型 波形顯示,enum reg 1:0 IDLE=2b00, READ=2b01, DLY=2b10, DONE =2b11 , XX =x state, next;,確切標準的波形顯示 能力正在定

38、義中,循環(huán)語句的性能得到增強,module for4a( output reg 31:0 y, input 31:0 a, input s); integer i; always (a or s) for ( i=0; i32; i=i+1) if (!s) yi = ai; else yi = a 31-i; endmodule,module for4b( output logic 31:0 y, input 31:0 a, input s); always (a or s) for ( int i=0; i32; i+) if (!s) yi = ai; else yi = a 31-i;

39、 endmodule,獨立的迭代 變量聲明,本地迭代 變量聲明,自動遞加,本地迭代變量是 自動變量退出循 環(huán)后就不再存在,Verilog-2001,SystemVerilog,顯式的遞加,a31:0,a0:31,a31:0,i1,i0,s,y,y31:0,s,SystemVerilog 還增加了一個 do-while循環(huán)(底測試循環(huán)),隱含的端口連接,Verilog 和VHDL都能用按端口名連接或按順序連接的方式引用實例模塊 SystemVerilog用了兩個新的隱含端口連接解決了頂層代碼編寫時表示端口連接代碼的冗長 - .name 端口連接 - .* 隱含的端口連接,大型ASIC頂層模塊的端

40、口連接非常麻煩而且冗長,下面是一個中等大小模塊的例子,中央算術邏輯單元(CALU)方塊圖,注意:所有寄存 器的時鐘端都由 “clk”驅動,異步 復位都由“rst_n” 驅動,MultOp1 reg,shifter(0,1,4),MultOut reg,Accumulator,Barrel shifter (0-16),MUX,ALU (32bit),Multiplier,16 data,16,32,16,16,16,16,16,32,32,32,32,32,32,alu_out,acc,multout,bs,acc,alu_in,en_acc,alu_op2:0,muxsel,ld_multo

41、p1,ld_multout,ld_acc,ld_shft,en_shft,shft_lshft,bs_lshft4:0,ld_bs,mop1,mult,32,中央算術邏輯單元(CALU)模塊之一,module calu3( inout 15:0 data; input 4:0 bs_lshft; input 2:0 alu_op; input 1:0 shft_lshft; input calu_muxsel, en_shft, ld_acc, ld_bs; input clk,rst_n); wire 31:0 acc, alu_in, alu_out, bs, mult, multout;

42、 wire 15:0 mop1; multop1 multop1 (.mop1, .data, .ld_multop1, .clk, . rst_n); multiplier multiplier(.mult, .mop1, .data); multoutreg multoutreg (.multout, .mult, .ld_multout, .clk, .rst_n);,MultOp1 reg,MultOut reg,Multiplier,multop1 multop1 (.mop1, .data, .ld_multop1, .clk, . rst_n);,端口名的匹配只 需要列出一次,中

43、央算術邏輯單元(CALU)模塊之二, barrel_shifter barrel_shifter( .bs, .data, .bs_lshft, .ld_bs, .clk, . rst_n); mult2 mux ( .y(alu_in), .i1(acc), .sel1(calu_muxsel); alu alu (.aluout, .zero( ), .neg( ), .alu_in, .acc, .alu_op); accumulator accumulator (.acc, .alu_out, .ld_acc, .clk, .rst_n); shifter shifter(.data,

44、 .acc, .shft_lshft,. ld_shft, .en_shft, .clk, . rst_n); tribuf tribuf (.data, .acc(acc15:0), en_acc); endmodule,具備所有按端口 名連接的優(yōu)點,Barrel shifter (0-16),MUX,ALU (32bit),Accumulator,shifter(0,1,4),代碼更簡練!,中央算術邏輯單元(CALU)頂層模塊 用 * 表示隱含的端口,module calu4( inout 15:0 data, input 4:0 bs_lshft, input 2:0 alu_op, i

45、nput 1:0 shft_lshft, input calu_muxsel, en_shft, ld_acc, ld_bs, input ld_multop1, ld_multout, ls_shft, en_acc, input clk, rst_n) ; wire 31:0 acc, alu_in, alu_out, bs, mult, multout; wire 15:0 mop1; multop1 multtop1 ( .* ); multiplier multiplier ( .* ); multoutreg multoutreg ( .* ); barrel_shifter ba

46、rrel_shifter ( .* ); mult2 mux ( .y(alu_in), .i0(multout), i1(acc), sell(calu_muxsel ); alu alu ( .*, .zero( ), .neg( ); accumulator accumulator ( .* ); shifter shifter( .* ); tribuf tribuf (.*, .acc(acc15:0 ); endmodule,本風格重點表達端 口出現(xiàn)不同的地方,Barrel shifter (0-16),MUX,ALU (32bit),Accumulator,shifter(0,1

47、,4),代碼更簡練,MultOut reg,MultOp1 reg,隱含 .name 和 . * 端口連接的規(guī)則,在同一個實例引用中禁止混用 .* 和 .name端口; 允許在同一個實例引用中使用 .name和 .name(signal)連接; 也允許在同一個實例引用中使用 .* 和 .name(signal)的連接; 必須用 .name(signal) 連接的情況: - 位寬不匹配 - 名稱不匹配 - 沒有連接的端口,inst u1(, .data(data7:0),.);,inst u2(, .data(pdata), .);,inst u3(, .berr( ), .);,注意:比Ver

48、ilog2001有更強大的端口連接描述,表述更簡潔,CALU頂層模四種不同端口連接代碼長度不同,隱含端口連接的缺點,module drivera ( output 7:0 y, input 7:0 a, input ena); assign y = ena? a : 8bz; endmodule,如果端口標識符相同很容易造成連接錯誤 - 出錯后很難發(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,

49、 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都相同,想設計的 邏輯,端口連接時用別名,module drivera ( output 7:0 y1, input 7:0 a, input ena);,module driverc ( output 7:0 y3, input 7:0 c, input ena);,modu

50、le driverd ( output 7:0 y4, input 7:0 c, input ena);,module driverb ( output 7:0 y2, input 7:0 b, input ena);,新的SystemVerilog 關鍵字alias,module 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

51、 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); endmodule,y,y1,y2, y3,y4都 是別名連 接在一起,用.* 縮短了 實例端口的 連接,用 .* 隱含端口連接的優(yōu)缺點,優(yōu)點: 編寫頂層模塊時容易多了 掃描多達1000個端口的頂層設計更加容易 比按照名字或者順序連接端口的代碼簡潔多了。 仍舊保留顯式端口連接的優(yōu)點 編寫用模塊

52、組裝的頂層測試模塊變得容易多了 -使測試模塊的信號與端口名一致,缺點: 可能造成不想要的連接 - 很難發(fā)現(xiàn)錯誤 - 使模塊的分別編譯變得 復雜 - 用戶使用錯誤時工具會 發(fā)生崩潰 對低層結構性的網(wǎng)表沒有什么用處 -原語端口很少能與線網(wǎng)匹配,合法的工具開發(fā)者很害怕這一點,.*的端口連接把所有沒有必要的麻煩都清除了,只列出端口連接的例外情況即可,所有端口都是隱含連接的,第二講:,SystemVerilog 提高了設計和驗證的效率,設計和驗證只需用同一種語言大大提高工作效率,容易學習 - SystemVerilog 語言本身很容易掌握 改善了設計小組和驗證小組之間的聯(lián)絡 由于具備高級語言結構,因而減

53、少了設計和驗證工作的復雜性,打包的和未打包的數(shù)組,未打包的位數(shù)組,打包的位數(shù)組,1K16位未打包 的存儲器,1K16位打包的 存儲器,bit a 3:0;,bit 3:0 p ;,bit 15:0 memory 1023:0; initial begin memory i = memoryi; memory i 15:8 = 0; end,bit 1023:0 15:0 vframe; always (vcmd ) if (vcmd =INV) vfram = vframe;,打包的索引可以分塊,可以對整個存儲 器進行操作,未打包的四維數(shù)組,對應這個語句最大的 可訪問單元為1位,logic x

54、data 3:0 2:0 1:0 7:0,7:0,2:0,1:0,3:0,打包的一維數(shù)組和未打包的三維數(shù)組,對應這個語句最大的 可訪問單元為8位,logic 7:0 xdata 3:0 2:0 1:0,7:0,2:0,1:0,3:0,打包的二維數(shù)組和未打包的二維數(shù)組,對應這個語句最大的 可訪問單元為16位,logic 1:0 7:0 xdata 3:0 2:0,7:0,2:0,1:0,3:0,打包的四維數(shù)組,對應這個語句最大的 可訪問單元為192位,logic 3:0 2:01:0 7:0 xdata,7:0,2:0,1:0,3:0,數(shù)據(jù)的組織,reg 47:0 pktsrc_adr; reg

55、 47:0 pktdst_adr; reg 7:0 InstOpCde; reg 7:0 InstOpRF127:0;,信號成組后有意義 - 指令: 操作符和操作數(shù) - 包的區(qū)域:地址、數(shù)據(jù)和糾錯碼 Verilog只提供非正式分組,define opcode 31:16 reg 31:0 Instruction; Instruction opcode,用名稱,用矢量位置,數(shù)據(jù)的組織,目標:把數(shù)據(jù)組織得與高級編程語言一樣 - 使其他人能非常清晰地理解設計中數(shù)據(jù)之間的關系; SystemVerilog 增加了結構,聯(lián)合和數(shù)組類型 - 能夠分別使用這些類型,或者結合起來使用從而能更精確地描述設計的意

56、圖。,數(shù)據(jù)的組織,結構(Structs)保留了邏輯分組 引用結構成員需要用比較長的表達式但代碼的意義很容易理解,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ū)做比較,數(shù)據(jù)的組織打包的結構和打包的聯(lián)合,未打包的結構(Struct) - 保留了邏輯分組 打包的結構(Struct) - 保留了邏輯分組 - 方便了訪問,typedef logic

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論