Bài giảng Thiết kế vi mạch lập trình được - Nguyễn Thế Dũng

1.1. Các khái niệm chung

1.1.1. Transistor

Transistor là một linh kiện bán dẫn thường được sử dụng như một thiết

bị khuếch đại hoặc một khóa điện tử. Transistor là phần tử cơ bản của mọi vi

mạch số tích hợp, từ các cổng logic đơn giản AND, OR, NOT. đến các loại

phức tạp như các mạch điều khiển ngoại vi, vi điều khiển, vi xử lý. Transistor

là khối đơn vị cơ bản xây dựng nên cấu trúc mạch ở máy tính điện tử và tất cả

các thiết bị điện tử hiện đại khác. Do đáp ứng nhanh và chính xác nên các

transistor được sử dụng trong nhiều ứng dụng tương tự và số, như khuếch đại,

đóng cắt, điều chỉnh điện áp, điều khiển tín hiệu, và tạo dao động. Transistor

cũng thường được kết hợp thành mạch tích hợp (IC).

Hình 1.1. Transistor

Transistor được làm từ vật liệu bán dẫn (semiconductor), là vật liệu vừa

có khả năng dẫn điện vừa có khả năng làm việc như những vật liệu cách điện,

khả năng này thay đổi tùy theo kích thích từ bên ngoài như nhiệt độ, ánh sáng,

trường điện từ, dòng điện. Chất bán dẫn dùng để cấu tạo transistor thường là

Germany (Ge) hoặc Silicon (Si) được pha tạp một lượng nhỏ Photpho (P) hoặc

Boron (B) với mục đích tăng mật độ electron (kiểu N) tự do hoặc tăng mật độ

lỗ trống (kiểu P) tương ứng trong tinh thể bán dẫn.

1.1.2. Vi mạch số tích hợp

Còn được gọi là IC - Intergrated Circuits, chip, là cấu trúc mạch điện

được thu nhỏ bằng cách tích hợp chủ yếu từ các transitor với mật độ cao, ngoài

ra còn có thể có các linh kiện điện thụ động khác trên một khối bán dẫn mỏng.

Các vi mạch tích hợp đều có một số lượng tín hiệu đầu vào và đầu ra để

thực hiện một chức năng cụ thể nào đó.5

a) b)

Hình 1.2. a) Mô hình Vi mạch số tích hợp b) Vi mạch tích hợp thực tế

Vi mạch tích hợp ra đời từ những năm 1960 và được ứng dụng rộng rãi

trong thực tế, đã và đang tạo ra cuộc cách mạng trong lĩnh vực điện tử. Ví dụ về

vi mạch tích hợp như các IC đa dụng (general purposes IC) họ 7400, 4000, các

dòng vi xử lý 80x86 dùng trong máy vi tính, chíp xử lý dùng cho điện thoại di

động, máy ảnh kỹ thuật số, các vi điều khiển dùng trong các thiết bị dân dụng, ti

vi, máy giặt, lò vi sóng. Các vi mạch này có mật độ tích hợp từ hàng vài chục

đến hàng trăm triệu, và hiện nay đã đến hàng tỷ transistor trong một miếng bán

dẫn có kích thước xấp xỉ kích thước đồng xu. Mật độ tích hợp được định nghĩa

là tổng số những phần tử tích cực (transistor hoặc cổng logic) chứa trên một đơn

vị diện tích của khối tinh thể bán dẫn. Theo mật độ tích hợp chia ra các loại vi

mạch sau:

- Vi mạch cỡ nhỏ SSI (Small scale integration), có hàng chục transistor

trong một vi mạch.

- Vi mạch cỡ vừa MSI (Medium scale integration), có hàng trăm

transistor trong một vi mạch.

- Vi mạch cỡ lớn LSI (Large scale integration), có hàng ngàn đến hàng

chục ngàn transistor trong một vi mạch.

- Vi mạch cực lớn VLSI (Very large scale integration), có hàng vạn, hàng

triệu, hàng chục triệu transistor và lớn hơn trong một vi mạch, tới thời điểm hiện

nay đã xuất hiện nhưng vi mạch có độ tích hợp đến hàng tỷ transitor.

- Vi mạch siêu lớn ULSI (Ultra large scale intergration), vi mạch có độ

tích hợp với mức độ hàng triệu transistor trở lên.

pdf 140 trang yennguyen 7280
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Thiết kế vi mạch lập trình được - Nguyễn Thế Dũng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Thiết kế vi mạch lập trình được - Nguyễn Thế Dũng

Bài giảng Thiết kế vi mạch lập trình được - Nguyễn Thế Dũng
TRƯỜNG ĐH CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG 
KHOA CÔNG NGHỆ ĐIỆN TỬ VÀ TRUYỀN THÔNG 
BÀI GIẢNG MÔN 
THIẾT KẾ VI MẠCH LẬP TRÌNH ĐƯỢC 
BIÊN SOẠN : NGUYỄN THẾ DŨNG 
Thái Nguyên, tháng 8 năm 2012 
 1
MỤC LỤC 
Chương 1: KIẾN THỨC CƠ SỞ ........................................................................ 4 
1.1. Các khái niệm chung ............................................................................... 4 
1.1.1. Transistor.......................................................................................... 4 
1.1.2. Vi mạch số tích hợp .......................................................................... 4 
1.1.3. Cổng logic ........................................................................................ 5 
1.1.4. Phần tử nhớ....................................................................................... 8 
1.1.5. Mạch logic tổ hợp ........................................................................... 10 
1.1.6. Mạch logic tuần tự .......................................................................... 11 
1.2. Các phương pháp thể hiện thiết kế......................................................... 12 
1.2.1. Mô tả bằng sơ đồ ............................................................................ 12 
1.2.2. Mô tả bằng HDL............................................................................. 14 
1.2. Yêu cầu với một thiết kế mạch logic số ................................................ 16 
1.3. Các công nghệ thiết kế mạch logic số ................................................... 17 
1.4. Kiến trúc của các IC khả trình .............................................................. 20 
1.4.2. Kiến trúc PAL ................................................................................ 23 
1.4.3. Kiến trúc PLA ................................................................................ 23 
1.4.4. Kiến trúc của GAL ......................................................................... 24 
1.4.5. Kiến trúc của FPGA ....................................................................... 26 
Chương 2: GIẢI PHÁP PHẦN CỨNG FPGA CỦA XILINX CHO THIẾT KẾ 
VI MẠCH SỐ .................................................................................................. 29 
2.1. Một số giải pháp cho thiết kế mạch logic số ......................................... 29 
2.1.1. Khái niệm FPGA............................................................................ 29 
2.1.2. Ứng dụng của FPGA trong xử lý tín hiệu số .................................. 32 
2.1.3. Công nghệ tái cấu trúc FPGA ....................................................... 33 
2.2. Kiến trúc của FPGA ............................................................................. 34 
2.2.1. Kiến trúc chung FPGA .................................................................. 34 
2.2.2. So sánh giữa cấu trúc nhỏ và cấu trúc lớn: ................................... 37 
2.2.3. So sánh giữa SDRAM Programming và Anti-fuse programming:38 
2.3.1. Khối logic khả trình...................................................................... 40 
2.3.3. Hệ thống kết nối khả trình............................................................. 60 
2.3.4. Các phần tử khác của FPGA........................................................... 62 
2.4. Các khối giao tiếp có trên mạch Xilinx Spartan 3E Starter Kitboard FPGA . 72 
2.4.1. Các thành phần chính của Xilinx Spartan 3E Starter Kitboard ......... 72 
2.4.2. Mạch nạp JTAG/PLATFORM FLASH XCF04 .............................. 73 
 2
2.4.3. Khối nguồn Power Supply .............................................................. 73 
2.4.4. Khối giao tiếp Keypad .................................................................... 73 
2.4.5. Khối 8x2 Led-Diod......................................................................... 73 
2.4.6. Khối Switch .................................................................................... 74 
2.4.7. Khối giao tiếp 4x7-seg Digits ......................................................... 74 
2.4.8. Khối giao tiếp RS232...................................................................... 74 
2.4.9. Khối giao tiếp USB – RS232 .......................................................... 74 
2.4.10. Khối giao tiếp PS/2 ....................................................................... 75 
2.4.11. Khối giao tiếp VGA ...................................................................... 75 
2.4.12. Khối giao tiếp LCD1602A ............................................................ 75 
2.4.13. Khối giao tiếp ADC/DAC............................................................. 75 
2.4.14. Khối giao tiếp Ethernet ................................................................. 76 
Chương 3: GIẢI PHÁP PHẦN MỀM CHO THIẾT KẾ VI MẠCH SỐ ........... 77 
3.1. Giới thiệu các phần mềm hỗ trợ thiết kế ................................................ 77 
3.1.1. Hãng Xilinx .................................................................................... 77 
3.1.2. ISE.................................................................................................. 77 
3.1.3. EDK ............................................................................................... 78 
3.1.4. System Generator 9.2...................................................................... 78 
3.2. Quy trình thiết kế FPGA tổng quát ........................................................ 78 
3.2.1. Mô tả thiết kế.................................................................................. 80 
3.2.2. Tổng hợp thiết kế............................................................................ 81 
3.2.3. Hiện thực hóa thiết kế ..................................................................... 87 
3.2.4. Cấu hình FPGA .............................................................................. 93 
3.3. Phần mềm thiết kế ISE của Xilinx ......................................................... 93 
3.3.1. Giới thiệu môi trường lập trình ....................................................... 93 
Chương 4: MỘT SỐ BÀI TOÁN THIẾT KẾ MẠCH SỐ TRÊN FPGA 
SPARTAN-3E STARTER KIT BOARD ......................................................... 96 
4.1. Điều khiển LED với Switch và Push button.......................................... 96 
4.1.1. Sơ đồ khối chức năng ..................................................................... 96 
4.1.2. Nguyên lý hoạt động....................................................................... 98 
4.1.3. Phân tích xây dựng bài toán............................................................ 98 
4.1.4. Hiện thực hóa thiết kế ................................................................... 105 
4.2. Picoblaze_pwm_control ...................................................................... 115 
4.2.1. Sơ đồ nguyên lý ............................................................................ 115 
4.2.2. Nguyên lý hoạt động..................................................................... 115 
 3
4.2.3. Phân tích thiết kế .......................................................................... 115 
4.2.4. Hiện thực hóa thiết kế ................................................................... 116 
4.3. Chuyển đổi ADC ................................................................................. 122 
4.3.1. Sơ đồ nguyên lý ........................................................................... 122 
4.3.2. Nguyên lý hoạt động..................................................................... 123 
4.3.3.Phân tích thiết kế bài toán.............................................................. 123 
4.4. Điều khiển LCD .................................................................................. 129 
4.4.1. Sơ đồ khối chức năng ................................................................... 129 
4.4.2. Vi điều khiển PicoBlaze................................................................ 129 
4.4.3. Nguyên lý hoạt động..................................................................... 132 
4.4.4. Phân tích xây dựng bài toán.......................................................... 132 
4.4.5. Hiện thực hóa thiết kế ................................................................... 133 
TÀI LIỆU THAM KHẢO ............................................................................. 139 
 4
Chương 1 
KIẾN THỨC CƠ SỞ 
1.1. Các khái niệm chung 
1.1.1. Transistor 
Transistor là một linh kiện bán dẫn thường được sử dụng như một thiết 
bị khuếch đại hoặc một khóa điện tử. Transistor là phần tử cơ bản của mọi vi 
mạch số tích hợp, từ các cổng logic đơn giản AND, OR, NOT... đến các loại 
phức tạp như các mạch điều khiển ngoại vi, vi điều khiển, vi xử lý... Transistor 
là khối đơn vị cơ bản xây dựng nên cấu trúc mạch ở máy tính điện tử và tất cả 
các thiết bị điện tử hiện đại khác. Do đáp ứng nhanh và chính xác nên các 
transistor được sử dụng trong nhiều ứng dụng tương tự và số, như khuếch đại, 
đóng cắt, điều chỉnh điện áp, điều khiển tín hiệu, và tạo dao động. Transistor 
cũng thường được kết hợp thành mạch tích hợp (IC). 
Hình 1.1. Transistor 
Transistor được làm từ vật liệu bán dẫn (semiconductor), là vật liệu vừa 
có khả năng dẫn điện vừa có khả năng làm việc như những vật liệu cách điện, 
khả năng này thay đổi tùy theo kích thích từ bên ngoài như nhiệt độ, ánh sáng, 
trường điện từ, dòng điện. Chất bán dẫn dùng để cấu tạo transistor thường là 
Germany (Ge) hoặc Silicon (Si) được pha tạp một lượng nhỏ Photpho (P) hoặc 
Boron (B) với mục đích tăng mật độ electron (kiểu N) tự do hoặc tăng mật độ 
lỗ trống (kiểu P) tương ứng trong tinh thể bán dẫn. 
1.1.2. Vi mạch số tích hợp 
Còn được gọi là IC - Intergrated Circuits, chip, là cấu trúc mạch điện 
được thu nhỏ bằng cách tích hợp chủ yếu từ các transitor với mật độ cao, ngoài 
ra còn có thể có các linh kiện điện thụ động khác trên một khối bán dẫn mỏng. 
Các vi mạch tích hợp đều có một số lượng tín hiệu đầu vào và đầu ra để 
thực hiện một chức năng cụ thể nào đó. 
 5
 a) b) 
Hình 1.2. a) Mô hình Vi mạch số tích hợp b) Vi mạch tích hợp thực tế 
Vi mạch tích hợp ra đời từ những năm 1960 và được ứng dụng rộng rãi 
trong thực tế, đã và đang tạo ra cuộc cách mạng trong lĩnh vực điện tử. Ví dụ về 
vi mạch tích hợp như các IC đa dụng (general purposes IC) họ 7400, 4000, các 
dòng vi xử lý 80x86 dùng trong máy vi tính, chíp xử lý dùng cho điện thoại di 
động, máy ảnh kỹ thuật số, các vi điều khiển dùng trong các thiết bị dân dụng, ti 
vi, máy giặt, lò vi sóng... Các vi mạch này có mật độ tích hợp từ hàng vài chục 
đến hàng trăm triệu, và hiện nay đã đến hàng tỷ transistor trong một miếng bán 
dẫn có kích thước xấp xỉ kích thước đồng xu. Mật độ tích hợp được định nghĩa 
là tổng số những phần tử tích cực (transistor hoặc cổng logic) chứa trên một đơn 
vị diện tích của khối tinh thể bán dẫn. Theo mật độ tích hợp chia ra các loại vi 
mạch sau: 
- Vi mạch cỡ nhỏ SSI (Small scale integration), có hàng chục transistor 
trong một vi mạch. 
- Vi mạch cỡ vừa MSI (Medium scale integration), có hàng trăm 
transistor trong một vi mạch. 
- Vi mạch cỡ lớn LSI (Large scale integration), có hàng ngàn đến hàng 
chục ngàn transistor trong một vi mạch. 
- Vi mạch cực lớn VLSI (Very large scale integration), có hàng vạn, hàng 
triệu, hàng chục triệu transistor và lớn hơn trong một vi mạch, tới thời điểm hiện 
nay đã xuất hiện nhưng vi mạch có độ tích hợp đến hàng tỷ transitor. 
- Vi mạch siêu lớn ULSI (Ultra large scale intergration), vi mạch có độ 
tích hợp với mức độ hàng triệu transistor trở lên. 
1.1.3. Cổng logic 
Cổng logic hay logic gate là cấu trúc mạch điện (sơ đồ khối hình ) được 
lắp ráp từ các linh kiện điện tử để thực hiện chức năng của các hàm logic cơ bản 
 6
y = f(xn, xn-1,..., x1, x0). Trong đó các tín hiệu vào xn-1, xn-2,..., x1, x0 của mạch 
tương ứng với các biến logic xn-1, xn-2,..., x1, x0 của hàm . Tín hiệu ra y của mạch 
tương ứng với hàm logic y. Với các cổng cơ bản thường giá trị n < 4. 
Hình 1.3. Mô hình cổng logic cơ bản 
Giá trị của các tín hiệu vào và ra chỉ có hai mức là mức thấp (Low - L) và 
mức cao (High - H) tương ứng với với hai giá trị 0 và 1 của các biến logic và 
hàm logic. 
1.1.3.1. Một số cổng logic cơ bản: 
* Cổng logic AND 
Cổng AND là cổng logic thực hiện chức năng của phép toán nhân logic 
với 2 ngõ vào và 1 ngõ ra với ký hiệu như hình vẽ: 
Hình 1.4. Cổng logic AND 
Phương trình logic mô tả cổng logic AND: 
Hình 1.5. Bảng chân lý cổng logic AND 
Ngõ ra chỉ bằng mức 1 khi cả 2 ngõ vào bằng 1, ngõ ra bằng 0 khi một 
trong hai ngõ vào bằng 0. 
Cổng AND có thể có nhiều hơn 2 đầu vào. Trên một chip có thể có nhiều 
cổng AND. 
 7
* Cổng logic OR 
Cổng OR là cổng logic thực hiện chức năng của phép toán cộng logic với 
2 ngõ vào và 1 ngõ ra với ký hiệu như hình vẽ: 
Hình 1.6. Cổng logic OR 
Phương trình logic mô tả cổng logic OR: 
Hình 1.7. Bảng chân lý cổng logic OR 
Ngõ ra chỉ bằng mức 0 khi cả 2 ngõ vào bằng 0, ngõ ra bằng 1 khi một 
trong hai ngõ vào bằng 1. 
* Cổng logic NOT 
Còn gọi là cổng đảo (Inverter), có hình vẽ như sau: 
Hình 1.8. Cổng logic NOT 
Bảng chân lý của cổng logic NOT: 
Hình 1.9. Bảng chân lý của cổng logic NOT 
* Một số cổng logic thường gặp khác như NAND, NOR, EX-OR, EX-NOR... 
1.1.3.2. Tham số thời gian của cổng logic: 
Các mạch logic đều được biểu diễn bằng các hệ hàm logic và do đó có thể 
phát biểu là: Mọi mạch logic đều có thể xây dựng từ các cổng logic cơ bản. Đối 
với các cổng logic cơ bản đó thì có hai tham số thời gian cơ bản: 
 8
Hình 1.10. Tham số thời gian của cổng NOT 
Thời gian trễ lan truyền Tpd (Propagation delay) là thời gian tối thiểu kể 
từ thời điểm bắt đầu xảy ra sự thay đổi từ đầu vào X cho tới khi sự thay đổi này 
tạo ra thay đổi xác định tại đầu ra Y, hay nói một cách khác cho tới khi đầu ra Y 
ổn định giá trị. 
Tcd (Contamination delay) là khoảng thời gian kể từ thời điểm xuất hiện 
sự thay đổi của đầu vào X cho tới khi đầu ra Y bắt đầu xảy ra sự mất ổn định. 
Sau giai đoạn mất ổn định hay còn gọi là giai đoạn chuyển tiếp tín hiệu tại đầu 
ra sẽ thiết lập trạng thái xác định vững bền. 
Như vậy Tpd > Tcd và khi nhắc đến độ trễ của cổng thì là chỉ tới giá trị Tpd. 
1.1.4. Phần tử nhớ 
1.1.4.1. D-Latch và D-Flip Flop 
Latch và Flip Flop là các phần tử nhớ quan trọng trong thiết kế VLSI, sơ 
đồ cấu tạo chi tiết và mô tả đã được trình bày kỹ trong môn học Kỹ thuật số. Ở 
phần này chỉ nhắc lại những tính chất cơ bản nhất của các Flip Flop và bổ xung 
thêm các tham số thời gian thực của các phần tử này. 
Bảng 1.1. D-Flip Flop và D-Latch 
 D-Latch là phần tử nhớ làm việc theo mức xung, cụ thể khi tín hiệu Clock 
bằng 1 thì giá trị Q đầu ra bằng giá trị đầu vào, khi tín hiệu Clock = 0 thì giá trị 
đầu ra không đổi. Nói một cách khác D-latch làm việc như một cửa đóng mở 
giữa tín hiệu Q và D tương ứng với mức điện áp của xung Clock. 
 9
D- Flip Flop là phần tử nhớ làm việc theo sườn xung, có hai dạng sườn là 
sườn lên (rising edge) khi xung thay đổi từ 0->1 và sườn xuống (falling edge) 
 ...  cách kích đúp vào phần được khoanh đỏ dưới đây: 
- Sau phần này ta tạo ra 1 file top_level.ucf trong project. Chúng ta có thể 
kiểm tra và mở nó bằng notepad. 
4.1.4.3. Biên dịch và nạp code 
 Kiểm tra kết nối: 
Trước khi tiến hành biên dịch và nạp code chúng ta cần kiểm tra kĩ các 
cáp, dây nguồn đã được cấp đúng chưa: 
- Jumper nguồn của bank0 đã nối chưa, có thể nối 2.5V hoặc 3.3 V. 
Trong các ứng dụng thông thường người ta sử dụng 3.3 V. 
- Đèn nguồn đã sáng chưa, nếu chưa nên kiểm tra lại dây nguồn hoặc 
công tắc gạt nguồn có bi lỏng không. 
- Jumper chọn chế độ đã được cắm đúng chưa , ở ứng dụng này ta 
nên cắm M2 
- Phải chắc chắn rằng dây usb đã được kết nối. 
Vị trí các kết nối phần cứng cần phải kiểm tra: 
 110
1.Nơi cắm nguồn. 
2. Công tắc và jumper nguồn. 
3. Cổng cắm dây usb. 
4.Jumper chế độ, chọn m2. 
5.jumper cấp nguồn cho bank0. Nên chọn 3.3V. 
Chú ý :Khi kết nối máy tính tự động nhận dạng được kit, ta chỉ cần next 
để quá trình được cài đặt. 
- Để biên dịch ta kích vào dấu “+” ở phần Generate Progaming File. Sau 
đó kích đúp vào configure device impact . 
 111
- Sau đó phần nạp code impact hiện ra, ta chọn finish: 
- Tiếp đó ta kích đúp vào ic xc3s500e và chọn đường đẫn tới file .bit 
mà ta đã biên dịch ra: 
 112
- Chọn đường dẫn : 
 113
- Ở 2 ic tiếp theo ta chọn bypass: 
Để nạp chíp ta kích chuột phải vào ic xc3s500e chọn program: 
Nếu nạp thành công thì công đèn báo nạp màu vàng sẽ sáng. 
 114
Đợi nạp thành công ta kiểm tra kết quả xem có mạch chạy có đúng với 
phân tích ban đầu không? 
Kết Luận: Trong bài trên chúng ta đã tìm hiểu được cách biên dịch và nạp 
code cho kit Spartan 3E trên phần mềm ISE. Trong bài toán đơn giản này chúng 
ta có thể thấy được LED sáng phụ thuộc vào các nút bấm, công tắc gạt như thế 
nào.Sinh viên hoàn toàn có thể thay đổi được sự phụ thuộc này. 
 115
4.2. Picoblaze_pwm_control 
4.2.1. Sơ đồ nguyên lý 
4.2.2. Nguyên lý hoạt động 
- Khi người dùng dùng chương trình Hyper terminal gõ lệnh để điều khiển 
pwm qua giao tiếp ở cổng com. Bộ đệm 16 byte FIFO trong kit Spartan 3E( bộ 
đệm này được tạo ra bởi 2 file “.vhdl” là “uart_tx.vhd” và ”uart_rx.vhd”) sẽ 
truyền dữ liệu đến vi điều khiển picoblaze. Vi điều khiển này sẽ nhận dữ liệu và 
điều khiển cường độ sáng tối của các LED và điều khiển pwm lối ra trên 
Jumper 9 đến 12. 
4.2.3. Phân tích thiết kế 
- Như ở bài LCD chúng ta đã biết về các tạo ra các file mức đỉnh và các 
file thấp. Sau đây là sơ đồ code: 
 116
- Trong sơ đồ trên file Picoblaze_pwm_control.vhd là file mức đỉnh. 
Các file trong nhánh ở mức thấp hơn. 
- File kcpsm3.vhd là file cấu hình nên vi điều khiển picoblaze 
- File picoblaze_pwm_control.ucf chứa dữ liệu liên quan tới việc gán 
chân. 
- File pwm_ctrl.vhd chứa chương trình điều khiển pwm. File này là 
kết quả sau khi biên dịch từ file .psm để lập trình cho vi điều khiển picoblaze. 
Cách bên dịch cũng đã được được trình bày trong bài LCD. 
- Các file uart_tx.vhd, uart_rx.vhd tạo ra bộ UART 16-byte FIFO 
buffers để kết nối với cổng com. 
4.2.4. Hiện thực hóa thiết kế 
4.2.4.1. Kiểm tra kết nối 
Trước khi tiến hành biên dịch và nạp code chúng ta cần kiểm tra kĩ các 
cáp, dây nguồn đã được cấp đúng chưa: 
- Jumper nguồn của bank0 đã nối chưa, có thể nối 2.5V hoặc 3.3 V. 
Trong các ứng dụng thông thường người ta sử dụng 3.3 V. 
- Đèn nguồn đã sáng chưa, nếu chưa nên kiểm tra lại dây nguồn hoặc 
công tắc gạt nguồn có bi lỏng không. 
 117
- Jumper chọn chế độ đã được cắm đúng chưa , ở ứng dụng này ta 
nên cắm M2 
- Phải chắc chắn rằng dây usb,com DCE đã được kết nối. 
4.2.4.2 Biên dịch và nạp code 
- Tiến hành soạn thảo và biên dịch ra file pwm_ctrl.vhd từ file .psm ( 
phương pháp này đã được tình bày trong bài LCD) 
- Tạo ra project mới và add các code mức thấp vào project (các file có 
màu xanh có thể download tại trang chủ của xilin.) 
- Tiến hành gán chân theo bảng sau: 
 118
- Sau đó tiến hành biên dịch tạo ra file “.bit” nạp vào kit. 
4.2.4.3. Điều khiển PWM qua Hyper terminal 
- Bước mở Programs -> Accessories -> Communications -> 
HyperTerminal. 
-Bước 2 chọn cổng com 
 119
- Bước 3 cài đặt cho com: 
 Các bước 4, 5, 6, 7, 8 thực hiện như hình vẽ dưới đây 
 120
- Sau đó hiện ra 1 bảng Hyper terminal 
 121
- Ta có thể viết lệnh điều khiển cường độ sáng của các LED0 đến 3 
như sau: 
Cấu trúc lệnh “LDn hh” 
Trong đó: 
 n: là LED thứ mấy (vì có 8, nên n chỉ có thể là 0:7). 
hh : là giá trị hex từ 00 đến FF cường độ sáng của LED tùy thược vào giá 
trị nạp vào này. 
vd: muốn cho LED4 tắt ta gõ lệnh “LD4 00”. Muốn LED5 sáng hết mức 
gõ lệnh “LD5 FF” 
-Tương tự ta cũng có thể điều khiển xung ra ở các jumper 9 đến 12 
Cấu trúc lệnh: ”IOk hh” 
k : các đầu ra của jumper 9 đến 12 nên k chỉ nhận giá trị 9 đến 12. 
hh: giá trị từ 00 đến FF. Thời gian tồn tại xung ở mức cao phụ phuộc vào 
giá trị này. Sinh viên thay đổi giá trị này sử dụng máy hiện sóng để đo tín hiệu 
trên các jumper và rút ra kết luận. 
 122
4.3. Chuyển đổi ADC 
4.3.1. Sơ đồ nguyên lý 
 Trong mạch này ta thấy khối LTC1407A điều khiển chuyển đổi 
ADC ở hai kênh CHANNEL0 và CHANNEL1 giao tiếp SPI với FPGA. 
 Khối LTC 6912 điều khiển Gain và cũng giao tiếp SPI vớiFPGA . 
 123
4.3.2. Nguyên lý hoạt động 
- Tín hiệu đầu ra phụ thuộc vào tín hiệu đầu vào và thiết lập của mạch 
theo công thức sau: 
Trong đó Vin có thể được cấp vào với đầu vào là VinA, hoặc VinB. 
Gain có giá trị từ -1,-2, -5, -10,-20, -50 , -100. Giá trị này có thể thay đổi 
được khí bấm button ‘North’ and ‘South’. 
 Giá trị đầu vào và đầu ra số được hiện thị lên màn hình LCD: 
4.3.3.Phân tích thiết kế bài toán 
- Sử dụng vi điều khiển Picoblaze để lập trình. Sơ đồ code như sau: 
- Trong đó file picoblaze_amp_adc_control.vhd là file mức đỉnh . 
- Kcpsm3.vhd là file tạo ra vi điều khiển picoblaze. 
- Adc_ctrl.vhd là kết quả tạo từ adc_ctrl.psm sau khi tiến hành biên dịch 
- picoblaze_amp_adc_control.ucf là file chứa dữ liệu về các chân đã 
gán. 
 124
4.3.4. Hiện thực hóa thiết kế 
4.3.4.1 Kiểm tra phần cứng 
Trước khi tiến hành biên dịch và nạp code chúng ta cần kiểm tra kĩ các 
cáp, dây nguồn đã được cấp đúng chưa: 
- Jumper nguồn của bank0 đã nối chưa, có thể nối 2.5V hoặc 3.3 V. 
Trong các ứng dụng thông thường người ta sử dụng 3.3 V. 
- Đèn nguồn đã sáng chưa, nếu chưa nên kiểm tra lại dây nguồn hoặc 
công tắc gạt nguồn có bi lỏng không. 
- Jumper chọn chế độ đã được cắm đúng chưa , ở ứng dụng này ta 
nên cắm M2 
 125
1.Nơi cắm nguồn. 
2. Công tắc và jumper nguồn. 
3. Cổng cắm dây usb. 
4.Jumper chế độ, chọn m2. 
5.Jumper cấp nguồn cho bank0. Nên chọn 3.3V. 
4.3.4.2 Biên dịch và nạp code 
- Tiến hành biên dịch file code mức thấp adc_ctrl.vhd từ file adc_ctrl.psm 
(đã được hướng dẫn cụ thể cách biên dịch từ bài trước). 
- Vào phần mền ise tạo ra Project mới để soạn thảo file mức đỉnh 
picoblaze_amp_adc_control.vhd. 
- Tiến hành gán chân theo bảng sau: 
Gán chân cho LED: 
Gán chân cho SPI: 
 Gán chân cho Strata flash 
Gán chân cho LCD: 
Gán chân cho I/O ports on J4: 
 126
Gán chân cho switches: 
Gán chân cho Press buttons: 
- Tạo ra file picoblaze_amp_adc_control.ucf sau khi đã gán chân 
thành công bằng cách kích đúp vào biểu tượng như hình dưới đây: 
- Tiến hành add các file mức thấp adc_ctrl.vhd, 
picoblaze_amp_adc_control.ucf vào trong Project.(đã được hướng dẫn cách add 
file ở bài trước). 
- Biên dịch và nạp file “picoblaze_amp_adc_control.bit” vào kit. 
- Kết nối đầu vào VINA ở J7 với j27: 
 127
- Dùng 2 button thay đổi G quan sát LCD và rút ra kết luận. 
- Thay đổi đầu vào bằng cách kết nối VINA với J22. 
 128
 - Điều chỉnh G ,quan sát LCD và rút ra nhận xét 
Chú thích: 
0. Nguồn 
1. Switch nguồn. 
2. Cổng USB để nạp mã nguồn cho KIT. 
3. Jumper nguồn. 
4. Núm xoay (Rotary Encoder). 
5. Nút bấm. 
6. LED đơn. 
7. Switch. 
8. LCD. 
9. Cổng kết nối màn hình VGA. 
10. XC3S500E. 
11. LED báo nạp chương trình. 
 129
4.4. Điều khiển LCD 
4.4.1. Sơ đồ khối chức năng 
 Sơ đồ mạch nguyên lý 
4.4.2. Vi điều khiển PicoBlaze 
Trong sơ đồ mạch trên hầu hết các thành phần như nút bấm, LCD, LED 
đều rất quen thuộc. Điểm đáng chú ý nhất trong sơ đồ trên là vi điều khiển 
PicoBlaze. Câu hỏi thường gặp đó là trên KIT thì PicoBlaze nó ở vị trí nào? Câu 
 130
trả lời là nó không được đóng gói thành 1 IC hữu hình (nhìn thấy được) mà được 
nhúng trong chip XC3S500E – tức là trong XC3S500E có vi điều khiển 
PicoBlaze. Chính vì FPGA là mảng cổng logic lập trình được tức là có thể cấu 
hình lại được nên chúng ta hoàn toàn có thể tạo ra một IC và nằm trong FPGA, 
ví dụ như ta có thể lập trình để tạo một IC họ 8051, PIC, hoặc 1 IC chuyên dụng 
nào đó.. nằm trong FPGA. Và để thuận tiện cho việc phát triển ứng dụng thì 
Xillinx đã tạo sẵn vi điều khiển PicoBlaze này. 
4.4.2.1. Cấu trúc của vi điều khiển 
4.4.2.2. Lập trình và biên dịch chương trình 
Để lập trình cho PicoBlaze ta phải sử dụng tập lệnh riêng, giống như sử 
dụng ngôn ngữ assembly với vi điều khiển họ 8051 vậy. Công cụ soạn thảo 
được khuyến khích sử dụng là Notepad (có sẵn trên máy) hoặc Notepad++ 
(được cài đặt thêm). 
 131
Tập lệnh của PicoBlaze như sau: 
Nhóm lệnh điều khiển: 
JUMP 
aaa 
JUMP 
Z,aaa 
JUMP 
NZ,aaa 
JUMP 
C, aaa 
JUMP 
NC,aaa 
CALL 
aaa 
CALL 
Z,aaa 
CALL 
NZ,aaa 
CALL 
C,aaa 
CALL 
NC,aaa 
RETUR
N 
RETUR
N Z 
RETUR
N NZ 
RETUR
N C 
RETUR
N NC 
Nhóm lệnh xử lý toán học: 
ADD 
sX,kk 
ADDCY 
sX,kk 
SUB 
sX,kk 
SUBCY 
sX,kk 
COMPARE 
sX,kk 
ADD 
sX,sY 
ADDCY 
sX,sY 
SUB 
sX,sY 
SUBCY 
sX,sY 
COMPARE 
sX,sY 
Nhóm lệnh ngắt: 
RETURNI ENABLE RETURNI DISABLE 
ENABLE INTERRUPT DISABLE INTERRUPT 
Nhóm lệnh logic: 
LOAD 
sX,kk 
AND 
sX,kk 
OR 
sX,kk 
XOR 
sX,kk 
TEST 
sX,kk 
LOAD 
sX, sY 
AND 
sX, sY 
OR sX, 
sY 
XOR 
sX, sY 
TEST 
sX,sY 
Nhóm lệnh lưu trữ: 
STORE sX,ss STORE sX,(sY) 
PETCH sX,ss PETCH sX,(sY) 
Nhóm lệnh dịch và quay: 
SR0 sX SR1 sX SRX sX SRA sX RR sX 
SL0 sX SL1 sX SLX sX SLA sX RL sX 
 132
Nhóm lệnh vào/ra: 
INPUT sX,pp INPUT sX,(sY) 
OUTPUT sX,pp OUTPUT sX,(sY) 
Chú ý: 
o ‘X’ và ’Y’ nằm trong đoạn 0 đến F. 
o ‘kk’ nằm trong đoạn 00 đến FF. 
o ‘aaa’ nằm trong đoạn từ 000 đến 3FF. 
o ‘pp’ nằm trong đoạn từ 00 đến FF. 
o ‘ss’ nằm trong đoạn từ 00 đến 3F. 
4.4.3. Nguyên lý hoạt động 
Như ta thấy ở sơ đồ Hình 1.1 vi điều khiển PicoBlaze còn kết nối với 1 
thành phần đặc biệt nữa là program_rom với 2 bus address,instruction và 1 dây 
kcpsm3_reset. Đây chính là khu vực lưu trữ mã lệnh của vi điều khiển 
PicoBlaze. Với độ rộng bus address là 10bits thì program_rom này có thể lưu trữ 
tới 1024 mã lệnh, bus instruction có độ rộng 18bits thì mã lệnh của nó có độ dài 
là 18bits. 
 Trong ứng dụng này ta sẽ kết nối vi điều khiển PicoBlaze với LCD 
và truyền dữ liệu với nhau thông qua kiểu 4 dây (khác với sử dụng 8 dây), chưa 
kể các dây RS, RW, E. 
 Trong Hình 1.2 ta thấy LCD và bộ nhớ StrataFLASH có kết nối với 
nhau, do vậy nhà sản xuất đã khuyến cáo nên disable bộ nhớ này để không ảnh 
hưởng tới việc hiển thị LCD. 
4.4.4. Phân tích xây dựng bài toán 
Ta sẽ xây dựng chương trình là file mức đỉnh và các file ở mức thấp hơn. 
Dĩ nhiên là với các chương trình đơn giản thì ta cũng không cần phải sử dụng vi 
điều khiển và cấu hình thành file mức đỉnh (ví dụ như lập trình 1 bộ phân kênh, 
hợp kênh với vhdl,), do đó việc này chỉ hiệu quả hơn khi phát triển các 
chương trình phức tạp hơn. Ta liên tưởng cũng giống như một chương trình 
bằng ngôn ngữ C, nếu phức tạp ta sẽ sử dụng chương trình con và ngược lại. 
 133
Hình 1.7 Cấu trúc chương trình 
File kcpsm3.vhd và file control.vhd là 2 file mức thấp. Trong đó file 
kcpsm3.vhd là file nhà sản xuất đã phát triển để tạo nên vi điều khiển PicoBlaze 
mà ta sử dụng và ta không cần phải viết lại hay sửa đổi nó, file control.vhd chính 
là kết quả của các bước biên dịch từ file control.psm và nó được ghi vào 
program_rom để làm chức năng hiển thị dữ liệu lên LCD. File s3esk_startup.ucf 
chính là file trong đó chứa các dữ liệu liên quan tới việc gán chân cho ứng dụng 
của chúng ta (sẽ làm rõ ở mục 4). File mức đỉnh chính là file s3esk_startup.vhd, 
file này nó sẽ làm nhiệm vụ kết nối tất cả các file mức thấp hơn và ngoài ra nó 
sẽ cấu hình nên các phần tử như bộ phân kênh, cổng AND, cổng 3 trạng thái, D-
FF ở trên Hình 1. 
4.4.5. Hiện thực hóa thiết kế 
Chạy chương trình Start All Programs Xillinx ISE 8.2i Project 
Navigator. Trên màn hình làm việc chọn File New Project 
Hình 1.8 Tạo Project mới 
 134
Click Next, chọn như hình sau và click đến khi không còn cửa sổ nào xuất 
hiện. 
Project New Source và chọn như sau: 
Click Next đến khi không còn cửa sổ nào xuất hiện nữa, và kết quả hiện ra 
màn hình chính là màn hình soạn thảo như sau: 
 135
Bây giờ bạn sẽ soạn thảo file mức đỉnh trên màn hình này. File 
kcpsm3.vhd đã có sẵn và bạn hãy copy vào vị trí cùng thư mục chứa project của 
bạn, file control.vhd thì bạn đã được hướng dẫn cách tạo như ở bước trên bằng 
cách biên dịch từ file control.psm. 
Sau khi đã copy 2 file mức thấp vào rồi, bước tiếp theo là kiểm tra cú 
pháp chương trình. Click Check Syntax bạn sẽ thấy bên trên góc trái có hình như 
sau: 
 136
Click chuột phải và chọn Add Source cho từng file. Sau khi thực hiện ta 
sẽ thấy nó như sau: 
Cuối cùng bạn còn phải xử lý 1 vấn đề nữa đó là việc gán chân cho thiết 
kế. Ứng dụng này của chúng ta có các kết nối trong đó có thể kể đến kết nối của 
4 chân dữ liệu LCD chẳng hạn. Việc của bạn là phải khai báo địa chỉ các chân 
đó. Ta hãy tra bảng trang 44 (Hình 1.14) và trang 45 (Hình 1.15) tài liệu 
“Spartan-3E FPGA Starter Kit Board User Guide”. 
 137
Quay trở lại ISE, click User Constraints Assign Package Pins hiện lên 
bảng như sau: 
Bây giờ hãy nhìn lên Hình 1.14 và giả sử ta bắt đầu gán chân lcd_d 
vào chân M15 của FPGA. Hãy click chuột từ bảng bên trái ở Hình 1.16, giữ 
nguyên chuột và kéo sang bảng bên phải ở Hình 1.16 thả vào ô có vị trí hàng 
dọc mà M và hàng ngang là 15. Như vậy là ta đã hoàn thành việc gán cho chân 
dữ liệu D7 của LCD cho FPGA, tiếp tục với các chân còn lại ở bảng bên trái. 
Ngoài ra cũng cần phải kích chọn các dữ liệu khác ở bảng bên trái của Hình 1.16 
theo Hình 1.1, như chọn IOSTANDARD là LVCMOS33, 
Cuối cùng tất cả đã sẵn sàng để tạo ra 1 file duy nhất đó là file có đuôi .bit 
được sử dụng để nạp vào Xllinx Spartan-3E. Click vào Generate Programming 
File Configure Device (iMPACT). Đợi 1 lát để kiểm tra lại toàn bộ thiết kế, 
nếu không có gì sai sót bảng sau sẽ hiện ra: 
 138
Click Finish. 
 139
TÀI LIỆU THAM KHẢO 
[1]. Nguyễn Thúy Vân, 2005, Thiết kế logic mạch số, NXB Khoa học kỹ thuật. 
[2]. Vũ Chiến Thắng, Giáo trình Thiết kế mạch bằng máy vi tính 
[3]. Học viện kỹ thuật quân sự, Bài giảng thiết kế mạch logic số 
[4]. Tống Văn On, Thiết kế mạch số với VHDL và Verilog Tập 1 + 2, NXB Lao động 
xã hội 
[5]. Volnei A. Pedroni, Circuit Design with VHDL, MIT Press Cambridge, 
Massachusetts London, England, 2004 
[6]. Xilinx Ltd, Spartan-3E Starter Kit Board User Guide 
[7]. Xilinx - Spartan-3E FPGA Family Datasheet 

File đính kèm:

  • pdfbai_giang_thiet_ke_vi_mach_lap_trinh_duoc_nguyen_the_dung.pdf