Tín hiệu Thiết bị không cho phép Giá trị không cho phép
SPI_SS_B SPI Serial Flash 1
AMP_CS Programmable Pre-Amplifier 1
AD_CONV ADC 0
SF_CE0 StrataFlash Parallel Flash ROM 1 FPGA_INIT_B Plaform Flash PROM 1
Chu kỳ bus SPI đƣợc mô tả chi tiết trong Hình 33. Mỗi bit đƣợc truyền hoặc nhận đều quan hệ với tín hiệu xung clock SPI_SCK. Dữ liệu đƣợc truyền trên sƣờn lên hoặc sƣờn xuống của xung clock tùy thuộc vào cách cấu hình cho bit CPOL (bit số 28) của thanh ghi điều khiển SPI, trong đề tài này ta cấu hình CPOL=0 để dữ liệu đƣợc nhận trên sƣờn xuống của xung clock SPI_SCK. Tốc độ xung đồng hồ tối đa lên tới 50MHz.
Hình 33: Giản đồ biểu diễn dạng tín hiệu sự truyền thông SPI.
Tần số xung clock SPI_SCK phụ thuộc vào tần số hệ thống bus PLB (PLB_Clk). Trong hệ vi xử lý triển khai tần số PLB_Clk là 50MHz, với hệ số chia là 32. Nhƣ vậy tần số xung clock của tín hiệu SPI_SCK xấp xỉ 1,56MHz.
Để FPGA truyền tín hiệu trên bus SPI_MOSI thì Micro Blaze phải điều khiển tín hiệu DAC_CS ở mức thấp. Việc này đƣợc thực hiện bằng cách ghi giá trị vào thanh ghi lựa chọn slave của SPI là 0x00 (tín hiệu SSở mức thấp). Các bit dữ liệu đã đƣợc MicroBlaze ghi vào thanh ghi truyền dữ liệu của SPI sẽ đƣợc chuyển tới DAC theo thứ tự bit có trọng số lớn nhất đƣợc truyền trƣớc. LTC2624 giữ dữ liệu đầu vào (SPI_MOSI) trên sƣờn cao của xung clock SPI_SCK. Dữ liệu phải đƣợc xác nhận giá trị sau ít nhất 4ns sau sƣờn cao của xung clock.
Sau khi truyền hết 32 bit dữ liệu, FPGA hoàn thành việc truyền thông qua SPI bằng cách chuyển DAC_CS lên mức cao. Việc này đƣợc thực hiện bằng cách ghi giá trị vào thanh ghi lựa chọn slave của SPI là 0x01 (tín hiệu SSở mức cao). Khi đó, quá trình chuyển đổi từ tín hiệu số sang tín hiệu tƣơng tự đƣợc bắt đầu.
Kết quả lựa chọn tần số xung clock và tín hiệu SS trong cấu hình phần cứng hệ thống đƣợc chỉ ra nhƣ trong Hình 34.
Hình 34: Lựa chọn tần số xung clock, tín hiệu SStrong cấu hình phần cứng.
- Giao thức truyền thông: DAC cung cấp hai giao thức truyền thông là 24 bit và 32 bit. Giao thức truyền thông 32 bit đƣợc chỉ ra trong Hình 35.
Hình 35: Giao thức truyền thông SPI với LTC2624 DAC.
Trong khi DAC biến đổi, giao diện SPI đƣợc định dạng bởi thanh ghi dịch 32 bit. Mỗi từ lệnh 32 bit bao gồm trƣờng lệnh, trƣờng địa chỉ và trƣờng các giá trị dữ liệu. Trƣớc tiên FPGA gửi đi 8 bit giả, tiếp theo là 4 bit lệnh (thông thƣờng sử dụng từ lệnh có giá trị 0011). Tiếp theo từ lệnh, FPGA gửi trƣờng địa chỉ 4 bit để lựa chọn một hoặc cả bốn kênh đầu ra tƣơng tự của DAC và 4 bit đầu tiên của dữ liệu, tiếp nữa là 8 bit dữ liệu. Cuối cùng 4 bit giả đƣợc thêm vào để truyền đi trong từ lệnh 32 bit.
Giá trị điện áp trên các đầu ra của DAC
Mỗi kênh đầu ra tƣơng tự của DAC tƣơng đƣơng với một giá trị số là 12 bit không dấu, D[11:0], đƣợc FPGA chuyển tới DAC qua giao diện SPI. Điện áp đầu ra này đƣợc tính theo công thức sau:
REFERENCE OUT D V V 4096 ] 0 : 11 [
Với VREFERENCE là điện áp tham chiếu. Điện áp này là khác nhau đối với bốn kênh của DAC. Kênh A và kênh B sử dụng điện áp tham chiếu là 3.3V, kênh C và kênh D sử dụng điện áp tham chiếu là 2,5V, sai số là 5%. Khi đó điện áp trên các đầu ra của các kênh DAC đƣợc tính theo công thức sau;
- Đầu ra trên kênh A và B của DAC:
%) 5 3 , 3 ( 4096 ] 0 : 11 [ D V V VOUTA
- Đầu ra trên kênh D và C của kênh DAC:
%) 5 5 , 2 ( 4096 ] 0 : 11 [ D V V VOUTC
3.3.6. Thực thi trên công cụ EDK
Để triển khai hệ vi xử lý MicroBlaze trên cơ sở các thành phần của hệ đã tìm hiểu ở các mục trên ta sử dụng các công cụ của phần mềm EDK và qua các bƣớc sau:
- Thứ nhất: Tạo Project
Trong bƣớc này ta tạo một project mới, các công cụ của EDK sẽ cho phép ta xây dựng một hệ thống dựa trên các kit hỗ trợ có sẵn của Xilinx. Ở đây ta sẽ lựa chọn kit xây dựng là kit Spartan 3E. Sau khi lựa chọn kit Spartan 3E với các thông số kỹ thuật có sẵn, ta tạo lõi xử lý mềm MicroBlaze trên kit và lựa chọn các tham số kỹ thuật cho MicroBlaze nhƣ tần số (50MHz); kích thƣớc BRAM (Block RAM: RAM ở trong chip, tốc độ cao và do chip quản lý), kích thƣớc này tùy thuộc vào số lƣợng cổng của FPGA đƣợc sử dụng, đối với FPGA đƣợc sử dụng trong Kit Spartan 3E thì kích thƣớc tối đa của BRAM là 16KB; cổng truyền thông nối tiếp RS232 và các port trên FPGA mà ta sử dụng trong thiết kế.
- Thứ hai: Kết nối các thành phần của hệ thống
Trong bƣớc này, ta sử dụng phần mềm EDK để kết nối MicroBlaze với các thành phần khác của hệ: Trên cơ sở các core có sẵn (XPS UART và XPS SPI), ta sử dụng các công cụ của EDK để tạo các kết nối với MicroBlaze nhƣ đã nêu ở phần trên sau đó kiểm tra lỗi thực hiện thao tác tạo Generate Netlist và chạy lại hệ thống.
- Thứ ba: Tạo file.bit
Tại bƣớc này ta thực hiện thao tác Generate Bitstream để tạo file.bit cho hệ thống và tiếp tục chạy lại hệ thống.
Sau các bƣớc trên, một hệ vi xử lý lõi MicroBlaze đã đƣợc triển khai nhƣ ý tƣởng trình bày ban đầu. Tiến hành kết nối máy tính với kit FPGA và thực hiện thao tác cấu hình thiết bị từ FPGA để chuẩn bị cho các ứng dụng của hệ thống. Phần xây dựng bài toán ứng dụng sẽ đƣợc trình bày ở Chƣơng 4.
3.4. Một số kết quả thực thi phần cứng
Sau khi thực thi hệ thống trên các công cụ của phần mềm EDK, hệ thống đã đƣợc mô phỏng và kiểm chứng theo ý tƣởng đã đề xuất. Phần mềm EDK (phiên bản 10.1) của hãng Xilinx đƣợc sử dụng để kết nối và tổng hợp phần cứng của hệ thống. Toàn bộ quá trình thực thi phần cứng đƣợc thực hiện trên kit FPGA Spartan-3E của hãng Xilinx đáp ứng đủ các thiết bị ngoại vi và số lƣợng cổng vào/ra của thiết kế. Quá trình thực nghiệm đã thực hiện việc đánh giá tài nguyên phần cứng cần sử dụng để xây dựng nên hệ thống vi xử lý đề xuất.
Bảng 10 trình bày báo cáo về tài nguyên phần cứng đã đƣợc sử dụng để thực thi hệ thống nói trên.
Tên tài nguyên Số lượng sử dụng Số lượng có Tỷ lệ sử dụng
Số slice sử dụng như thanh ghi (Slice Register)
3549 9312 38%
Số lƣợng FlipFlop 3.548
Số bộ chốt dữ liệu (Latch) 1
Tổng số LUT 4 lối vào 4063 9312 43%
Số LUT đƣợc sử dụng nhƣ các bộ logic 3540 Số LUT đƣợc sử dụng nhƣ các bộ định tuyến 188 Số LUT đƣợc sử dụng cho cổng bộ nhớ RAM 320
Số bộ đệm chân vào/ra (IOB) 97 232 41% Số bộ đệm xung nhịp (BUFG) 5 24 20% Số bộ quản lý xung digital clock (DCMs) 2 4 50% Số khối quét đường biên (BSCANs) 1 1 100% Số bộ nhân 18x18 (MULT18X18SIOs) 7 20 35%
Bảng 10: Số lượng tài nguyên phần cứng đã sử dụng.
Từ kết quả ta có thể thấy hệ vi xử lý đƣợc thiết kế sử dụng hết 3549 Slice để dùng làm các thanh ghi (chiếm 38% lƣợng tài nguyên phần cứng đƣợc cung cấp). Trong đó hầu hết số slice đƣợc sử dụng nhƣ là các flip flop (3548/3549 slice thanh ghi, chiếm 99,9%) chỉ còn lại một slice là bộ chốt dữ liệu. Số lƣợng bảng tìm kiếm 4 lối vào (Look Up Table - LUT) đƣợc sử dụng là 4063 (sử dụng hết 43% tài nguyên phần cứng) và phần lớn đƣợc sử dụng để thực hiện các phép toán logic. Số lƣợng bộ đệm chân vào ra đƣợc sử dụng là 97 đơn vị, chiếm gần 50% lƣợng tài nguyên có trên chip.
Chương 4 Kiểm thực hệ thống với một số ứng dụng minh hoạ
Quá trình kiểm chứng ở chƣơng trƣớc cho thấy hệ vi xử lý thực nghiệm đã đƣợc xây dựng và kết nối theo đúng yêu cầu. Chƣơng này trình bày việc triển khai một số ứng dụng cụ thể trên hệ vi xử lý nhằm kiểm thực hoạt động của hệ thống trong thực tế. Các ứng dụng đƣợc thực hiện trên kit phát triển Spartan-3E của hãng Xilinx. Chƣơng trình ứng dụng đƣợc viết bằng ngôn ngữ lập trình bậc cao C/C++
đƣợc hỗ trợ bởi EDK.
4.1. Thực hiện truyền thông dữ liệu hai chiều giữa hệ vi xử lý và máy tính qua cổng nối tiếp RS232 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.