CHƯƠNG 1. Giới thiệu chương Đầu tiên, chúng em sẽ nêu lên lý do chọn đề tài Xây dựng hệ thống nhúng trên FPGA và ý tưởng thiết kế cho đề tài. Lý do chọn đề tài Một ứng dụng tốt là ứng dụng có phần cứng nhanh, mạnh và có phần mềm linh hoạt, thông minh. Muốn vậy, vi xử lý là yếu tố quan trọng không thể thiếu trong các ứng dụng.
Việc sử dụng vi điều khiển của các họ như 8051, PIC, AVR, MSP430 đã quá quen thuộc trong những đồ án trước đây. Vì vậy chúng em muốn tiếp cận một hướng mới đó là sử dụng FPGA. Có ý kiến cho rằng, sử dụng vi điều khiển (MCU) có tính kinh tế hơn so với sử dụng FPGA. Nhưng thật sự FPGA có những thế mạnh mà cũng là nhược điểm của MCU: 1.
FPGA có khả năng tùy biến cao,đó là khả năng tùy biến lõi phần cứng linh hoạt, và khả năng tái cấu hình. Có thể thực hiện và kiểm tra một cách hiệu quả các thiết kế phần cứng từ đơn giản đến phức tạp tùy theo tài nguyên phần cứng (số lượng cổng) cho phép trên FPGA chứa tới hàng tỷ transistor. Từ thiết kế khi đã test thử trên FPGA ổn định có thể đưa vào các ứng dụng lớn chuyên biệt.Rất mạnh về hướng DSP. Công nghệ FPGA trên thế giới hiện nay đang phát triển, nhiều ứng dụng trên nền FPGA ra đời ngày càng nhiều, đặc biệt là các ứng dụng nhận dạng giọng nói.
Hoàng Trang cùng nhóm nghiên cứu tại ĐH Bách Khoa, ĐH Quốc gia TP.HCM chế tạo thành công thiết bị nhận dạng Tiếng việt trên nền FPGA; xin được nói thêm, đây là ứng dụng công nghệ được ưu tiên phát triển thứ ba của chính phủ ta. Vì vậy, chúng em muốn tìm hiểu và tiếp cận công nghệ mới này - Công nghệ FPGA. Ý tưởng thiết kết Đề tài thực hiện theo hướng Xử lý tín hiệu số (DSP – Digital Signal Processing) trên nền FPGA. Thực hiện trên kit Spartan 3E-1600E của hãng Xilinx.
Sơ đồ khối bao gồm khối DSP, khối vi xử lý MicoBlaze và các ngoại vi giao tiếp: SVTH: Nguyễn Thái Phương - 11DT1 Trang 2 SVTH: Trần Văn Duy Phước - 11DT3 Báo Cáo Đồ Án Chuyên Ngành Hình 1. Sơ đồ khối của thiết kế Khối MicroBlaze 32-bit: là một lõi vi xử lý mềm, điều khiển các khối khác hoạt động; được xây dựng trên công cụ XPS. Khối DSP: là lõi IP xử lý tín hiệu số từ khối DRIVER. Khối MEMORY: dùng để lưu trữ dữ liệu tín hiệu.
Khối GPIO: dùng để giao tiếp với LCD và KEY. Khối UART: để giao tiếp với PC. Khối DRIVER: chuyển tín hiệu analog thành tín hiệu số. Tất cả thiết kế đều thực hiện trên bộ công cụ của hãng Xilinx.
Trong đồ án này, chúng em sẽ thực hiện giai đoạn đầu của dự án, giai đoạn tiếp theo sẽ thực hiện tiếp trong đồ án Tốt nghiệp sắp tới. Ở giai đoạn này, chúng em sẽ tìm hiểu về các cở sở lý thuyết, làm quen với công cụ và xây dựng các khối MicroBlaze 32-bit, GPIO. Kết luận chương Với mục tiêu thiết kế đã chỉ rõ ở trên, chương tiếp theo chúng ta sẽ cùng nhau tìm hiểu về những khái niệm cở bản, những cở sở lý thuyết để hiểu được: FPGA là gì, vi xử lý mềm MicroBlaze là gì, và tìm hiểu cấu trúc của ngôn ngữ mô tả phần cứng Verilog HDL. SVTH: Nguyễn Thái Phương - 11DT1 Trang 3 SVTH: Trần Văn Duy Phước - 11DT3 Báo Cáo Đồ Án Chuyên Ngành CHƯƠNG 2.
TỔNG QUAN VỀ FPGA, VERILOG HDL VÀ MICROBLAZE 2. Giới thiệu chương Như đã giới thiệu ở chương trước, chương này chúng ta sẽ tìm hiểu các nội dung: tổng quan về công nghệ FPGA, ngôn ngữ mô tả phần cứng Verilog HDL và vi xử lý mềm MicroBlaze 32-bit. Tổng quan về công nghệ FPGA 2. Khái niệm FPGA (Field Programmable Gate Array) là một thiết bị bán dẫn bao gồm các khối lập trình được gọi là “Logic Block” và các kết nối khả trình.
Các khối logic có thể được lập trình để thực hiện các chức năng của các khối logic cơ bản như AND, XOR hoặc các chức năng kết hợp phức tạp hơn như giải mã hoặc các phép tính toán học.Trong hầu hết các kiến trúc FPGA, các khối logic cũng bao gồm cả các phần tử nhớ. Đó có thể là các Flip-Flop hoặc các bộ nhớ hoàn chỉnh hơn. Các kết nối khả trình cho phép các khối logic có thể nối với nhau theo thiết kế của người xây dựng hệ thông, giống như một bảng mạch khả trình. Một kiến trúc khác tương tự nhưng đơn giản hơn FPGA là CPLD (Complex Programmable Logic Device).
Mật độ cổng logic của CPLD nằm trong khoảng từ vài nghìn đến 10 nghìn cổng. Khác biệt cơ bản giữa FPGA và CPLD là ở kiến trúc của chúng. CPLD có một kiến trúc bị giới hạn trong một hoặc một vài dãy logic khả trình cùng với một lượng nhỏ thanh ghi định thời. Do đó nó kém linh hoạt hơn, nhưng lại có ưu điểm là khả năng dự đoán trễ lớn hơn và tỉ lệ logic-kết nối cao hơn.
Ngược lại, trong kiến trúc của FPGA lại có sự trội hơn về số lượng kết nối. Điều này làm cho nó trở nên linh hoạt hơn (về số lượng thiết kế được thực thi bên trong) nhưng cũng đồng nghĩa với việc phức tạp hơn trong quá trình thiết kế. Một khác biệt đáng chú ý nữa giữa FPGA và CPLD là: hầu hết các FPGA hiện nay đều bao có các phần tử chức năng tích hợp cao hơn (như bộ cộng, nhân tích hợp), và bộ nhớ tích hợp. Một số kiến trúc FPGA hiện nay còn có thể cho phép cấu hình lại từng phần (partial re-configuration).
Có nghĩa là cho phép một phần của thiết kế được cấu hình lại trong khi những thiết kế khác vẫn tiếp tục hoạt động. Một ưu điểm khác của FPGA, là người thiết kế có thể tích hợp vào đó các bộ xử lý mềm (soft processor) hay vi xử lý nhúng (embedded processor). Các vi xử lý này có thể được thiết kế như các khối logic thông thường, mà mã nguồn do các hãng cung SVTH: Nguyễn Thái Phương - 11DT1 Trang 4 SVTH: Trần Văn Duy Phước - 11DT3 Báo Cáo Đồ Án Chuyên Ngành cấp, thực thi các lệnh theo chương trình được nạp riêng biệt, và có các ngoại vi được thiết kế linh động (khối giao tiếp UART, vào/ra đa chức năng GPIO, ethernet. Các vi xử lý này cũng có thể được lập trình lại (re-configurable computing) ngay trong khi đang chạy.
Ứng dụng FPGA được ứng dụng điển hình trong các lĩnh vực như: xử lý tín hiệu số, xử lý ảnh, thị giác máy, nhận dạng giọng nói, mã hóa, mô phỏng (emulation).FPGA đặc biệt mạnh trong các lĩnh vực hoặc ứng dụng mà kiến trúc của nó yêu cầu một lượng rất lớn xử lý song song, đặc biệt là mã hóa và giải mã. FPGA cũng được sử dụng trong những ứng dụng cần thực thi các thuật toán như FFT, nhân chập (convolution), thay thế cho vi xử lý. Hiện nay công nghệ FPGA đang được sản xuất và hỗ trợ phần mềm bởi các hãng như: Xilinx, Altera, Actel, Atmel. Trong đó Xilinx và Altera là 2 hãng hàng đầu.
Xilinx cung cấp phần mềm miễn phí trên nền Windows, Linux, trong khi Altera cung cấp những công cụ miễn phí trên nền Windows, Linux, Solaris. Ngôn ngữ mô tả phần cứng Verilog 2. Giới thiệu Khi kích thước và độ phức tạp của hệ thống thiết kế ngày càng tăng, nhiều công cụ hỗ trợ trên máy tính (CAD) được sử dụng vào quá trình thiết kế phần cứng. Thời kỳ đầu những công cụ mô phỏng và tạo ra phần cứng đã đưa ra phương pháp thiết kế, kiểm tra, phân tích, tổng hợp và tạo ra phần cứng một cách phức tạp.
Sự phát triển không ngừng của những công cụ thiết kế một cách tự động là do sự phát triển của những ngôn ngữ mô tả phần cứng HDLs và những phương pháp thiết kế dựa trên những ngôn ngữ này. Dựa trên những ngôn ngữ mô tả phần cứng HDLs, những công cụ CAD trong thiết kế hệ thống số được phát triển và được những kĩ sư phát triển phần cứng phát triển rộng rãi. Hiện tại, người dùng vẫn đang tiếp tục nghiên cứu để tìm ra những ngôn ngữ mô tả phần cứng tốt hơn. Một trong những ngôn ngữ mô tả phần cứng được sử dụng rộng rãi nhất đó là ngôn ngữ mô tả phần cứng Verilog HDL.
Nguyên tắc đặt tên ✓ Quy tắc đặt tên áp dụng cho tên file module, tên tín hiệu, tên các thông số do người thiết kế tạo ra. ✓ Tên project trùng tên file với module chính (top module). ✓ Top module là module kết nối tất cả các module con (sub-module). SVTH: Nguyễn Thái Phương - 11DT1 Trang 5 SVTH: Trần Văn Duy Phước - 11DT3 Báo Cáo Đồ Án Chuyên Ngành ✓ Tên file trùng tên module: <tên module>.v ✓ Tên chỉ gồm ký tự chữ cái (phân biệt chữ hoa và chữ thường), số và dấu gạch dưới và phải bắt đầu với một ký tự chữ.
✓ Không dùng các tên như VDD, VCC, VSS, GND, VREF kể cả chữ hoa và chữ thường. ✓ Không trùng các từ khóa của ngôn ngữ lập trình. ✓ Không kết thúc tên với dấu gạch dưới, không sử dụng nhiều dấu gạch dưới liên tiếp. ✓ Không đặt tên trùng nhau.
✓ Với tín hiệu clock nên là: clock, clk hoặc ck ✓ Với tín hiệu reset nên là: reset, rst hoặc reset_n, rst_n. ✓ Tên càng gợi nhớ và càng ngắn càng tốt. ✓ Tên các tín hiệu, các port, thanh ghi nên đặt chữ in thường. ✓ Tên các tham số (parameter, define) nên đặt chữ in hoa.
Cấu trúc của một thiết kế Hình 2. Cấu trúc một module Verilog ✓ Mỗi module là một file. ✓ Các module sẽ được kết nối với nhau (ngõ vào module này nối với ngõ ra module khác ở top module). ✓ Tên project trùng tên với top module.
SVTH: Nguyễn Thái Phương - 11DT1 Trang 6 SVTH: Trần Văn Duy Phước - 11DT3 Báo Cáo Đồ Án Chuyên Ngành 2. Khai báo một module module example (a, b,y); input a; input [2:0] b; output y; reg y; always, assign, case, if, for endmodule Ví dụ về khai báo một module: Đoạn code mô tả bộ MUX 2 sang 1: Hình 2. MUX 2 sang 1 Hình 2. Mạch sau khi tổng hợp SVTH: Nguyễn Thái Phương - 11DT1 Trang 7 SVTH: Trần Văn Duy Phước - 11DT3 Báo Cáo Đồ Án Chuyên Ngành 2.
Các loại toán tử và mức ưu tiên Hình 2. Các loại toán tử và ưu tiên 2. Hàm ASSIGN và toán tử điều kiện Hàm Assign: assign <tên tín hiệu được gán> = <điều kiện>? <giá trị khi điều kiện đúng>: <giá trị khi điều kiện sai>; Trong đó: ✓ Tên tín hiệu được gắn phải là kiểu dữ liệu wire; ✓ “=” phải là phép gán Blocking; ✓ “?