Fpga Tool的使用與第一支verilog程式

  • Uploaded by: Chia-Sheng Wen
  • 0
  • 0
  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Fpga Tool的使用與第一支verilog程式 as PDF for free.

More details

  • Words: 941
  • Pages: 18
FPGA Tool的使用與第一支 Verilog程式

Verilog 電路模組架構及 運算子使用方法 • 學習Verilog電路模組的設計結構及電路連線的方法 • 了解合成後,電路與程式指令的對應關係 • 測試平台(test bench 或 test fixture)的設計方法、待 測電路的叫用、連線、以及測試時序的安排 • ModelSim電路模擬軟體的使用及批次檔do file的設計 • 訊號的命名及數值的表示方法 • 活用Verilog HDL的各種運算子 • 向量資料形態(vector 或 bus)的使用練習 • 學習設計解碼器、平行多工器、及真值表等電路 • 熟悉乘法(*)、移位(<<或>>)、加法(+)等算數運算子的使 用方法和無號數(unsigned)及有號數(signed)的運算描述 • 熟悉位元組合(concatenation)、位元分配(division)、 位元重複(duplication)等位元處理運算子的使用方法 2

範例 1-1 : 以Verilog HDL設計的第一個數位電路 sel a b

g i 0

en

f j 1

c

h

d

3

2-to-1 MUX

驗證本範例電路功能所安排的測試時序 0

10

20

40

30

50

60

80

70

100 110 120 130 140 150 160 170 180 190 200 210 220 230

90

a b c d en sel f

?

?

?

?

?

?

?

?

?

?

?

5

程式 EX_101.v 內容 1 `timescale 1 ns/1 ns 2 3 module EX_101_module_structure_demo ( a, b, c, d, en, sel, f ); 4 input a, b, c, d, en, sel; 5 output f; 6 wire f; 7 8 wire g, h, i, j; 9 10 assign g = a | b; 11 12 assign i = g & en; 13 14 assign h = c | d; 15 16 assign j = h & en; 17 18 assign f = (sel==1'b0) ? i : j; 19 20 endmodule 6

程式指令與實際電路的對應關係 1. `timescale 1 ns/1 ns 2. 3. module EX_101_module_structure_demo(a, b, c, d, en, sel, f); 4. input a, b, c, d, en, sel; sel 5. output f; 6. wire f; a 7. 8. wire g, h, i, j; g b 9. 10. assign g = a | b; 11. 12. assign i = g & en; 13. en 14. assign h = c | d; 15. 16. assign j = h & en; 17. 18. assign f = (sel==1'b0) ? i : j; c 19. h 20. endmodule d

i 0 f j 1

7

測試平台 (testbench) 的設計概念 testbench 別名 : EX101_instance 本名 : EX101_module_structure_demo sel a b

sel a b

g i 0

en

en

f

f

j 1 c d

c

h

d

8

測試平台程式 EX_101_tb.v 內容 1 `timescale 1 ns/1 ns 2 3 module testbench; 4 reg a, b, c, d, en, sel; 5 wire f; 6 7 EX_101_module_structure_demo EX101_instance( 8 .a(a), 9 .b(b), 10 .c(c), 11 .d(d), 12 .en(en), 13 .sel(sel), 14 .f(f) ); 15 initial 16 begin 17 a = 1'b0; // Time = 0 18 b = 1'b1; 19 c = 1'b0; 20 d = 1'b1; 9

測試平台程式 EX_101_tb.v 內容 (續1) 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40

en = 1'b0; sel = 1'b0; #20; a = 1'b1; #10; b = 1'b0; c = 1'b1; #10; a = 1'b0; #10; en = 1'b1; #10; c = 1'b0; #10; a = 1'b1; d = 1'b0; #20; c = 1'b1; #20; a = 1'b0;

// Time = 20 // Time = 30

// Time = 40

// Time = 50 // Time = 60 // Time = 70

// Time = 90 // Time = 110 10

測試平台程式 EX_101_tb.v 內容 (續2) 41 #10; 42 a = 1'b1; 43 #10; 44 c = 1'b0; 45 sel= 1'b1; 46 #10; 47 a = 1'b0; 48 #30; 49 a = 1'b1; 50 #10; 51 c = 1'b1; 52 #20; 53 a = 1'b0; 54 end 55 endmodule

// Time = 120 // Time = 130

// Time = 140 // Time = 170 // Time = 180 // Time = 200

11

Tool的操作 • Xilinx ISE Simulation and WebPAC Tutorial for HDL • Xilinx ISE Simulation and WebPAC Tutorial for schematic • Altera Quartus II 8.1 Tutorial - Basic Simulation process • ModelSim Simulation and Tutorial for Verilog

電路模擬執行結果

13

補充說明 (1) : Verilog電路模組的設計結構 1.

時間刻度及精度宣稱 (例如 `timescale 1 ns/1 ns)

2.

導入檔案宣稱 (例如 `include "basic.v")

3.

常數宣稱 (例如 `define THREE 4'b0011)

4.

module name( port list );

5.

參數宣稱 (例如 parameter n = 8;)

6.

input port 宣稱;

7.

output port 或 inout port 宣稱;

8.

output port 或 inout port 訊號型態宣稱 (例如 wire 或 reg 訊號型態);

9.

內部訊號型態宣稱 (例如 wire 或 reg 訊號型態);

10. function 或 task 宣稱; 11. 下層使用模組宣稱; 12. 內部平行電路 (1); 13. 內部平行電路 (2); 14.

……

15. 內部平行電路 (N); 16. endmodule

14

補充說明 (2) 1. `timescale 1 ns / 1 ps 2. `define THREE 4’b0011 即宣稱識別字THREE為具有4個位元的常數3 (以二進位表示為b0011) 3. `include “basic.v” 4. 識別字的命名必須以字母為開頭,之後可交互使用字母、數字、_、 或 $ 等符號。大寫與小寫的字母將視為不同的命名 5. 模組以module保留字為首;以endmodule 保留字結尾 6. module name (port list); (以分號 ; 作為結尾 ),但是 endmodule敘述之後則不加分號 ( ; ) 7. 輸入腳位的訊號型態未被宣稱是由於輸入腳位的訊號型態恆為wire, 因此其宣稱是可以省略的 8. 運算子 | 及 & 分別代表 or 及 and 邏輯運算 9. assign f = (sel==1’b0) ? i : j; 說明當訊號sel等於 (==) 單一 bit 0 (1’b0) 時,將訊號i傳遞至f;否則,當訊號sel等於單一bit 1 (1’b1) 時,將訊號j傳遞至f。此行為即合乎於多工器 (multiplexer) 的工作原理

15

補充說明 (3) : 定數的表示法 1. 1’b0 表示單一位元,以二進位 (b : binary) 表示,其數值為 0 2. 1’b1 表示單一位元,以二進位 (b : binary) 表示,其數值為 1 3. 16’ha02f 表示此數共佔有16位元,以十六進位 (h : hex) 表示,其數值為 a02f 4. 通用表示格式 : {位元總數}’{進位底數}{依進位底數所表示的數值} 進位底數可為 b (二進位)、o (八進位)、d (十進位)、h (十六進位) 5. 若僅以單一數值表示 (例如 28) 則將以十進位數值看待 6. 數值的表示可加入 _ 符號以便增加可讀性,例如 16’b1100_0110_1010_0001

16

補充說明 (4) 1. wire a, b; assign a = b;

2. wire 及 reg 資料型態可被以下4種數值所設定 : 0 (邏輯0)、1 (邏輯1)、X (unknown,不知為何數值)、及 Z (high impedance,斷線或高阻抗) wire a, b, c, d; assign a = 1’b0; assign b = 1’b1; assign c = 1’bx; assign d = 1’bz; 3. 模組叫用的方式有兩種 : port map by name 及 port map by sequence (1) Port map by name 例如 : EX_101_module_structure_demo EX101_instance( .a(a), .b(b), .c(c), .d(d), .en(en), .sel(sel), .f(f) ); (2) Port map by sequence 例如 : EX_101_module_structure_demo EX101_instance ( a, b, c, d, en, sel, f ) ; 17

補充說明 (5) 1. 在測試平台程式中,待測電路模組的輸入腳位,均須注入時序以茲測試 2. 與輸入接腳相連接的接線均須宣稱為 reg,因為這些接線必須具有記憶的功能 才能描述其訊號含送時序的過程

3. initial 指令搭配 begin 及 end 區塊組成一時間軸 自initial begin 開始,即自時間 0 ns 開始描述,每當遇到 #time 即表示時 間經過 time 之後的演變 4. 單行註解說明 (comment) 可使用 // 符號 多行註解則可使用 /* 與 */ 5. 只要是訊號的值在 begin 與 end 循序區塊內被設定時,均須被宣稱為reg

18

Related Documents

Fpga
November 2019 18
Fpga Arabic
April 2020 9
Fpga Basics
May 2020 10
Cp-fpga
June 2020 9
Xilinx Fpga
June 2020 5
Fpga Tutorial
December 2019 10

More Documents from ""