Professional Documents
Culture Documents
1
DANH SÁCH HÌNH ẢNH
2
DANH SÁCH BẢNG
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:
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.
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.
7
1.2.2: Hệ thống 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.
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.
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ơ đồ.
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.
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
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.
13
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.
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 đó.
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.
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).
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:
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.
➢ 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….
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:
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.
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à:
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:
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á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.
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 :
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.
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:
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.
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
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.
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
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
26
Hình 14: Xung vuông tần số 182kHz
27
Hình 16: Xung vuông tần số 186kHz
28
Hình 18: Xung vuông tần số 190kHz :
29
Hình 20: Xung vuông tần số 194kHz
30
Hình 22: Xung vuông tần số 198kHz
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.
33