TÌM HIỂU, NGHIÊN CỨU VÀ THỰC THI THỬ NGHIỆM<br />
LÕI VI XỬ LÝ PICOBLAZE TRÊN CÔNG NGHỆ FPGA<br />
<br />
PHAN HẢI PHONG<br />
ĐẶNG XUÂN VINH - HOÀNG LÊ HÀ<br />
Trường Đại học Khoa học - Đại học Huế<br />
<br />
Tóm tắt: Bài báo tập trung vào việc nghiên cứu, tìm hiểu cấu trúc của<br />
lõi vi xử lý Picoblaze, từ đó đưa ra phương thức triển khai và thực thi<br />
lõi vi xử lý này lên một chip FPGA. Các kết quả đạt được sẽ phục vụ<br />
cho mục đích so sánh, đánh giá cách thức và hiệu năng hoạt động của<br />
lõi này với một số lõi vi xử lý khác. Từ đó đưa ra lựa chọn một lõi vi xử<br />
lý phù hợp cho việc xây dựng một hệ thống vi điều khiển dựa trên lõi<br />
đó.<br />
Từ khóa: Vi điều khiển (VĐK), vi xử lý (VXL), Picoblaze, FPGA.<br />
1<br />
<br />
GIỚI THIỆU CHUNG<br />
<br />
Ngày nay, cùng với sự phát triển của các hệ thống điện tử, tự động hoá, các hệ thống<br />
nhúng đã đặt ra yêu cầu về việc cần phải có các thế hệ VĐK mới có tốc độ hoạt động<br />
cao và tích hợp thêm nhiều thiết bị ngoại vi mới. Điều này đặt ra cho lĩnh vực thiết kế vi<br />
mạch điện tử một hướng nghiên cứu quan trọng, đó là phát triển các thế hệ VĐK mới có<br />
tốc độ cao hơn, hoạt động ổn định hơn và đặc biệt là phải tích hợp được thêm nhiều tính<br />
năng tiên tiến hơn.<br />
Để phát triển được một lõi VĐK tiên tiến, hoạt động với tốc độ cao, có nhiều thiết bị ngoại<br />
vi bổ trợ thì một yêu cầu cấp thiết được đặt ra đó là phải có một lõi VXL phù hợp để làm<br />
nhân xử lý chính cho toàn bộ hệ thống. Hiện nay, nhiều lõi VXL như vậy đã được phát<br />
triển: từ các lõi VXL 8-bit đơn giản như 8051, Picoblaze. . . cho đến những lõi VXL 32-bit<br />
phức tạp như MicroBlaze, NiosII, Leon3. . . Trong đó Picoblaze được xem như là một lõi<br />
VXL 8-bit đơn giản nhưng có hiệu năng cao, khả năng mở rộng lớn và thường được lựa<br />
chọn sử dụng trong các nghiên cứu cũng như trong các ứng dụng công nghiệp [1, 2].<br />
Picoblaze là một lõi vi xử lý 8-bit có cấu trúc của tập lệnh thu gọn RISC (Reduced<br />
Instruction Set Computer) được tối ưu phát triển cho các họ FPGA [3] như Spartan 3,<br />
Tạp chí Khoa học và Giáo dục, Trường Đại học Sư phạm Huế<br />
ISSN 1859-1612, Số 01(33)/2015: tr. 78-87<br />
<br />
TÌM HIỂU, NGHIÊN CỨU VÀ THỰC THI THỬ NGHIỆM LÕI VI XỬ LÝ...<br />
<br />
79<br />
<br />
Virtex II, và Virtex II Pro của Xilinx [5]. Lõi vi xử lý Picoblaze là một lõi vi xử lý có hiệu<br />
quả cao cho những ứng dụng nhỏ, yêu cầu xử lý dữ liệu đơn giản. Nó là một lõi vi xử lý<br />
ảo, tồn tại dưới dạng một lõi mềm được phát triển bởi hãng Xilinx.<br />
Picoblaze là một lõi vi xử lý đã được tối ưu về mặt hiệu suất và có chi phí phát triển<br />
thấp. Sau khi thực thi, nó chỉ chiếm khoảng 96 slices của FPGA, tương đương 12,5% tài<br />
nguyên của chip XC3S50 hoặc 0,3% tài nguyên của chip FPGA XC3S5000. Lõi vi xử lý<br />
Picoblaze có thể hoạt động với hiệu suất từ 44000 tới 100000 câu lệnh/giây (MPIS – milion<br />
instructions per second) tùy thuộc vào loại chip FPGA được sử dụng và tốc độ hoạt động<br />
tối đa của dòng chip đó.<br />
Bài báo này tập trung vào việc nghiên cứu, tìm hiểu về cấu trúc của lõi VXL Picoblaze, từ<br />
đó có thể đưa ra được phương thức triển khai, thực thi lõi này lên một phần cứng FPGA<br />
cụ thể. Từ kết quả thực thi sẽ rút ra các đánh giá, so sánh về hiệu năng, khả năng hoạt<br />
động của lõi VXL này trong thực tế. Các kết quả đánh giá sẽ được sử dụng trong việc lựa<br />
chọn một lõi VXL phù hợp nhằm để phát triển một hệ thống VĐK 8-bit hỗ trợ nhiều thiết<br />
bị ngoại vi và có khả năng ứng dụng cao.<br />
2<br />
<br />
KIẾN TRÚC CHUNG CỦA LÕI VXL PICOBLAZE<br />
<br />
Sơ đồ khối của lõi VXL Picoblaze được mô tả như trong Hình 1. Chức năng của một số<br />
khối chính trong lõi VXL này được mô tả như sau:<br />
<br />
Hình 1: Sơ đồ khối của lõi vi xử lý Picoblaze.<br />
<br />
• Khối xử lý số học ALU: Khối này sẽ thực hiện mọi tính toán của vi xử lý bao gồm:<br />
– Các phép tính số học cơ bản như cộng và trừ.<br />
– Các phép tính logic bit như AND, OR và XOR.<br />
– Các phép toán kiểm tra bit và so sánh số học.<br />
– Các phép toán dịch bit và xoay bit.<br />
<br />
80<br />
<br />
PHAN HẢI PHONG và cs.<br />
<br />
Tất cả các phép toán được thực hiện trong khối ALU đều dùng các toán hạng đích và<br />
toán hạng nguồn (trừ phép toán dịch bit và xoay bit là không có toán hạng nguồn),<br />
trong đó toán hạng đích là một trong các thanh ghi đặc biệt Sx. Toán hạng nguồn<br />
nếu có sẽ là thanh ghi thứ hai Sy hoặc là một hằng số trực tiếp 8 bit. Và do đó kết<br />
quả sẽ được trả lại chính toán hạng nguồn là thanh ghi Sx.<br />
• Khối các thanh ghi chức năng chung: Vi xử lý Picoblaze bao gồm 16 thanh ghi chức<br />
năng chung (từ S0 tới SF) có độ rộng 1 byte. Để cho dễ dàng trong khi lập trình, các<br />
thanh ghi này có thể được đổi tên bằng các chỉ lệnh hợp ngữ (assembler directive).<br />
Trong VXL Picoblaze không có thanh ghi nào có mức ưu tiên cao hơn hoặc dành<br />
riêng cho một tác vụ đặc biệt nào. VXL Picoblaze hoàn toàn không có thanh ghi<br />
tính toán như các vi điều khiển khác như: 8051, PIC, AVR. . . Do đó mỗi kết quả<br />
được tính toán trong một thanh ghi được chỉ định trước.<br />
• Các cờ chỉ thị (flags): Các phép tính thực hiện trên ALU ảnh hưởng tới trạng thái<br />
của các cờ ZERO và cờ CARRY. Cờ ZERO được thiết lập khi kết quả của phép toán<br />
trước bằng 0. Cờ CARRY được thiết lập phụ thuộc vào nhiều điều kiện khác nhau, và<br />
phụ thuộc vào quá trình thực hiện của phép toán trước. Cờ INTERRUPT_ENABLE<br />
cho phép hoạt động ngắt được thực hiện.<br />
• Các cổng vào/ra (Input/output): Các cổng vào/ra làm tăng khả năng ứng dụng của<br />
Picoblaze và cho phép VXL này có thể kết nối với bất kỳ thiết bị ngoại vi nào.<br />
Picoblaze có thể mở rộng đến 256 cổng vào, 256 cổng ra hoặc cho phép tạo nên một<br />
sự kết hợp giữa các cổng vào/ra này. Cổng ra PORT_ID là nơi chứa địa chỉ của cổng<br />
vào/ra. Trong quá trình đọc dữ liệu thì Picoblaze đọc dữ liệu từ cổng IN_PORT và<br />
lưu vào thanh ghi đặc biệt Sx. Trong quá trình xuất dữ liệu, Picoblaze ghi nội dung<br />
của thanh ghi Sx ra cổng OUTPUT.<br />
• Bộ đếm chương trình (Program Counter PC): Bộ đếm chương trình sẽ chỉ tới câu<br />
lệnh tiếp theo được thực hiện. Theo mặc định, PC tự động tăng lên tới địa chỉ<br />
của câu lệnh tiếp theo khi thực hiện một câu lệnh. Chỉ có các lệnh JUMP, CALL,<br />
RETURN, RETURNI và các sự kiện Interrupt, Reset là có thể thay đổi hành vi này.<br />
Nội dung của PC không thể thay đổi được bằng mã chương trình. PC có độ rộng<br />
10 bit vì thế nó có thể trỏ tới bất kì đâu trong vùng không gian 1024 câu lệnh (từ<br />
0x000 tới 0x3FF-hex). Nếu PC trỏ tới đỉnh bộ nhớ 0x3FF thì nó sẽ quay về lại vị<br />
trí ban đầu 0x000.<br />
• Khối điều khiển luồng chương trình (Program Flow Control): Khối điều khiển luồng<br />
chương trình cho phép thay đổi thứ tự thực hiện mặc định của chương trình thông<br />
qua các câu lệnh điều khiển luồng chương trình có điều kiện hoặc không có điều kiện.<br />
Các lệnh điều khiển thực thi này bao gồm: JUMP,CALL, RETURN, RETURNI.<br />
<br />
TÌM HIỂU, NGHIÊN CỨU VÀ THỰC THI THỬ NGHIỆM LÕI VI XỬ LÝ...<br />
<br />
81<br />
<br />
• Khối ngắt (Interrupts): Vi xử lý Picoblaze có một ngõ vào INTERRUPT tùy ý<br />
(Hình 2), cho phép vi xử lý Picoblaze có thể làm chủ được các sự kiện không đồng<br />
bộ bên ngoài. Ở đây, các sự kiện không đồng bộ liên quan đến ngắt có thể xảy<br />
ra tại mọi thời điểm trong một chu kỳ lệnh. Picoblaze đáp ứng các tín hiệu ngắt<br />
nhanh nhất là sau 5 chu kì xung clock. Để cho phép ngắt ta dùng lệnh ENABLE<br />
INTERRUPT và vô hiệu hóa ngắt ta dùng lệnh DISABLE INTERRUPT.<br />
<br />
Hình 2: Tín hiệu ngắt trên lõi vi xử lý Picoblaze.<br />
Các tín hiệu vào/ra trên VXL Picoblaze được mô tả như ở Hình 3<br />
<br />
Hình 3: Giao diện vào ra của các tín hiệu trên Picoblaze.<br />
<br />
3<br />
<br />
PHƯƠNG PHÁP THỰC THI LÕI VXL PICOBLAZE LÊN FPGA<br />
<br />
Vi xử lý Picoblaze được cung cấp dưới dạng mã nguồn VHDL [4] trong một file có tên là<br />
KCPSM3.vhd. Lõi này đã được tối ưu về hiệu năng và đảm bảo trong việc thực thi trên các<br />
dòng FPGA của Xilinx như: Spartan-3, Virtex-II hay Vertex-II Pro. Các mã nguồn được<br />
sử dụng cho cả quá trình tổng hợp, mô phỏng. Trong quá trình phát triển và thực thi lõi<br />
VXL này, ta có thể sử dụng công cụ Xilinx Synthesizs Tool (XST) cho quá trình tổng hợp<br />
logic và phần mềm ModelSim để mô phỏng hoạt động của lõi VXL. Các công cụ tổng hợp<br />
logic và mô phỏng khác cũng có thể được sử dụng để thực thi và kiểm chứng hoạt động<br />
của Picoblaze.<br />
<br />
82<br />
Component KCPSM3<br />
Port (<br />
Address<br />
Instruction<br />
Port_id<br />
Write_strobe<br />
Out_port<br />
Read_strobe<br />
In_port<br />
Intertupt<br />
Interrupt_ack<br />
Reset<br />
Clk<br />
End component ;<br />
<br />
PHAN HẢI PHONG và cs.<br />
<br />
:<br />
:<br />
:<br />
:<br />
:<br />
:<br />
:<br />
:<br />
:<br />
:<br />
:<br />
<br />
out s t d _ l o g i c _ v e c t o r ( 9 downto 0 ) ;<br />
in s t d _ l o g i c _ v e c t o r ( 1 7 downto 0 ) ;<br />
out s t d _ l o g i c _ v e c t o r ( 7 downto 0 ) ;<br />
out s t d _ l o g i c ;<br />
out s t d _ l o g i c _ v e c t o r ( 7 downto 0 ) ;<br />
out s t d _ l o g i c ;<br />
in s t d _ l o g i c _ v e c t o r ( 7 downto 0 ) ;<br />
in s t d _ l o g i c ;<br />
out s t d _ l o g i c ;<br />
in s t d _ l o g i c ;<br />
in s t d _ l o g i c ) ;<br />
<br />
Component prog_rom<br />
Port (<br />
Address : in s t d _ l o g i c _ v e c t o r ( 9 downto 0 ) ;<br />
I n s t r u c t i o n : out s t d _ l o g i c _ v e c t o r ( 1 7 downto 0 ) ;<br />
Clk<br />
: in s t d _ l o g i c ) ;<br />
End conponent ;<br />
<br />
Module KCPSM3 bao gồm ALU, các thanh ghi và bộ nhớ tạm RAM. Chỉ duy nhất bộ<br />
nhớ chương trình là không nằm trong KCPSM3. Picoblaze sẽ được khai báo như là một<br />
Component để có thể ghép nối với các thành phần khác trong mã nguồn một cách dễ dàng.<br />
Bộ nhớ chương trình ROM của Picoblaze cũng tồn tại dưới dạng mã nguồn VHDL và cũng<br />
được khai báo như một Componet để có thể dễ dàng ghép nối với Picoblaze. Chương trình<br />
điều khiển cho PicoBalade sẽ được viết dưới dạng hợp ngữ, sau đó sẽ được biên dịch và<br />
kết hợp với khối ROM này để tạo thành một khối thành phần có chứa mã chương trình<br />
cho VXL. Việc khai báo cho bộ nhớ ROM và cách ghép nối với nó vào hệ thống được thực<br />
hiện thông qua đoạn mã sau. Đoạn mã nguồn để ghép nối với lõi VXL Picoblaze Sau khi<br />
ghép nối, ta được mô hình ghép nối giữa Picoblaze và bộ nhớ ROM như ở Hình 4 Để viết<br />
mã lệnh cho chương trình (với tên mở rộng là .psm) thì chúng ta có thể dùng bất cứ trình<br />
soạn thảo nào để lập trình dựa theo tập lệnh của Picoblaze đã được cung cấp. Sau đó,<br />
chương trình biên dịch (KCPSM3.exe) sẽ kết hợp chương trình mã lệnh với các mã nguồn<br />
của bộ nhớ ROM đã được định nghĩa sẵn dưới dạng file .vhd, .coe, .v để biên dịch thành<br />
một khối nhớ ROM đã chứa mã lệnh ở dạng các file .vhd, .v để có thể thực thi trên FPGA.<br />
<br />