You are on page 1of 33

MỤC LỤC

DANH SÁCH HÌNH ẢNH ..........................................................................................................................2


DANH SÁCH BẢNG ...................................................................................................................................3
LỜI NÓI ĐẦU ..............................................................................................................................................4
PHẦN I: TỔNG QUAN VỀ FPGA VÀ KIT XILINX. ................................................................................5
1. Tổng quan về FPGA. ..............................................................................................................................5
1.1. Khái niệm về FPGA. ......................................................................................................................5
1.2. Cấu trúc cơ bản FPGA. ..................................................................................................................6
1.3. Quy trình thiết kế FPGA. ...............................................................................................................9
1.4. Giới thiệu về Kit Xilinx Spartan 6 Nexys 3. ............................................................................... 14
PHẦN 2: TỔNG QUAN VỀ NGÔN NGỮ HDL. ..................................................................................... 15
1. Ngôn ngữ HDL. ................................................................................................................................... 15
1.1. Khái niệm .................................................................................................................................... 15
1.2. Chức năng của HDL. ................................................................................................................... 15
2. Ngôn ngữ mô tả phần cứng Verilog. .................................................................................................. 15
2.1. Giới thiệu về ngôn ngữ Verilog. .................................................................................................. 15
2.2. Các kiểu dữ liệu trong Verilog. ................................................................................................... 17
2.3. Cấu trúc một module. .................................................................................................................. 19
2.4. Các phép gán trong Verilog......................................................................................................... 20
2.5. Cấu trúc always và initial. ........................................................................................................... 21
2.6. Finite State machine – Thiết kế máy trạng thái. .......................................................................... 23
PHẦN 3: THIẾT KẾ MODULE PHÁT XUNG VUÔNG 10 TẦN SỐ TRÊN FPGA .............................. 25
1. Mô tả: Module nhận xung clock của hệ thống và chia nhỏ nó thành các tần số khác nhau từ 180k
– 200k ..................................................................................................................................................... 25
2. Kết quả (Đo bằng Oxilo Scope) ....................................................................................................... 26
KẾT LUẬN ................................................................................................................................................ 32
TÀI LIỆU THAM KHẢO .......................................................................................................................... 33

1
DANH SÁCH HÌNH ẢNH

Hình 1Kiến trúc tổng quan FPGA................................................................................................... 6


Hình 2 Khối logic FPGA ................................................................................................................ 6
Hình 3 Configurable Logic Blocks. ................................................................................................ 7
Hình 4 Hệ thống chuyển mạch liên kết ........................................................................................... 8
Hình 5 Tổ hợp logic ...................................................................................................................... 10
Hình 6 Mapping ............................................................................................................................ 11
Hình 7 Routing .............................................................................................................................. 12
Hình 8 Phần mềm ISE 14.7. .......................................................................................................... 13
Hình 9 Digilent Adept. ................................................................................................................. 13
Hình 10 Kit Spartan 6 Nexys 3 ..................................................................................................... 14
Hình 11 Khối FSM ........................................................................................................................ 23
Hình 12: Thiết kế khối chia tần số ................................................................................................ 25
Hình 13: Xung vuông tần số 180kHz............................................................................................ 26
Hình 14: Xung vuông tần số 182kHz............................................................................................ 27
Hình 15: Xung vuông tần số 184kHz............................................................................................ 27
Hình 16: Xung vuông tần số 186kHz............................................................................................ 28
Hình 17: Xung vuông tần số 188kHz............................................................................................ 28
Hình 18: Xung vuông tần số 190kHz : ......................................................................................... 29
Hình 19: Xung vuông tần số 192kHz............................................................................................ 29
Hình 20: Xung vuông tần số 194kHz............................................................................................ 30
Hình 21: Xung vuông tần số 196kHz............................................................................................ 30
Hình 22: Xung vuông tần số 198kHz............................................................................................ 31
Hình 23: Xung vuông tần số 200kHz............................................................................................ 31

2
DANH SÁCH BẢNG

Bảng 1: Mô tả tín hiệu của module ............................................................................................................ 26

3
LỜI NÓI ĐẦU
Thế kỷ 21 là thế kỷ công nghệ thông tin va kỹ thuật số với sự phát triển và ứng dụng rộng
rãi của các bộ bi xử lý. Bằng việc đưa sức mạnh kỹ thuật số vào thực tiễn, các bộ vi xử lý ngày
một thay đổi cách sống của loài người. Các vật dụng như máy tính, máy tính bảng, điện thoại,..
của chúng ta đang ngày càng thông minh hơn, mạnh mẽ và nhanh hơn nhờ các bộ vi xử lý. Trong
đó công nghệ FPGA xuất hiện như một giải pháp cơ bản cho vấn đề tranh thủ thời gian để đưa ra
thị trường và tránh rủi ro tài chính trong quá trình nghiên cứu sản phẩm của công nghệ điện tử.
FPGA là loại thiết bị khả trình (PLA) tiên tiến nhất hiện nay của ngành công nghệ chế tạo IC
chuyên biệt vẫn được gọi là ASIC.

Với sự phát triển của công nghệ thông tin như hiện nay thì việc nghiên cứu về công nghệ FPGA
và ứng dụng xử lý dữ liệu nhanh ngày càng được quan trâm hơn. FPGA mới nhất hiện nay đang
được biết đến với rất nhiều tính năng cao cấp và mạnh mẽ. Nhưng để phù hợp với khả năng
nghiên cứu của sinh viên, em xin chọn kit Spartan 6 nexys 3 phổ biến cho sinh viên để làm đề
tài. Đề tài của em là “Thiết kế bộ phát xung vuông 10 tần số trên FPGA”.
Đề tài của em gồm 4 phần:
- Phần I: Tổng quan về FPGA và KIT Xilinx.
- Phần II: Tổng quan về ngôn ngữ HDL.
- Phần III: Thiết kế module phát xung vuông 10 tần số.
Em xin cảm ơn thầy PGS.TS Nguyễn Văn Đức và TS. Nguyễn Thu Nga đã tận tình chỉ bảo
em trong xuất quá trình thực hiện đề tài và cùng các anh hướng dẫn đã hỗ trợ em trong quá trình
thực hiện đề tài.

4
PHẦN I: TỔNG QUAN VỀ FPGA VÀ KIT XILINX.
1. Tổng quan về FPGA.
1.1. Khái niệm về FPGA.
Field-programmable gate array (FPGA) là một loại mạch tích hợp cỡ lớn dùng cấu trúc
mảng phần tử logic mà người dùng có thể lập trình được. Chữ field ở đây muốn chỉ đến khả năng
tái lập trình "bên ngoài" của người sử dụng, không phụ thuộc vào dây chuyền sản xuất phức tạp
của nhà máy bán dẫn. Vi mạch FPGA được cấu thành từ các bộ phận:

• Các khối logic cơ bản lập trình được (logic block)


• Hệ thống mạch liên kết lập trình được
• Khối vào/ra (IO Pads)
• Phần tử thiết kế sẵn khác như DSP slice, RAM, ROM, nhân vi xử lý...

FPGA cũng được xem như một loại vi mạch bán dẫn chuyên dụng ASIC, nhưng nếu so
sánh FPGA với những ASIC đặc chế hoàn toàn hay ASIC thiết kế trên thư viện logic thì FPGA
không đạt đựợc mức độ tối ưu như những loại này, và hạn chế trong khả năng thực hiện những
tác vụ đặc biệt phức tạp, tuy vậy FPGA ưu việt hơn ở chỗ có thể tái cấu trúc lại khi đang sử
dụng, công đoạn thiết kế đơn giản do vậy chi phí giảm, rút ngắn thời gian đưa sản phẩm vào sử
dụng.

Còn nếu so sánh với các dạng vi mạch bán dẫn lập trình được dùng cấu trúc mảng phần tử
logic như PLA, PAL, CPLD thì FPGA ưu việt hơn các điểm: tác vụ tái lập trình của FPGA thực
hiện đơn giản hơn; khả năng lập trình linh động hơn; và khác biệt quan trọng nhất là kiến trúc
của FPGA cho phép nó có khả năng chứa khối lượng lớn cổng logic (logic gate), so với các vi
mạch bán dẫn lập trình được có trước nó.

Thiết kế hay lập trình cho FPGA được thực hiện chủ yếu bằng các ngôn ngữ mô tả phần
cứng HDL như VHDL, Verilog, AHDL, các hãng sản xuất FPGA lớn như Xilinx, Altera thường
cung cấp các gói phần mềm và thiết bị phụ trợ cho quá trình thiết kế, cũng có một số các hãng
thứ ba cung cấp các gói phần mềm kiểu này như Synopsys, Synplify... Các gói phần mềm này có
khả năng thực hiện tất cả các bước của toàn bộ quy trình thiết kế IC chuẩn với đầu vào là mã
thiết kế trên HDL (còn gọi là mã RTL).

5
1.2. Cấu trúc cơ bản FPGA.

Hình 1Kiến trúc tổng quan FPGA

1.2.1: Khối logic.

Hình 2 Khối logic FPGA

Phần tử chính của FPGA là các khối logic (logic block). Khối logic được cấu thành từ
LUT và một phần tử nhớ đồng bộ flip_flop, LUT (Look up table) là khối logic có thể
thực hiện bất kì hàm logic nào từ 4 đầu vào, kết quả của hàm này tùy vào mục đích mà
gửi ra ngoài khối logic trực tiếp hay thông qua phần tử nhớ flip-flop.Configurable

6
Logic Blocks (CLBs). Các dòng FPGA của Xilinx còn sử dụng khái niệm slice, 1
Slice tạo thành từ gồm 2 khối logic, số lượng các Slices thay đổi từ vài nghìn đến vài
chục nghìn tùy theo loại FPGA. 4 slices tạo thành một Configurable Logic Blocks
(CLBs). CLBs là phần tử cơ bản cấu thành FPGA, là nguồn tài nguyên logic chính tạo
nên các mạch logic đồng bộ lẫn không đồng bộ.Nếu nhìn cấu trúc tổng thể của mảng
LUT thì ngoài 4 đầu vào kể trên còn hỗ trợ thêm 2 đầu vào bổ sung từ các khối logic
phân bố trước và sau nó nâng tổng số đầu vào của LUT lên 6 chân. Cấu trúc này là
nhằm tăng tốc các bộ số học logic.

Hình 3 Configurable Logic Blocks.

7
1.2.2: Hệ thống mạch liên kết.

Hình 4 Hệ thống chuyển mạch liên kết

Mạng liên kết trong FPGA được cấu thành từ các đường kết nối theo hai phương ngang
và đứng, tùy theo từng loại FPGA mà các đường kết nối được chia thành các nhóm khác nhau, ví
dụ trong XC4000 của Xilinx có ba loại kết nối: ngắn, dài và rất dài. Các đường kết nối được nối
với nhau thông qua các khối chuyển mạch lập trình được (programmable switch), trong một khối
chuyển mạch chứa một số lượng nút chuyển lập trình được đảm bảo cho các dạng liên kết phức
tạp khác nhau.

1.2.3: Các phần tử tích hợp sẵn


Ngoài các khối logic tùy theo các loại FPGA khác nhau mà có các phần tử tích hợp thêm
khác nhau, ví dụ để thiết kế những ứng dụng SoC, trong dòng Virtex 4,5 của Xilinx có chứa
nhân xử lý PowerPC, hay trong Atmel FPSLIC tích hợp nhân AVR…, hay cho những ứng dụng
xử lý tín hiệu số DSP trong FPGA được tích hợp các DSP slices là bộ nhân cộng tốc độ cao,
thực hiện hàm A*B+C, ví dụ dòng Virtex của Xilinx chứa từ vài chục đến hàng trăm DSP slices
với A, B, C 18-bit.

8
1.2.4: Block Ram.

Ngoài ra những FPGA của Xilinx còn có block RAM, có thể mường tượng như là bộ nhớ
nhỏ nằm trong FPGA. Những FPGA này tuy nhỏ (khoảng vài chục ký lô bit cho đến vài triệu bit
tùy theo loại FPGA) nhưng có thể dùng để tạo một bộ nhớ nhỏ như ROM, FIFO.

1.3. Quy trình thiết kế FPGA.


1.3.1. Mô tả về thiết kế (Specification)
Khi xây dựng một chip khả trình (FPGA) với ý nghĩa dành cho một ứng dụng riêng biệt,
vì xuất phát từ mỗi ứng dụng trong thực tiễn cuộc sống, sẽ đặt ra yêu cầu phải thiết kế IC thực
hiện tối ưu nhất những ứng dụng đó. Bước đầu tiên của quy trình thiết kế này có nhiệm vụ tiếp
nhận các yêu cầu của thiết kế và xây dựng nên kiến trúc tổng quát của thiết kế.

1.3.2. Mô tả thiết kế ( Design Specification).


Trong bước này, từ những yêu cầu của thiết kế và dựa trên khả năng của công nghệ hiện có,
người thiết kế kiến trúc sẽ xây dựng nên toàn bộ kiến trúc tổng quan cho thiết kế. Nghĩa là trong
bước này người thiết kế kiến trúc phải mô tả được những vấn đề sau:

• Thiết kế có những khối nào?


• Mỗi khối có chức năng gì?
• Hoạt động của thiết kế và của mỗi khối ra sao ?
• Phân tích các kỹ thuật sử dụng trong thiết kế và các công cụ, phần mềm hỗ trợ thiết
kế.

Một thiết kế có thể được mô tả sử dụng ngôn ngữ mô tả phần cứng, như VHDL hay Verilog
HDL hoặc có thể mô tả qua bản vẽ mạch (schematic capture). Một thiết kế có thể vừa bao gồm
bản vẽ mạch mô tả sơ đồ khối chung, vừa có thể dùng ngôn ngữ HDL để mô tả chi tiết cho các
khối trong sơ đồ.

1.3.3. Mô phỏng logic(Function simulation).

Sau khi mô tả thiết kế, người thiết kế cần mô phỏng tổng thể thiết kế về mặt chức năng để kiểm
tra thiết kế có hoạt động đúng với các chức năng yêu cầu.

9
1.3.4: Tổng hợp logic (Logic Synthesis).
Tổng hợp logic là quá trình tổng hợp các mô tả thiết kế thành sơ đồ bố trí mạch (netlist).
Quá trình chia thành 2 bước:

• Chuyển đổi các mã RTL, mã HDL thành mô tả dưới dạng các biểu thức đại số Boolean.
• Dựa trên các biểu thức này kết hợp với thư viện tế bào chuẩn sẵn có để tổng hợp nên một
thiết kế tối ưu.

Hình 5 Tổ hợp logic

1.3.5: Hiệu chỉnh các kết nối (Datapath Schemetic).


Nhập netlist và các ràng buộc về thời gian vào một công cụ phân tích thời gian (timing
analysic). Công cụ phân tích này sẽ tách rời tất cả các kết nối của thiết kế, tính thời gian trễ của
các kết nối dựa trên các ràng buộc. Dựa trên kết quả phân tích (report) của công cụ phân tích, xác
định các kết nối không thỏa mãn về thời gian. Tùy theo nguyên nhân dẫn đến không thỏa mãn
mà ta có thể viết lại mã và tiến hành lại tổng hợp logic hoặc hiệu chỉnh lại các ràng buộc.

1.3.6: Thực thi (Implementation).


Quá trình gồm các bước:

10
- Ánh xạ (mapping hay còn gọi fitting - ăn khớp) : chuẩn bị dữ liệu đầu vào, xác định kích
thước các khối. Các khối này sẽ phải phù hợp với cấu trúc của 1 tế bào cơ bản của FPGA. (gồm
nhiều cổng logic) và đặt chúng vào các vị trí tối ưu cho việc chạy dây.
- Đặt khối và định tuyến (place and route) : Đặt khối là đặt các khối ánh xạ vào các tế bào
(cell) ở vị trí tối ưu cho việc chạy dây. Định tuyến là bước này thực hiện việc nối dây các tế bào.
- Để thực hiện việc này, chúng ta cần có các thông tin sau:

o Các thông tin vật lý về thư viện tế bào, ví dụ kích thước tế bào, các điểm để kết nối, định
thời, các trở ngại trong khi đi dây.
o Một netlist được tổng hợp sẽ chỉ ra chi tiết các instance và mối quan hệ kết nối bao gồm
cả các đường dẫn bị hạn chế trong thiết kế.
o Tất cả các yêu cầu của tiến trình cho các lớp kết nối, bao gồm các luật thiết kế cho các
lớp chạy dây, trở kháng và điện dung, tiêu thụ năng lượng, các luật về sự dẫn điện trong mỗi lớp.

Hình 6 Mapping

11
Hình 7 Routing

1.3.7: Quá trình nạp và lập trình.


Sau quá trình thực hiện, thiết kế cần được nạp vào FPGA dưới dạng dòng bit(bitstream).
Quá trình nạp thiết kế (download) vào FPGA thường nạp vào bộ nhớ bay hơi, ví dụ như SRAM.
Thông tin cấu hình sẽ được nạp vào bộ nhớ. Dòng bit được truyền lúc này sẽ mang thông tin
định nghĩa các khối logic cũng như kết nối của thiết kế. Tuy nhiên, lưu ý rằng, SRAM sẽ mất dữ
liệu khi mất nguồn nên thiết kế sẽ không lưu được đến phiên làm việc kế tiếp.Lập trình
(program) là thuật ngữ để mô tả quá trình nạp chương trình cho các bộ nhớ không bay hơi, ví dụ
như PROM. Như vậy, thông tin cấu hình vẫn sẽ được lưu trữ khi mất nguồn.

o Phần mềm ISE 14.7.

Phần mềm ISE 14.7, là phần mềm được phát trển bởi Xilinx hỗ trỡ các kit đời Spartan-6,
Virtex-6 và Coolrunner. Các dòng mới của Xilinx dung phần mềm Vivado để tổng hợp và
nạp xuống Kit: Virtex-7, Kintex7, Artix-7 và Zynq-7000.

12
Hình 8 Phần mềm ISE 14.7.

Khi tổng hợp bằng ISE 14.7 sẽ tạo một file .bit tương ứng với module top được tạo ra.
Chúng ta cần nạp file đó xuống Kit để Kit hoạt động như những gì yêu cầu trong module. Phần
mềm hỗ trợ nạp Kit đó là: Digilent Adept.

Hình 9 Digilent Adept.

13
1.4. Giới thiệu về Kit Xilinx Spartan 6 Nexys 3.

Hình 10 Kit Spartan 6 Nexys 3

Các tính năng của Kit:

- Kit hoạt động ở tần số 100Mhz.


- 16Mbyte Cellular Ram.
- 16Mbyte SPI.
- 10/100 Ethernet PHY.
- USB2 cho chạy chương trình và truyền dữ liệu xfer.
- USB-UART và USB-HID.
- 8 bit VGA.
- GPIO: 8 Leds. 5 nút bấm, 8 công tắc và 4 led matrix 7 thanh.
- 2278 slices, mỗi slices bao gồm 4 Lut 6 đầu vào, 8 fil-flop.
- 576Kbits cho khối Ram phục vụ xử lý nhanh.
- 32 DSP.
- 500Mhz + tốc độ của clock.

14
PHẦN 2: TỔNG QUAN VỀ NGÔN NGỮ HDL.
1. Ngôn ngữ HDL.
1.1. Khái niệm
Ngôn ngữ mô tả phần cứng ( Hardwear Description Language) là một ngôn ngữ máy tính
chuyên dụng được sử dụng để mô tả cấu trúc và hành vi của các mạch điện tử, phổ biến nhất là
mạch lo gic số (digital logic circuit). Mạch logic số là mạch gồm các phần tử logic như: AND,
OR, XOR, NOT, BUFFER… tập hợp với nhau để thực hiện một chức năng nào đó.

1.2. Chức năng của HDL.


HDL là ngôn ngữ thuộc lớp ngôn ngữ máy tính(computer language):

➢ Dùng miêu tả cấu trúc và hoạt động một vi mạch.


➢ Dùng mô phỏng, kiểm tra hoạt động vi mạch.
➢ Biểu diễn hành vi theo thời gian và cấu trúc không gian của mạch.
➢ Bao gồm những ký hiệu biểu diễn thời gian và sự đồng thời (time and concurrence).
Ưu điểm:
➢ Loại bỏ công đoạn chuyển đổi thủ công từ mô tả thông tin thiết kế thành các phương
trình logic.
➢ Dễ quản lí những mạch lớn và phức tạp.
➢ Độc lập với công nghệ.
➢ Cho phép tái sử dụng những thiết kế đã có sẵn.
➢ Mạch có thể được tổng hợp từ đặc tả.

HDL được sử dụng để thiết kế các phần tử logic lập trình được (Programable Logic Devices-
PLD) từ các PLD đơn giản đến CPLD và FPGA phức tạp. Hiện nay có nhiều HDL đang được sủ
dụng trong đó phổ biến nhất là VHDL, Verilog và Abel. Đề tài em làm trên ngôn ngữ mô tả
Verilog. Sau đây em xin trình bày về ngôn ngữ mô tả phần cứng Verilog.

2. Ngôn ngữ mô tả phần cứng Verilog.


2.1. Giới thiệu về ngôn ngữ Verilog.
Verilog là ngôn ngữ mô tả phần cứng (Hardware Description Language) được sử dụng
trong việc thiết kế các các hệ thống số, các mạch tích hợp: như bộ nhớ RAM, bộ vi xử lý hoặc
đơn giản là D-FlipFlop...Thiết kế số FPGA bằng ngôn ngữ verilog cũng giống như bạn viết
chương trình cho vi điều khiển bằng ngôn ngữ ChoặcAssembly. Học Verilog không khó nếu đẫ

15
có nền tảng về một ngôn ngữ nào đó, nó cũng giống tương tự C nên sẽ không khó khăn khi bắt
đầu học Verilog. Ngoài Verilog còn có một ngôn ngữ mô tả phần cứng khá phổ biến khác là
VHDL. Verilog và VHDL là 2 ngôn ngữ mô tả phần cứng thông dụng nhất hiện nay, có thể chọn
một trong 2 ngôn ngữ để có thể học được FPGA hoặc cao hơn là ASIC. Đối với em thì em chọn
Verilog vì ngôn ngữ này tiếp cận khá dễ và đặc biệt cú pháp rất giống C, một khi học được
Verilog bạn có thể học VHDL dễ dàng.

Verilog HDL có thể được sử dụng để thiết kế hệ thống số ở nhiều mức khác nhau, ví dụ ở
mức cao như các mô hình đặc trưng đến các mức thấp như mô hình bố trí dây, điện trở,
transistor trên một mạch tích hợp; mô tả các cổng logic. Flipflop trong hệ thống số; mô tả thanh
ghi và sự dịch chuyển dữ liệu giữa các thanh ghi (RTL- Register Transfer Level).

2.2. Mục đích sử dụng ngôn ngữ Verilog.

Hệ thống số là một hệ thống phức tạp bậc cao. Ở cấp độ chi tiết nhất, chúng có thể bao
gồm hàng nghìn thành phần như: các transistor hoặc các cổng logic cho nên vơíhệ thống số lớn
thiết kế ở mức cổng cũng không còn sử dụng nữa. Qua nhiều thập kỷ, giản đồ logic của thiết kế
logic cũng không còn nhiều. Ngày nay sự phức tạp của phần cứng đã tăng lên ở một mức độ mà
giản đồ của cổng logic hầu như vô ich khi nó chỉ biểu diễn mạng lưới phức tạp các liên kết
không theo chức năng của thiết kế. Từ những năm 1970, các kỹ sư điện và máy tính đổi hướng
theo ngôn ngữ mô tả phần cứng (HDL). Và Verilog ra đời để phục vụ mục đích trên.

Verilog cho phép các nhà thiết kế logic thiết kế và mô tả hệ thống số ở nhiều mức độ
khác nhau và có sự hỗ trợ từ các công cự thiết kế bằng máy tính để giúp cho việc xử lý thiết kế ở
những mức độ khác nhau.

Cách sử dụng cơ bản của verilog HDL trong thiết kế mạch tích hợp là mô phỏng thiết
kế và tạo mẫu trên FPGA trước khi chuyển sang sản xuất. Mục tiêu của Verilog không phải
tạo ra chip VLSI mà sử dụng Verilog để mô tả một cách chính xác chức năng của bất kỳ hệ
thống số nào và nập chương chình mẫu lên FPGA ví dụ như: máy tính, các bộ vi xử lý… tuy
tốc đọ chậm và lãng phí diện tích hơn. Những thiết kế mức thấp hơn trong Verilog được thực
hiện trên VLSI để đạt tốc độ cực đại và có diện tích nhở hơn. Tuy nhiên sử dụng thiết kế
dùng Verilog trên FPGA sẽ tiết kiệm chi phí và thời gian để thiết kế tạo ra sản phẩm đưa ra
thị trường.

16
2.2. Các kiểu dữ liệu trong Verilog.
Có hai kiểu dữ liệu trong Verilog:

- Kiểu dữ liệu Net.


- Kiểu dữ liệu thanh ghi.

Nếu các đối tượng dữ liệu net ( wire, wand, wor, tri,…) hoặc regisrter( reg) được khai
báo mà không có tầm theo mặc định các đối tượng này rộng 1 bit và được tham chiếu dạng
vô hướng. Nếu một độ rộng được khai báo đổi tượng có nhiều bit, thì sẽ gọi là vector. Một
vector có thể đươc tham chiếu trong trạng thái tồn bộ, một phần hoặc từng bit riêng rẽ khi
cần.

2.1.1. Kiểu dữ liệu Net.


Mô tả kết nối dây dẫn trong một mạch điện và được dùng để kết nối các cổng hay các
module. Giá trị của Net có thể đọc, nhưng không được gán trong hàm (function) hoặc khối
(block). Một net sẽ không lưu giữ giá trị của nó. Nó phải được điều khiển bởi một trong hai
cách sau:

➢ Bằng việc kết nối net đến ngõ ra của một cổng hay một module.
➢ Bằng việc gán một giá trị đến net trong một phép gán nối tiếp.

Kiều dữ liệu Wire là một kiểu dữ liệu sử dụng phổ biến thuộc kiểu Net, wire là một
kiểu dữ liệu đơn giản để kết nối giữa liệu hai cổng,module hay trong phép gán nối
tiếp….Ngoài ra còn có nhiều kiểu dữ liễu khác như wand, wor, tri….

Cú pháp đơn giản :

Wire [msb:lsb] tên biến wire.


Wand [msb:lsb] tên biến wand.
Wor [msb:lsb] tên biến wor.
Tri [msb:lsb] tên biến tri.

17
2.1.2. Kiểu dữ liệu thanh ghi (reg).
Khai báo reg được thực hiện cho tất cả những tín hiệu mà được điều khiển từ những mô tả
hành vi. Loại dữ liệu reg lưu giữ một giá trị được cho đến khi nó được gán một giá trị mới
trong một mô tả tuần tự (khối initial hoặc always). Có thể hiểu Reg là một kiểu net có khả năng
lưu trữ giá trị và có thể xem là một register trong phần cứng.

Cú pháp đơn giản :

Reg [msb:lsb] tên biến reg.

2.1.3. Khai báo các port.


Những từ khoá Input, Output, Inout biểu thì đầu vào, đầu ra, và port hai chiều của
một module hoặc task. Một port đầu ra có thể được cấu hình từ các dạng: wire, reg, wand,
wor, hoặc tri. Mặc định là wire. Kiểu reg chỉ xuất hiện ở cổng Output hay phét gán nối tiếp
có nhớ.

Cú pháp đơn giản:

Input [msb:lsb] port đầu vào.


Output [msb:lsb] port đầu ra.
Inout [msb:lsb] port đầu vào,ra hai chiều.

2.1.4. Interger( Số nguyên).


Integer là một biến đa năng. Trong tổng hợp chúng được dùng chủ yếu cho vòng lặp,
tham số, và hằng số. Chúng hoàn toàn là reg. Tuy nhiên chúng chứa dữ liệu bằng những số
có dấu, trong khi đó khai báo dạng reg chứa chung bằng số không dấu. Nếu chúng chứa
những số mà không định nghĩa thời gian biên dịch thì kích thước mặc định là 32 bit. Nếu
chúng chứa hằng, sự tổng hợp điều chỉnh các số có kích thước nhỏ nhất cần thiết cho sự biên
dịch.

Cú pháp:

Integer tên biến nguyên;


…tên hằng nguyên…;

18
2.1.5. Time.
Time là một lượng 64 bit mà được sử dụng cùng với $time, hệ thống thao tác chứa
lượng thời gian mô phỏng. Time không được hỗ trợ tổng hợp và và thế chỉ được dùng trong
mục đích mô phỏng.

Cú pháp đơn giản:

Time biến time;

2.1.6. Parameter.
Trong Verilog HDL, loại dữ liệu tham số (parameter) không thuộc loại dữ liệu biến
(variables: reg, integer, time, real, realtime) cũng như loại dữ liệu net. Dữ liệu tham số không
phải là biến mà chúng là hằng số. Có hai loại tham số trong Verilog đó là:

➢ Tham số module (module parameter): parameter và localparam.


➢ Tham số đặc tả (specify parameter): specparam.

Cả hai loại tham số trên đều được phép khai báo độ rộng. Mặc định, parameter và
specparam sẽ có độ rộng đủ để chứa giá trị của hằng số, ngoại trừ khi tham số đó có khai báo độ
rộng. Việc khai báo trùng tên giữa net , biến hay tham số là không được phép.

Cú pháp:

Parameter par_1= giá trị, par_2= giá trị, …;


Parameter [msb:lsb] par_3 = giá trị;

2.3. Cấu trúc một module.


Module có cấu trúc như sau:

module tên_module (các cổng vào, ra);


input [msb:lsb] các cổng input;
output [msb:lsb] các cổng output;
inout [msb:lsb] các cổng vừa input vừa output;
... các câu lệnh ...
endmodule

19
Giải thích:

➢ Dòng đầu tiên của một mô-đun khai báo tên và danh sách các cổng vào ra.Bạn phải khai
báo đủ các cổng vào ra trong khối thiết kế nếu không khi chạy chương trình sẽ báo lỗi.
Mỗi cổng được phân tách bằng dấu phẩy (,)
➢ Ba dòng tiếp theo là khai báo tất cả các cổng vào ra và độ rộng của của các cổng đó.Mặc
định cổng vào ra sẽ có độ rộng là 1 bit. Sau khi khai báo các cổng chúng ta sẽ khai báo
loại biến cho các cổng vào ra.Thường là reg và wire. Nếu không khai báo mặc định các
cổng sẽ có dữ liệu là wire
➢ Các đầu vào là dạng wire khi dữ liệu được chốt bên ngoài module. Các đầu ra là dạng reg
nếu các t/hiệu của chúng được chứa trong khối always hoặc initial.
➢ Các dòng sau là các câu lệnh ta viết để thực hiện một chức năng nào đó.
➢ Kết thúc một câu trúc module là một câu lệnh endmodule.

Cách gọi module con:

Các module có thể được khởi tạo từ bên trong mô-đun khác. Khi một mô-đun được khởi tạo,
kết nối đến các cổng của các module phải được xác định. Có hai cách gọi để kết nối cổng của
một module là: kết nối theo địa chỉ và kết nối theo tên.

➢ Kết nối theo địa chỉ: thứ tự các cổng trong module chính phải phù hợp với thứ tự xuất
hiện các cổng trong module con.
➢ Kết nói theo tên: không cần chính xác về thứ tự và có quy ước sẵn.Các bạn nhìn ví dụ sẽ
hiểu..

Hai loại kết nối cổng của module không được lẫn lộn, kết nối tới cổng đặt thù của thể hiện
module sẽ hoặc tất cả theo thứ tự hoặc tất cả theo tên.

2.4. Các phép gán trong Verilog.


Phép gán liên tục:

Phép gán liên tục là phép gán cơ bản nhất trong Verilog.Phép gán liên tục dùng trong cách
mạch tổ hợp logic. Phép gán liên tục được dùng để gán các giá trị cho wire của module, hay là
cập nhật giá trị của các port(wire). Nó được đặt bên ngoài khối always@ hoặc initial. Lưu ý rằng
câu lệnh phép gán liên tục xảy ra đồng thời và liên tục được thực hiện trong suốt quá trình mô

20
phỏng.Thứ tự các lệnh gán không quan trọng.Bất kì thay đổi nào của bên phải phép gán sẽ làm
cho giá trị bên trái thay đổi ngay lập tức.

Cú pháp :

net_data_type [ delay ] [ size ]= expression(biểu thức); // khai báo


kiểu dữ liệu cho biến.
assign [ #( delay ) ] net_name = expression; // explicit

Giải thích:

➢ Net_data_type : kiểu dữ liệu của đầu vào hoặc đầu ra như: wire, reg
➢ Delay: khoảng thời gian trễ trong các phép gán.
➢ Size: độ rộng bit của các biến trong phép gán.
➢ Expression: biểu thức hoặc một biến nào đó.

Phép gán liên tục sẽ ngầm khai báo kiểu dữ liệu net cho từng câu lệnh. Một phép gán liên tục
đầy đủ thường sử dụng một trong 2 cách: một là khai báo kiểu net, hai là câu lệnh gán liên tục
assign.

Phép gán assign: phía bên trái của phép gán là một biến còn phía bên phải là một biểu thức.
Kiểu dữ liệu bên trái bắt buộc phải là net và bên phải có thể là kiểu net, reg... Phía bên trái tách
biệt với phía bên phải bằng kí tự “=”. Gía trị của phía bên trái thay đổi khi giá trị biểu thức bên
phải thay đổi.

2.5. Cấu trúc always và initial.


2.5.1. Khối always.
Khối always được dử dụng để mô tả sự kiện xảy ra trong các điều kiện. nhất định ví dụ if,
case....

Là cấu trúc chính trong khuôn mẫu RTL (Register Transfer Level).Khối always có thể
được dùng trong chốt, flip flop hay các kết nối logic.Tất cả các khối always trong một module
thực thi một cách liên tục.Nếu các lệnh của khối always nằm trong phạm vi khối begin… end thì
được thực thi liên tục, nếu nằm trong khối fork… join, chúng được thực thi đồng thời (chỉ trong
mô phỏng). Khối always thực hiện bằng mức, cạnh lên/xuống của một or nhiều tín hiệu (các tín
hiệu cách nhau bởi từ khóa OR).

21
Phân loại:

Khối always gồm 2 loại chính :

➢ always @(posedge Clock) .


➢ always @(*).

always @(posedge Clock) : always tích cực ở sườn lên xung clock hoặc always@(negedge
Clock) always tích cực ở sườn xuống xung clock. Khối always được sử dụng trong mạch tuần tự
hoặc Register. Chỉ dùng phép gán non-blocking trong khối always@(posedge Clock). Gía trị của
biến thay đổi trong khối always@(posedge Clock) phụ thuộc vào xung clock( sườn lên hoặc
sườn xuống).

always @( * ) Blocks: dùng trong mạch tổ hợp hoặc các cổng logic.Chỉ dùng phép gán
blocking. Dò sự thay đổi theo mức cổng nghĩa là đầu ra thay đổi khi đầu vào thay đổi. Có hai
cách viết hoặc là để (*) hoặc bạn phải liệt kê tất cả các đầu vào của khối.

2.5.2. Khối initial.

Tương tự khối always nhưng khối initial chỉ thực thi một lần từ lúc bắt đầu( không bắt
buộc phải là đầu tiên) của quá trình mô phỏng. Khối này là tiêu biểu để biến khởi chạy và chỉ
định dạng sóng tín hiệu trong lúc mô phỏng. Khối initial chỉ dành cho thực hiện mã
testbench.Khi chương trình tổng hợp khối initial sẽ được bỏ qua.

Cú pháp:

initial <statements>
//OR
initial begin
<statement>
<statement>
<statement>
end
//OR
initial <delay_or_event_control> begin
//delay_or_event_control could be a delay, an edge, or level
<statement>

22
<statement>
<statement>
end

2.6. Finite State machine – Thiết kế máy trạng thái.


Một FSM bao gồm các mạch tổ hợp, tuần tự và đầu ra tổ hợp. Mạch tổ hợp được sử dụng
để quyết định các trạng thái tiếp theo của FSM, mạch tuần tự được sử dụng để lưu trữ các

trạng thái hiện tại của FSM. Mạch tổ hợp đầu ra: xác định tín hiệu ra của máy trạng thái phụ
thuộc vào trạng thái hiện tại và tín hiệu đầu vào.

Hình 11 Khối FSM

Các loại máy trạng thái:

Máy trạng thái có nhiều loại phụ thuộc vào việc code của các bạn(mình trình bày phía
dưới).Nhưng dù code theo thì máy trạng thái cũng có 2 loại cấu trúc chính là:

➢ Mealy State Machine: Đầu ra của máy trạng thái phụ thuộc vào trạng thái hiện tại và tín
hiệu đầu vào.
➢ Moore State Machine : Đầu ra của máy trạng thái chỉ phụ thuộc vào trạng thái hiện tại,
không phụ thuộc vào tín hiệu đầu vào.

23
Tùy vào nhu cầu mà chúng ta nên sử dụng loại Mealy hay Moore.Dù cho chúng ta dung loại
thì chúng cũng có 3 thành phần cơ bản: Mạch tổ hợp xác định trạng thái kế tiếp (next state),
Mạch tổ hợp xác định giá trị ngõ ra và mạch tuần tự lưu giữ trạng thái hiện tại (current state).

Encoding Style

Có nhiều loại code cho máy trạng thái như mình giới thiệu ở trên. Và sau đây là một số loại code
cơ bản phụ thuộc vào cách chúng ta biểu diễn trạng thái :

➢ Mã hóa nhị phân: mỗi trạng thái được biểu diện trong mã nhị phân (tức là 000, 001, 010
....).
➢ Mã hóa nhị phân: mỗi trạng thái được thể hiện trong mã nhị phân (tức là 000, 001, 010
....).
➢ One Hot: chỉ có một bit là ở mức cao và phần còn lại là mức ở thấp (tức là 0001, 0010,
0100, 1000).
➢ One Lạnh: chỉ có một bit là ở mức thấp, còn lại là ở mức cao (1110,1101,1011,0111).

24
PHẦN 3: THIẾT KẾ MODULE PHÁT XUNG VUÔNG 10 TẦN SỐ TRÊN FPGA

1. Mô tả
Module nhận xung clock của hệ thống và chia nhỏ nó thành các tần số khác nhau từ
180k – 200k

Hình 12: Thiết kế khối chia tần số

Tên tín hiệu Độ rộng Đầu vào/ Mô tả


(bits) đầu ra
Clk 1 Đầu vào Xung clock của mạch.
Reset 1 Đầu vào Tín hiệu reset cảu mạch.
Clk_out180 1 Đầu ra Đầu ra xung vuông tần số 180kHz.
Clk_out182 1 Đầu ra Đầu ra xung vuông tần số 182kHz.

25
Clk_out184 1 Đầu ra Đầu ra xung vuông tần số 184kHz.
Clk_out186 1 Đầu ra Đầu ra xung vuông tần số 186kHz.
Clk_out188 1 Đầu ra Đầu ra xung vuông tần số 188kHz.
Clk_out190 1 Đầu ra Đầu ra xung vuông tần số 190kHz.
Clk_out192 1 Đầu ra Đầu ra xung vuông tần số 192kHz.
Clk_out194 1 Đầu ra Đầu ra xung vuông tần số 194kHz.
Clk_out196 1 Đầu ra Đầu ra xung vuông tần số 196kHz.
Clk_out198 1 Đầu ra Đầu ra xung vuông tần số 198kHz.
Clk_out200 1 Đầu ra Đầu ra xung vuông tần số 200kHz.
Bảng 1: Mô tả tín hiệu của module

2. Kết quả (Đo bằng Oxilo Scope)

Hình 13: Xung vuông tần số 180kHz

26
Hình 14: Xung vuông tần số 182kHz

Hình 15: Xung vuông tần số 184kHz

27
Hình 16: Xung vuông tần số 186kHz

Hình 17: Xung vuông tần số 188kHz

28
Hình 18: Xung vuông tần số 190kHz :

Hình 19: Xung vuông tần số 192kHz

29
Hình 20: Xung vuông tần số 194kHz

Hình 21: Xung vuông tần số 196kHz

30
Hình 22: Xung vuông tần số 198kHz

Hình 23: Xung vuông tần số 200kHz

31
KẾT LUẬN

Kết quả, em tìm hiểu và nắm rõ được kiến thức về FPGA nói chúng và thực hành trên
KIT Spartan 6 nexys 3 nói riêng. Em đã định hình được cơ bản về FPGA, nắm vững kiến thức về
cách thiết kế một hệ thống số kết nối với FPGA. Rèn luyện thêm cho mình kiến thức mới, đó là
nền tảng rất tốt để giúp em công việc sau này.

Em xin một lần nữa gửi lời cảm ơn cảm ơn đến các thầy hướng dẫn là PGS.TS Nguyễn
Văn Đức và TS Nguyễn Thu Nga đã giúp em thực hiện đề tài này và em cũng xin lời cảm ơn đến
các anh các chị đã hướng dẫn em, các bạn cùng học FPGA đã hỗ trợ em thực hiện đề tài này.

32
TÀI LIỆU THAM KHẢO
[1]: FPGA Prototyping by Verilog Example – Pong P.Chu.

[2]: The Verilog Hardware Description Language - Thomas, D . E . / Moorby, Philip R .

[3]:Trang web http://vimach.net truy cập ngày cuối ngày 3/3/2019.

[4]:Trang web https://www.semiconvn.com truy cập ngày cuối 3/3/2019.

[5]: Trang web http://www.asic-world.com/ truy cập ngày cuối 3/3/2019.

[6]: Datasheet của kit Spartan 6 Nexys 3. Datasheet ADC_7705.

33

You might also like