qua cổng nối tiếp RS232
Mục đích của việc thực hiện ứng dụng này là kiểm thực phần kết nối giữa vi xử lý MicroBlaze và khối truyền thông nối tiếp UART Lite (theo chuẩn RS232) của hệ vi xử lý. Ứng dụng đƣợc xây dựng để thực hiện truyền/nhận dữ liệu hai chiều giữa máy tính và hệ vi xử lý đã xây dựng. Mô hình kết nối giữa hệ vi xử lý và máy tính cá nhân thông qua cổng RS232 đƣợc chỉ ra trong Hình 36.
Hình 36: Mô hình ứng dụng hệ vi xử lý trong truyền thông theo chuẩn RS232.
Khi hệ vi xử lý hoạt động, vi xử lý MicroBlaze sẽ điều khiển việc truyền dữ liệu qua cổng RS232 rồi hiển thị lên màn hình máy tính thông qua giao diện Hyper Terminal của hệ điều hành máy tính. Ngƣợc lại dữ liệu nhập từ bàn phím máy tính sẽ đƣợc truyền trở lại hệ vi xử lý, MicroBlaze sẽ nhận lại dữ liệu và thông báo trở về máy tính qua giao diện Hyper Terminal. Lƣu đồ thuật toán để thực hiện ứng dụng này đƣợc chỉ ra trong Hình 37.
Bắt đầu
Viết dữ liệu vào bộ đệm truyền Có Không Đọc dữ liệu từ bộ đệm nhận Có Kết thúc Kiểm tra bộ đệm truyền rỗng? Kiểm tra bộ đệm nhận có dữ liệu ? Không
Hình 37: Lưu đồ thuật toán triển khai ứng dụng với RS232.
Giải thích thuật toán:
- Bước 1 (Bắt đầu): Bƣớc này thực hiện các thủ tục ban đầu của chƣơng trình ứng dụng C nhƣ khai báo các thƣ viện, định nghĩa địa chỉ các thanh ghi khối UART Lite, khởi tạo giá trị ban đầu cho thanh ghi điều khiển khối UART Lite. Địa chỉ cơ sở các thanh ghi khối UART Lite đƣợc chỉ ra trong file cấu hình các thông số phần cứng xparameters.h của Project.
#define RS232_RxFIFO (XPAR_UARTLITE_0_BASEADDR + 0x0) #define RS232_TxFIFO (XPAR_UARTLITE_0_BASEADDR + 0x4) #define RS232_STAT_REG (XPAR_UARTLITE_0_BASEADDR + 0x8) #define RS232_CTLR_REG (XPAR_UARTLITE_0_BASEADDR + 0xC)
- Bước 2 (Kiểm tra bộ đệm truyền): Bƣớc này thực hiện kiểm tra bit số 29 của thanh ghi trạng thái khối UART Lite có bằng „1‟ hay không, nếu bằng „1‟ chứng tỏ bộ đệm truyền rỗng, tiếp tục chuyển sang bƣớc 3, ngƣợc lại quay về để kiểm tra lại.
- Bước 3 (Truyền dữ liệu): Nếu bộ đệm truyền rỗng ta tiến hành ghi dữ liệu vào thanh ghi truyền dữ liệu khối UART Lite.
- Bước 4 (Kiểm tra bộ đệm nhận): Bƣớc này thực hiện tƣơng tự nhƣ bƣớc 2 nhƣng ở đây kiểm tra bit số 31 của thanh ghi trạng thái khối UART Lite có bằng „1‟ hay không, nếu bằng „1‟ chứng tỏ bộ đệm nhận có dữ liệu.
- Bước 5 (Nhận dữ liệu): Nếu bộ đệm nhận có dữ liệu ta tiến hành nhận dữ liệu và hiển thị trên cửa sổ Hyper Terminal. Trong chƣơng trình ứng dụng này ta thực hiện nhận luôn dữ liệu đã truyền.
- Bước 6 (Kết thúc): Kết thúc chƣơng trình.
Tiến hành kết nối phần cứng và nạp chƣơng trình ứng dụng lên kit Spartan-3E của hãng Xilinx ta đƣợc kết quả nhƣ mô tả trong Hình 38 và Hình 39 (ảnh chụp từ Hyper Terminal của máy tính).
XIo_Out32(RS232_TxFIFO,ch);//ghi du lieu dang ki tu vao thanh ghi truyen du lieu. do
{
va_lue1=XIo_In32(RS232_STAT_REG);//doc du lieu tu thanh ghi trang thai luu vao bien value.
trang_thai1=va_lue1&0x00000004;//gan bit 29 cua thanh ghi trang thai xem bo TxFIFO co rong khong.
}
while (trang_thai1!=0x00000004);//Neu bit 29 =1 thi bien trang thai se co gia tri 00000004H vong lap ket thuc.
return(char)XIo_In32(RS232_RxFIFO);Doc lai du lieu da truyen o tren tu thanh ghi
Hình 38: Kết quả truyền dữ liệu từ MicroBlaze đến máy tính.
Trong đó, chuỗi dữ liệu “Kinh chuc hoi dong bao ve luan van Thac si suc khoe, thanh cong va hanh phuc!” ghi sẵn trên bộ nhớ MicroBlaze đƣợc truyền sang PC thông qua UART và hiển thị trên Hyper Terminal.
Còn trong Hình 39, chuỗi dữ liệu từ PC đƣợc gửi sang MicroBlaze. Sau khi MicroBlaze nhận đƣợc chuỗi dữ liệu sẽ đáp trả bằng một thông báo “Da nhan duoc chuoi ki tu c”.
4.2. Thực hiện chuyển đổi dữ liệu dạng số sang dạng tương tự qua bộ chuyển đổi tín hiệu DAC
Mục đích của việc thực hiện ứng dụng này là kiểm chứng lại phần kết nối giữa MicroBlaze và bộ chuyển đổi tín hiệu từ số sang tƣơng tự DAC. Mô hình kết nối và thực hiện ứng dụng đƣợc chỉ ra nhƣ Hình 40.
Hình 40: Mô hình thực hiện ứng dụng hệ vi xử lý với DAC.
Bài toán ứng dụng đƣợc mô tả nhƣ sau: MicroBlaze điều khiển việc truyền dữ liệu số tới DAC để DAC chuyển đổi thành dữ liệu dạng tƣơng tự. Dữ liệu số đƣợc thay đổi khác nhau để tín hiệu tƣơng tự đầu ra trên kênh tƣơng tự của DAC là các dạng xung tam giác, xung vuông và xung răng cƣa. Kết quả chuyển đổi là các dạng sóng xung tam giác, xung vuông và xung răng cƣa đƣợc quan sát trên Oscilloscope.
Giải thích thuật toán:
`- Bước 1 (Bắt đầu): Tƣơng tự phần ứng dụng với RS232, bƣớc này thực hiện các thủ tục ban đầu của chƣơng trình ứng dụng C nhƣ khai báo các thƣ viện, định nghĩa địa chỉ các thanh ghi khối SPI (địa chỉ cơ sở các thanh ghi khối SPI đƣợc chỉ ra trong file cấu hình các thông số phần cứng xparameters.h của Project), khai báo các chƣơng trình con:
- Bước 2 (init SPI): Bƣớc này khởi tạo các giá trị ban đầu cho SPI bao gồm cấu hình cho thanh ghi điều khiển SPI để khối SPI ở chế độ cho phép, thực thi master và thanh ghi lựa chọn slave ở chế độ lựa chọn 1 slave:
- Bước 3 (clear SPI): Bƣớc này thực hiện clear/reset bộ đệm truyền/nhận trƣớc khi thực hiện truyền/nhận dữ liệu bằng cách ghi giá trị vào thanh ghi điều khiển SPI:
// dinh nghia dia chi cac thanh ghi cua SPI
# define SPI_Reset (XPAR_XPS_SPI_0_BASEADDR + 0x40)
# define SPI_CR (XPAR_XPS_SPI_0_BASEADDR + 0x60)
# define SPI_SR (XPAR_XPS_SPI_0_BASEADDR + 0x64)
# define SPI_DTR (XPAR_XPS_SPI_0_BASEADDR + 0x68)
# define SPI_DRR (XPAR_XPS_SPI_0_BASEADDR + 0x6C)
# define SPI_SSR (XPAR_XPS_SPI_0_BASEADDR + 0x70)
# define SPI_Transfer_FIFO (XPAR_XPS_SPI_0_BASEADDR + 0x74)
# define SPI_Receice_FIFO (XPAR_XPS_SPI_0_BASEADDR + 0x78)
// khai bao cac ham duoc xay dung trong chuong trinh
void initSPI (void);
void clearSPI (void);
void writeSPI (unsignedint value);
void delay (int t);
void DAC_Reset(void);
void Polling(void);
void initSPI (void) {
XIo_Out32(SPI_CR,0x086);//dat thong so dieu khien thong qua SPICR XIo_Out32(SPI_SSR,1); // chon Slave
}
void clearSPI (void) {
XIo_Out32(SPI_CR,XIo_In32(SPI_CR)|= 0x60); //Reset TxFiFo va RxFiFo XIo_Out32(SPI_CR,XIo_In32(SPI_CR) &= ~0x60);//Xoa TxFiFo va RxFiFo }
-
- Bước 4 (write SPI): Đây là bƣớc quan trọng để thực hiện ứng dụng. Trong bƣớc này, trƣớc tiên chƣơng trình ghi giá trị cấu hình cho thanh ghi điều khiển SPI, ghi giá trị cho thanh ghi lựa chọn slave với SS =0 (DAC_CS = 0) để bắt đầu quá trình truyền dữ liệu. Tiếp đó sẽ lần lƣợt ghi liên tiếp 4 byte dữ liệu vào thanh ghi truyền dữ liệu của khối SPI, mỗi lần ghi là 1 byte. Sau khi SPI đã thực hiện truyền đủ 32 bit dữ liệu, chƣơng trình chuyển SS =1 (DAC_CS = 1) và cấu hình lại cho thanh ghi điều khiển SPI ở chế độ thực thi master để bắt đầu quá trình truyền dữ liệu sang DAC và chuyển đổi từ tín hiệu số sang tín hiệu tƣơng tự. Thay đổi giá trị 4 byte dữ liệu ghi vào SPI ta đƣợc dạng tín hiệu đầu ra la xung tam giác, xung vuông, xung răng cƣa:
Sau khi tổng hợp phần cứng và biên dịch phần mềm, ta tiến hành nạp chƣơng trình ứng dụng lên kit Spartan-3E của hãng Xilinx. Sau đó thực thi kiểm thực, ta đƣợc kết quả nhƣ Hình 42 và Hình 43.
void writeSPI (unsignedint value) { unsignedint Tx1; unsignedint Tx2; unsignedint Tx3; unsignedint Tx4; Tx1 = 0x00; Tx2 = 0x3F; If (value >=4096) value = 4095; Tx3 = value >> 4; Tx4 = ((value&0x0f)); XIo_Out32(SPI_CR,0x086); XIo_Out32(SPI_SSR,0);
XIo_Out32(SPI_DTR,Tx1); //Ghi byte du lieu dau tien vao bo dem Tx FIFO Polling();
XIo_Out32(SPI_DTR,Tx2);//Ghi byte du lieu thu hai vao bo dem Tx FIFO Polling();
XIo_Out32(SPI_DTR,Tx3);//Ghi byte du lieu thu ba vao bo dem Tx FIFO Polling();
XIo_Out32(SPI_DTR,Tx4); //Ghi byte du lieu thu tu vao bo dem Tx FIFO Polling(); Che do hoi vong
XIo_Out32(SPI_CR,0x186);// Chuyen SPI sang che do Master
XIo_Out32(SPI_SSR,1);// Dat ss=1 khi hoan tat qua trinh truyen 4 byte và DAC da thuc hien chuyen doi
Hình 42: Tín hiệu đầu ra trên DAC là xung vuông.
Hình 43: Tín hiệu đầu ra trên DAC là xung răng cưa.
Kết quả Hình 42 cho ta thấy biên độ xung vuông là (0†3,3V) và tần số xung là 190,26Hz. Biên độ ở đây là điện áp lối ra cực đại của DAC tƣơng ứng với giá trị 4096. Thay đổi thời gian trễ trong chƣơng trình ta thu đƣợc tần số tối đa cho xung vuông là 18,295kHz (với tần số hệ thống 50MHz, tần số xung nhịp của SPI là 1,5625MHz).
Thực hiện tƣơng tự với giá trị số thay đổi một cách tuyến tính đến giá trị cực đại rồi về 0, ta thu đƣợc xung răng cƣa nhƣ miêu tả trong Hình 43. Biên độ cực đại của tín hiệu cũng có giá trị là (0÷3,3V). Tần số cực đại có giảm hơn so với xung vuông vì trễ qua mỗi lần phát dữ liệu. Tần số thu đƣợc ở ví dụ này là 353,98Hz.
4.3. Kết hợp dùng máy tính để điều khiển hệ thống chuyển đổi dữ liệu qua DAC. qua DAC.
Mục đích của việc thực hiện ứng dụng này là kết hợp cả hai chức năng của hệ vi xử lý đã đƣợc mô tả trong hai ví dụ trên. Mô hình để triển khai ứng dụng đƣợc mô tả nhƣ Hình 44.
Hình 44: Mô hình thực hiện ứng dụng kết hợp của hệ vi xử lý.
Theo mô hình này ứng dụng đƣợc thực hiện nhƣ sau: Dữ liệu đƣợc nhận vào từ máy tính sau đó chuyển tới hệ vi xử lý qua cổng nối tiếp RS232. Hệ vi xử lý sẽ điều khiển truyền dữ liệu này tới DAC. Bằng chƣơng trình dữ liệu nhập vào từ máy tính đƣợc thay đổi sao cho tín hiệu đầu ra từ DAC sẽ là các dạng xung tam giác, xung vuông và xung răng cƣa, hoặc là các giá trị đƣợc nhận vào thông qua máy tính kết nối với hệ vi xử lý.
Lƣu đồ thuật toán thực hiện ứng dụng này đƣợc chỉ ra trong Hình 45. Chƣơng trình thực hiện ứng dụng đƣợc thực hiện tƣơng tự nhƣ phần trên.
KẾT LUẬN
Việc nghiên cứu và thiết kế hệ thống vi xử lý nhúng cùng với các ứng dụng của chúng dựa trên công nghệ FPGA với ƣu điểm mềm dẻo đang thu hút đƣợc nhiều sự quan tâm của giới khoa học kỹ thuật trong những năm gần đây. Tuy nhiên để thực thi và triển khai ứng dụng thực tế của hệ thống thành công đòi hỏi ngƣời thiết kế phải thực sự am hiểu và có chuyên môn, kinh nghiệm về lĩnh vực thiết kế vi mạch tích hợp, nắm vững và sử dụng thành thạo các công cụ phần mềm để mô phỏng và triển khai thiết kế. Trong khuôn khổ của đề tài luận văn tốt nghiệp, tôi đã tìm hiểu và triển khai xây dựng một hệ vi xử lý trên cơ sở lõi xử lý mềm MicroBlaze trên kit phát triển Spartan-3E của hãng Xilinx. Sau thời gian triển khai đề tài tôi đã tìm hiểu và thực hiện đƣợc một số nội dung và kết quả nhƣ sau:
Trƣớc hết tôi hiểu đƣợc thế nào là thiết kế VLSI và các công đoạn, phƣơng pháp thiết kế VLSI đặc biệt là quy trình thiết kế với công nghệ FPGA. Thông qua luận văn tôi cũng đƣợc tìm hiểu rất nhiều kiến thức, kinh nghiệm về ngôn ngữ mô tả phần cứng VHDL, một ngôn ngữ HDL đƣợc sử dụng rất phổ biến trong các thiết kế số với cấu trúc chặt chẽ và là một công cụ quan trọng để bắt đầu một quy trình thiết kế chip.
Tiếp đó, tôi đã nghiên cứu kiến trúc, các đặc tính kỹ thuật và chức năng hoạt động của vi xử lý mềm MicroBlaze để xây dựng và triển khai hệ vi xử lý với một số chức năng. Cụ thể là tôi đã xây dựng thành công mô hình một hệ vi xử lý gồm lõi xử lý mềm MicroBlaze, khối thu phát vạn năng không đồng bộ RS232 và bộ chuyển đổi số-tƣơng tự DAC. Kết quả kiểm chứng cho thấy hệ thống hoạt động đúng nhƣ ý tƣởng xây dựng. Sau đó để kiểm thực hệ thống tôi đã xây dựng các ứng dụng thực tế nhƣ truyền thông dữ liệu hai chiều với RS232 và điều khiển việc chuyển đổi dữ liệu từ số thành tƣơng tự với các dạng xung đầu ra là xung tam giác, xung răng cƣa và xung vuông. Qua việc xây dựng các ứng dụng ví dụ, tôi cũng đã làm chủ đƣợc quy trình phát triển các phần mềm nhúng cho hệ vi xử lý đã xây dựng dựa trên ngôn ngữ C/C ++. Tuy nhiên do thời gian có hạn nên mô hình hệ vi xử lý triển khai trong đề tài còn tƣơng đối đơn giản, dừng ở mức độ kiểm thực hệ thống.
Ngoài ra, qua quá trình thực hiện đề tài tôi cũng đã nắm đƣợc phƣơng pháp sử dụng các công cụ phần mềm hỗ trợ thiết kế phổ biến nhƣ ModelSim, EDK... Đây là những công cụ hỗ trợ thiết kế mạnh và phù hợp cho nhiều hƣớng phát triển tiếp theo của đề tài. Trong thời gian tới, nếu có điều kiện tôi sẽ tiếp tục xây dựng một hệ vi xử lý hoàn chỉnh hơn, bao gồm các kết nối với ADC, VGA, LCD…cùng với các ứng dụng cụ thể của từng kết nối.
TÀI LIỆU THAM KHẢO
[1] Douglas L. Perry (2002),VHDL: Programmingby Example, McGraw-Hill.
[2] IBM (2001), 32-bit Processor Local Bus Architecture Specifications (Version 2.9).
[3] IBM (2009), PLBV46 Master (v1.00a).
[4] Rod Jesman Fernando Martinez Vallina Jafar Saniie, MicroBlaze Tutorial Creating a Simple Embedded System and Adding Custom Peripherals Using Xilinx EDK Software Tool.
[5] Smith, M. J. (1997), Application – SpecificIntegrated Circuits (ASICs the book),
Addison-Wesley.
[6] Xilinx (2008), MicroBlaze Processor Reference Guide UG081 (v9.0).
[7] Xilinx (2007), PLBV46_SLAVE_SINGLE (v1.00a).
[8] Xilinx (2008), Spartan-3E FPGA Starter Kit Board User Guide (v1.1).
[9] Xilinx (2007), EDK 9.2 MicroBlaze Tutorial in Virtex-4.
[10] Xilinx (2008), XPS Serial Peripheral Interface (SPI) (v1.00a)
[11] Xilinx (2008), XPS UART Lite (v1.00a)
[12] http://www.xilinx.com/microblaze [13] Integrated_circuit, http://en.wikipedia.org. [14] System-on-chip, http://en.wikipedia.org [15] http://www.fpga4fun.com [16] http://forums.xilinx.com [17] http://www.micro-blaze.com [18] http://www.vlsi-world.com