47
1 Chapter 5 Verilog 硬 硬硬硬硬 Verilog 硬 硬硬硬硬硬硬硬硬硬 Verilog 硬硬硬硬硬硬硬硬硬 Verilog 硬硬硬硬硬 Verilog 硬硬硬硬硬 Verilog 硬硬硬硬硬硬硬硬硬 Verilog 硬硬硬硬硬硬硬硬 Verilog 硬硬硬硬硬硬硬

Chapter 5 Verilog 硬體描述語言

Embed Size (px)

DESCRIPTION

Chapter 5 Verilog 硬體描述語言. Verilog 硬體描述語言的基本架構 Verilog 模組描述的基本格式 Verilog 的描述格式 Verilog 的資料型態 Verilog 的事件基礎時間控制 Verilog 的輸入輸出埠描述 Verilog 的行為描述語法. Chapter 5 Verilog 硬體描述語言. Verilog 硬體描述語言的基本架構 Verilog 模組描述的基本格式 如何開啟進入 Verilog 硬體描述語言編輯器 Verilog 的描述格式 Verilog 的資料型態 Verilog 的事件基礎時間控制 - PowerPoint PPT Presentation

Citation preview

1

Chapter 5 Verilog 硬體描述語言 Verilog 硬體描述語言的基本架構 Verilog 模組描述的基本格式 Verilog 的描述格式 Verilog 的資料型態 Verilog 的事件基礎時間控制 Verilog 的輸入輸出埠描述 Verilog 的行為描述語法

2

Chapter 5 Verilog 硬體描述語言 Verilog硬體描述語言的基本架構 Verilog 模組描述的基本格式 如何開啟進入 Verilog 硬體描述語言編輯器 Verilog 的描述格式 Verilog 的資料型態 Verilog 的事件基礎時間控制 Verilog 的輸入輸出埠描述 Verilog 的行為描述語法

3

Verilog 硬體描述語言的基本架構

module

Behavioral-level

Dataflow-level

Gate-level

Switch-level

endmodule

4

模組內之四種層次描述電路 開關層次 (Switch-Level): 描述元件開

關及儲存點組合而成 邏輯層次 (Gate-Level): 描述邏輯閘的

連接形式 資料流層次 (Data-Level): 描述電路的

資料如何在暫存器中儲存與傳送 行為層次 (Behavioral-Level): 描述模

組之功能

5

暫存器轉移層次(Register-Transfer-Level, RTL)

資料流層次 (Data-Level) + 行為層次(Behavioral-Level) 經合成而形成暫存器轉移層次 (Register-Transfer-Level, RTL)

6

Chapter 5 Verilog 硬體描述語言 Verilog 硬體描述語言的基本架構 Verilog模組描述的基本格式 Verilog 的描述格式 Verilog 的資料型態 Verilog 的事件基礎時間控制 Verilog 的輸入輸出埠描述 Verilog 的行為描述語法

7

Verilog 模組描述的基本格式module < 模組名稱 >< 模組輸入輸出埠宣

告 >

模組四個層次的描述 ;

endmodule

8

以開關層次描述一 NOT 閘之模組module inv (ina, out);input ina;output out;supply1 vcc;supply0 gnd;pmos (out, vcc, ina);nmos (gnd, out, ina);endmodule

9

以邏輯閘層次描述一 OR 閘之模組module ORGATE (A, B, F);input A;input B;output F;or u1(F, A, B);endmodule

10

以資料流層次描述一 AND 閘之模組module ANDGATE (A, B, F);input A;input B;output F;wire F;assign F=A&B;endmodule

11

以行為層次描述一 NAND 閘之模組module NANDGATE (A, B, F);input A;input B;output F;reg F;always @(A or B)beginF=~(A & B);endendmodule

12

Chapter 5 Verilog 硬體描述語言 Verilog 硬體描述語言的基本架構 Verilog 模組描述的基本格式 Verilog的描述格式 Verilog 的資料型態 Verilog 的事件基礎時間控制 Verilog 的輸入輸出埠描述 Verilog 的行為描述語法

13

Verilog 的基本語法規定 關鍵字如 module, endmodule,

assign, wire, always, input, output, begin, end…等必須使用小寫

識別字的大小寫是有差別的,第一個字必須是使用英文字母

單行註解用 //; 多行註解用 /* … */ 字串以雙引號表示,如 “ This is a

string”

14

Verilog 的數字格式 (1)

有規定長度的數字 (sized numbers) <size>’<base format><number> <size>: 位元數 <base format>:d10 進位 ,h16 進

位 , o 8 進位 ,b 2 進位 Example: F=4’b0101; A=16’h6FA3

15

Verilog 的數字格式 (2)

不規定長度的數字 (unsized numbers) ’<base format><number> <base format>:d10 進位 ,h16 進

位 , o 8 進位 ,b 2 進位 位元數之大小由模擬器或硬體機定值來決定

Example: b=’ha5; b=a5(32 位元之16 進位數 )

16

Verilog 的運算子

17

18

19

Chapter 5 Verilog 硬體描述語言 Verilog 硬體描述語言的基本架構 Verilog 模組描述的基本格式 Verilog 的描述格式 Verilog的資料型態 Verilog 的事件基礎時間控制 Verilog 的輸入輸出埠描述 Verilog 的行為描述語法

20

(1) 、數值組集 (Value Set) Verilog 有四種表示數值,即

0 、 1 、 x 、 z 以及八種信號強度

21

(2) 、接線 (net) 接線 (net) 表示在硬體元件的接點連接線 關鍵字可以分為下列六種

wire: 內定為一個位元的值,機定值為高阻抗 wand: Wired-AND 型接線 waor: Wired-OR 型接線 tri trior trireg

22

(3) 、暫存器 (reg) Verilog 中 reg 相當於一個變數,其機

定值為 x Example: reg out; 宣告一個 out 變

數, reg 所宣告的變數必須在 always的區塊描述內使用module NANDGATE (A, B, F);input A;input B;output F;

reg F;always @(A or B)beginF=~(A & B);endendmodule

23

(4) 、向量 (Vectors) 向量 (Vectors) 表示多位元的元

件, wire 及 reg 都可定義為向量格式 Examples:

wire A[7:0]; // 宣告有一 8 位元的 BUS reg [0:15] out; // 宣告有一 16 位元寬度

的向量暫存器變數 out

24

(5) 、整數 (Integer) 整數之關鍵字為 integer ,最少要 32 位

元, integer 宣告可帶正負號 Example: integer count; initial count = 0;

25

(6) 、實數 (Real) 實數之關鍵字為 real ,可用十進制或帶

有指數表示 Example: real w, x; initial begin w = 5.2; x = 25e6;

26

(7) 、時間 (Time) 時間之關鍵字為 time ,主要功能在描述

儲存模擬的時間,也就是取得目前的模擬時間,最少為 64 位元的資料

Example: time storage_time; initial storage_time=$time

27

(8) 、陣列 (Arrays) Verilog 所提供陣列的儲存內容可以是整

數、暫存資料、時間及向量,但不能為實數而且只適用於一維陣列

表示格式為<array_name>[<subscript>]

integer A[0:15];16 個變數 A 的陣列 reg [3:0] B[0:15];16 個變數 B 的陣列,

每一個 B 的位元寬度為 4 位元

28

(9) 、記憶體 (Memories) 記憶體是一個暫存器的陣列,而陣列中的

每一個物件都視為一個 word ,每一個word 可以是 1 個位元或是多個位元所組成

reg [15:0] memory1 [0:1023]/* 宣告記憶體 memory1 為 16 位元 1K word 的大小 */

reg memory2 [0:1023]/* 宣告記憶體memory2 為 1 位元 1K word 的大小 */

29

(10) 、參數 (Parameters) 主要作用在設定一個固定常數,此常數

可在每一次編譯時更改其值 parameter LGG=100;// 宣告一常數

LGG 等於 100

30

(11) 、字串 (Strings) 字串的作用在指定給暫存器,若長度大

於 reg 的長度,則其左邊的位元會被刪掉,若長度小於 reg 的長度,則其左邊的位元會以零補之

Reg [8*16:1] string_value; initial string_value=“good morning”

31

Chapter 5 Verilog 硬體描述語言 Verilog 硬體描述語言的基本架構 Verilog 模組描述的基本格式 Verilog 的描述格式 Verilog 的資料型態 Verilog的事件基礎時間控制 Verilog 的輸入輸出埠描述 Verilog 的行為描述語法

32

事件基礎時間控制(Event-based timing control) Event 就是一個 wire 當暫存器改變時就是事件,此事件可用來觸發

一個敘述或包含多個敘述的區塊,且模組的輸入埠接收到一個新值也算是一個事件

Event-based timing control 可包含 (1) Regular event control (2) Named event control (3) Event OR control (4) Level-sensitive timing control

33

Regular event control 代表符號為 @ ,它是表示當信號產生正

緣 (posedge) ,負緣 (negedge) ,轉換 (transition) 或數值改變時,其相關敘述才會被執行

always @(clock) Q=J; 當 clock 信號值改變時就執行 Q=J 敘述

always @(posedge clock) Q=J; 當clock 信號正緣觸發時就執行 Q=J 敘述

34

Event OR control 指使用多個信號或事件去觸發一個敘述或含有多個敘

述的區塊來執行,因此將這些多個信號或事件以 or( 或 ) 來表示

always @(reset or clock or A or B) begin if (reset) F=1’b0; else if (clock) F=A+B; end

35

Chapter 5 Verilog 硬體描述語言 Verilog 硬體描述語言的基本架構 Verilog 模組描述的基本格式 Verilog 的描述格式 Verilog 的資料型態 Verilog 的事件基礎時間控制 Verilog的輸入輸出埠描述 Verilog 的行為描述語法

36

Verilog 的輸入輸出埠描述 輸入埠 (input) 輸出埠 (output) 雙向埠 (inout) Examples module Addr(F1, F2, D, SUM, C0) input [3:0] F1, F2; output [3:0] SUM; output C0; input D;

37

Chapter 5 Verilog 硬體描述語言 Verilog 硬體描述語言的基本架構 Verilog 模組描述的基本格式 Verilog 的描述格式 Verilog 的資料型態 Verilog 的事件基礎時間控制 Verilog 的輸入輸出埠描述 Verilog的行為描述語法

38

Always Always 是屬於並行迴圈,其事件一旦被

觸發,其區塊中的敘述將會被執行,觸發一次執行一次行程無窮迴圈

always@( 事件 1 or 事件 2 or … or 事件 n)begin

< 敘述區 >end

39

「 Begin … end 」 主要是將不同敘述同時集中,做法與 C

語言的“ {”與“ }”一樣,當敘述址為一行時,則 Begin … end 可以拿掉

begin:<方塊名稱 >< 資料型態宣告 >;

. . .

end

各種敘述

40

「 If 」「 else if 」「 else 」 If 跟 else if 為條件判斷式,只要達成 If 或是 else if 的判斷條件,則執行內部的敘述區塊,否則執行 else 內部的敘述區塊

If (判斷條件 1)begin< 敘述區塊 >endelse if (判斷條件 2)begin< 敘述區塊 >end else if (判斷條件 3)begin< 敘述區塊 >end . . .

elsebegin< 敘述區塊 >end

41

「 If 」「 else if 」「 else 」 cont’

通常 if else if else 會出現在 Always 迴圈底下,因為 Always 屬於並行迴圈,若再搭配條件判斷便可以進行串列 ( 下面程式藍色部分 ) 與並列 ( 下面程式綠色部分 )處理。

Always@(判斷條件 1 or 判斷條件 2 or … or 判斷條件 n)

beginif (判斷條件 1)begin< 敘述區塊 >endelse if (判斷條件 2)begin< 敘述區塊 >endelsebegin< 敘述區塊 >end

end

Always@(判斷條件 1 or 判斷條件 2 or … or 判斷條件 n)

beginif (if (判斷條件判斷條件 1)1)beginbegin<< 敘述區塊敘述區塊 >>endendif (if (判斷條件判斷條件 2)2)beginbegin<< 敘述區塊敘述區塊 >>endendelsebegin< 敘述區塊 >end

end

二個if 會同時判斷

42

EX.

Always @(posedge CLK or negedge CLR) // 如果 CLK 在正緣觸發或是 CLR 在負緣觸發時便執行 // 下面的敘述begin // 如同 C語法的 {

if (!CLR) // 如果觸發的是 CLR 且為 0 則執行以下敘述q=1’b0; // 如果觸發的是 CLR 且為 0 則 q 清除為 0 ,一行故 if 敘述式可加可不加

begin end else //否則,如果不是 CLR 的觸發 ( 也就是 CLK 時 )begin // 因為 else裡面敘述事不只一個,故要加 begin endq=d; // 若不是 CLR 則 q輸出 d( 輸入端 ) 的資料cont = cont +1;end // 因為 else裡面敘述事不只一個,故要加 begin end

end // 如同 C 語法的 }

43

「 Case … endcase 」 Case 類似 if else 的寫法,依照 case後面的條件狀況判斷式,來判斷

要進入哪一個狀況執行裡面的敘述式,否則執行 default(類似 else)裡面的敘述式。

casecase (條件狀況判斷式 )狀況 1:

begin< 敘述式 1>end

狀況 2:begin< 敘述式 2>end . . .

default:begin< 敘述式 n>end

endcaseendcase

44

EX. Case (s) // 若 S的狀態改變時便進入 case 敘述式

2’b00: // 若 S的狀態式 2bit 00 的話便進入以下敘述式 begin // 敘述式開始 y = i[0]; cont = cont+1; end // 敘述式結束2’b01: // 若 S的狀態式 2bit 01 的話便進入以下敘述式 begin // 敘述式開始 y = i[1]; cont = cont+1; end // 敘述式結束2’b10: // 若 S的狀態式 2bit 10 的話便進入以下敘述式 begin // 敘述式開始 y = i[3]; cont = cont+1; end // 敘述式結束default: //否則進入以下敘述式 begin // 敘述式開始 y = i[4]; cont = cont+1; end // 敘述式結束endcase // 本 case 敘述式結束

45

「 While 」 在 While 語法中,後面所接的條件判斷式

如果為“真”則一直執行 While 內部的敘述式,直到該判斷式為“假”才停止執行。while (條件判斷式 )begin< 敘述式 >end

46

EX.

Parameter i=10; // 設定 i = 10

while (i>0) // 如果 i >0 的話就執行內部敘述式,一直到 i <0結束begin // 敘述式開始$display(“i=%d”,i); // 把 i的值用十進制的方式顯示出來i= i-1; // 目的是要把 i減到停止執行 while 迴圈 ( 即i<0) end // 敘述式結束

47

Question & Answer