EDK là công cụ phần mềm hữu ích dùng để thiết kế hệ thống vi xử lý nhúng trên kit phát triển FPGA của hãng Xilinx [9]. Đây là một công cụ khá thân thiện với ngƣời sử dụng, cho phép ta thiết kế một hệ thống phức tạp chỉ với những thao tác tƣơng đối đơn giản. Thực chất EDK sử dụng các chƣơng trình viết sẵn bằng ngôn ngữ mô tả phần cứng VHDL (gọi là các IP - Intellectual Property), thƣờng đƣợc biên dịch và tổng hợp sẵn. Ngƣời sử dụng có thể dùng các IP đó, xây dựng các mạch logic kết nối và viết phần mềm để điều khiển chúng. EDK bao gồm hai thành phần chính là công cụ thiết kế phần cứng của hệ thống xử lý nhúng XPS (Xilinx Platform Studio) và môi trƣờng phát triển tích hợp SDK (Software Development Kit). SDK là công cụ hỗ trợ cho XPS, đƣợc sử dụng để xây dựng, biên dịch và kiểm chứng các ứng dụng phần mềm nhúng viết bằng ngôn ngữ C/C++. SDK đƣợc xây dựng trên Eclipse™ open- source framework. Ngoài ra EDK còn bao gồm một số thành phần khác nhƣ các thƣ viện, các trình điều khiển, các chỉ dẫn và một số ví dụ.
Việc thực thi một hệ thống xử lý trên kit FPGA sử dụng phần mềm EDK bao gồm nhiều công đoạn khác nhau từ việc mô tả yêu cầu thiết kế hệ thống, tạo project, kết nối các thành phần của hệ thống, tổng hợp phần cứng/phần mềm cho đến việc mô phỏng và cuối cùng là thực thi hệ thống trên kit FPGA. Các công đoạn thiết kế hệ thống xử lý trên kit FPGA cơ bản đƣợc minh hoạ nhƣ Hình 18.
Quy trình thiết kế một hệ thống vi xử lý trên kit FPGA sử dụng EDK bao gồm:
- Bước 1: Trƣớc tiên để xây dựng một hệ vi xử lý ta cần xây dựng bài toán thiết kế. Tại bƣớc này, ngƣời thiết kế mô tả ý tƣởng và mục đích xây dựng hệ vi xử lý (gồm sơ đồ khối hệ thống, các thành phần để triển khai hệ thống, các kết nối của hệ
thống…) và các tiêu chí kỹ thuật cơ bản để có thể triển khai hệ thống trên cơ sở lõi vi xử lý mềm MicroBlaze.
Yêu cầu thiết kế hệ thống Mô tả các thành phần của hệ thống Xây dựng Project Kết nối các thành phần của hệ thống Mô phỏng và kiểm chứng
Thực thi trên kit FPGA
Hình 18: Quy trình thiết kế hệ thống trên FPGA.
- Bước 2: Sau khi đã xác định đƣợc đặc tả cơ bản của hệ thống cần triển khai ở bƣớc 1, ngƣời thiết kế sẽ mô tả chi tiết cấu trúc, đặc điểm và các thông số kỹ thuật của từng thành phần dùng để triển khai hệ thống.
- Bước 3: Ngƣời thiết kế sử dụng các công cụ của phần mềm EDK để tạo Project gồm lõi xử lý MicroBlaze kết nối với các thành phần đã đƣợc mô tả ở trên (việc kết nối này đƣợc thực hiện thông qua việc gán các chân tín hiệu của MicroBlaze và các chân tín hiệu của các thành phần khác với nhau) và lựa chọn các tiêu chí kỹ thuật chi tiết nhƣ tần số, kích thƣớc bộ nhớ BRAM (Block RAM), các ngoại vi…
- Bước 4: Sau khi đã tạo đƣợc Project, ngƣời thiết kế thực hiện thao tác tổng hợp logic và kết nối phần cứng và phần mềm của hệ thống. Sau đó, thực hiện việc mô phỏng phần cứng nhằm kiểm tra xem hệ thống có lỗi về mặt kết nối hay không.
- Bước 5: Thực hiện mô phỏng, kiểm chứng thiết kế trƣớc khi thực thi trên kit FPGA. Việc mô phỏng và kiểm chứng giúp ngƣời thiết kế tìm ra các lỗi (nếu có) và thực hiện sửa chữa lỗi. Nếu việc mô phỏng chƣa đạt yêu cầu, ngƣời thiết kế phải chỉnh sửa và tối ƣu lại thiết kế.
- Bước 6: Thực thi hệ thống trên FPGA. Tại bƣớc này EDK cho phép thực thi hệ thống trực tiếp trên kit FPGA thông qua các công cụ nạp phần cứng, phần mềm lên vi mạch FPGA và bộ nhớ chƣơng trình.
3.2. Ý tưởng xây dựng hệ vi xử lý sử dụng lõi xử lý MicroBlaze
Nhƣ đã trình bày ở Chƣơng 2, một hệ vi xử lý hoàn chỉnh bao gồm bộ vi xử lý trung tâm (µP: MicroProcessor) kết hợp với các bộ phận ngoại vi khác nhƣ: các mạch nhớ để lƣu trữ chƣơng trình và dữ liệu; các mạch ngoại vi điều khiển vào/ra hay các mạch ngoại vi tạo ra giao tiếp giữa hệ vi xử lý với con ngƣời, với môi trƣờng bên ngoài… Trong đề tài này, hệ vi xử lý đƣợc xây dựng trên cơ sở lõi xử lý mềm MicroBlaze của hãng Xilinx. Do đó, hệ vi xử lý đề xuất bao gồm một lõi xử lý MicroBlaze kết nối với các thành phần ngoại vi khác nhƣ: bộ chuyển đổi tƣơng tự-số ADC (Analog to Digital Conversion), bộ chuyển đổi số-tƣơng tự DAC (Digital to Analog Conversion), khối giao tiếp mạng Ethernet, khối giao tiếp vào/ra nối tiếp theo chuẩn RS-232, giao diện đồ hoạ VGA, giao diện màn hình tinh thể lỏng LCD, các bộ định thời (timers)… Mô hình hệ vi xử lý MicroBlaze đƣợc thể hiện trong Hình 19.
Trong phạm vi đề tài này, do thời gian có hạn tôi triển khai một hệ vi xử lý MicroBlaze đơn giản bao gồm một lõi xử lý MicroBlaze kết nối với bộ chuyển đổi số- tƣơng tự DAC qua giao diện SPI và một bộ giao tiếp truyền thông nối tiếp RS-232 cho phép giao tiếp với thiết bị khác thông qua chuẩn truyền thông nối tiếp RS-232. Mục đích của việc sử dụng chuẩn SPI để kết nối với DAC là nhằm đơn giản hoá quá trình ghép nối vi xử lý với DAC và cũng phù hợp hơn với kit phát triển hiện có tại phòng thí nghiệm. Hơn nữa, tốc độ hoạt động của DAC đƣợc xác định trong hệ thống đề xuất là tƣơng đối thấp (hệ thống đƣợc xây dựng cho mục đích đo lƣờng và điều khiển) nên việc sử dụng chuẩn SPI trong truyền thông giữa vi xử lý và DAC là hoàn toàn hợp lý.
MicroBlaze Ethernet MAC ADC DAC LCD IF PCI Timers UART (RS-232) PLBv46 SPI SPI
Hình 19: Sơ đồ khối hệ vi xử lý đề xuất.
Mục đích xây dựng hệ vi xử lý là sau khi việc kết nối hệ thống hoàn thành, lõi vi xử lý MicroBlaze có thể điều khiển việc truyền dữ liệu nối tiếp hai chiều qua RS- 232 và điều khiển việc cung cấp dữ liệu số cho DAC để tín hiệu đầu ra là tín hiệu tƣơng tự với các dạng tín hiệu tùy theo bài toán ứng dụng. Sơ đồ khối hệ vi xử lý này đƣợc chỉ ra trong Hình 20.
Hình 20: Sơ đồ khối hệ vi xử lý thực nghiệm.
Chức năng của các khối trong hệ vi xử lý có thể đƣợc miêu tả ngắn gọn nhƣ sau:
- MicroBlaze là khối xử lý trung tâm có nhiệm vụ điều khiển mọi hoạt động của hệ vi xử lý. Ví dụ, MicroBlaze điều khiển truyền nhận dữ liệu nối tiếp hai chiều với bộ truyền thông RS-232, điều khiển cung cấp tín hiệu đầu vào số và điều khiển quá trình chuyển đổi số-tƣơng tự cho bộ chuyển đổi DAC.
PC MicroBlaze DAC UART (RS-232) PLBv46 SPI Timers
- Bộ chuyển đổi số-tƣơng tự DAC có nhiệm vụ chuyển đổi từ tín hiệu số do MicroBlaze cung cấp thành tín hiệu tƣơng tự tƣơng ứng.
- Khối giao tiếp ngoại vi nối tiếp SPI thực hiện nhiệm vụ chuyển đổi tín hiệu song song 32 bit từ hệ thống bus của hệ thống thành các tín hiệu nối tiếp đƣa đến các đầu vào tín hiệu của DAC. SPI chứa các bộ đệm truyền và nhận dữ liệu, các thanh ghi trạng thái, điều khiển và thanh ghi dịch.
- Bộ phát nhận không đồng bộ vạn năng UART (Universal Asynchronous Receiver/Transmitter) thực hiện truyền dữ liệu hai chiều giữa hệ vi xử lý với các hệ vi xử lý khác thông qua chuẩn truyền thông nối tiếp RS-232.
Lõi vi xử lý MicroBlaze đƣợc kết nối với các khối SPI, UART, Timers qua hệ thống bus PLBv46. Sự kết nối này gồm hai phần: Thứ nhất là phần kết nối giữa MicroBlaze và hệ thống bus PLB, tiếp đó là phần kết nối giữa hệ thống bus PLB và các khối ngoại vi RS232, SPI.
3.3. Thực thi thiết kế
3.3.1. Kết nối giữa MicroBlaze và hệ thống bus PLB
Lõi xử lý mềm MicroBlaze đƣợc kết nối với hệ thống bus PLB qua khối giao tiếp bus mềm PLB_V46 Master (còn gọi là PLB master if). Đây là hệ thống giao tiếp bus hỗ trợ thiết kế với tốc độ truyền dữ liệu cao, nằm trong họ hệ thống bus PLB cung cấp giao tiếp trực tiếp đơn lẻ giữa User IP logic (gọi là Client IP, ở đây là lõi xử lý mềm MicroBlaze) với bus chuẩn PLB_V46. Sơ đồ khối hệ thống giao tiếp bus PLB_V46 Master đƣợc chỉ ra nhƣ Hình 21.
Trong đó để kết nối với MicroBlaze, PLB sử dụng các giao diện lệnh đọc và viết. Sự điều khiển đọc và viết trong khoảng thời gian PLB Master phục vụ MicroBlaze theo đƣờng một giao diện lệnh. Khi một giao diện lệnh của MicroBlaze yêu cầu truyền dữ liệu tới Master thì thiết bị Master luôn sẵn sàng hỗ trợ trạng thái truyền tốc độ cao trở lại MicroBlaze. Giao diện lệnh cơ bản bao gồm:
- Các đầu vào Master Service (từ MicroBlaze): + Yêu cầu lệnh.
+ Địa chỉ PLB lệnh bắt đầu.
+ Giới hạn chiều dài lệnh truyền (bằng bytes)
+ Trƣờng kích cỡ lệnh (chỉ định số byte truyền cho mỗi lần truyền lên) + Trƣờng kiểu lệnh (bus dữ liệu đơn đặc biệt)
Hình 21 : Sơ đồ khối hệ thống giao tiếp bus PLB_V46 Master.
+ Yêu cầu Reset
- Các đầu ra trạng thái từ PLB Master đến MicroBlaze: + Chấp nhận lệnh
+ Hoàn thành lệnh + Lỗi lệnh
+ Chiều dài lệnh bằng 0.
Giao thức của giao diện lệnh đòi hỏi MicroBlaze liên tục gửi yêu cầu và các quyền kết hợp cho đến khi yêu cầu lệnh đƣợc chấp nhận từ PLB Master. Theo sự đồng ý của lệnh chấp nhận, MicroBlaze có thể ngừng xác nhận yêu cầu và quyền từ lệnh. Nếu một vấn đề xảy ra trong pha địa chỉ của yêu cầu, có thể lệnh chấp nhận sẽ không xảy ra. Thay vì PLB Master có thể trả lời bằng trạng thái lệnh bỏ dở hoặc lệnh lỗi, nó sẽ yêu cầu trong sự kết hợp với sự đòi hỏi của yêu cầu hoàn thành lệnh. Đây là một dấu hiệu để MicroBlaze không thể tìm lại đƣợc lỗi xuất hiện và quá trình truyền không hoàn thành. Nếu một chấp nhận lệnh đƣợc nhận bởi Master Service, PLB Master sẽ đàm phán thành công một pha địa chỉ PLB và pha dữ liệu tƣơng ứng trong tiến trình. Khi pha dữ liệu hoàn thành, PLB Master sẽ xác nhận tín hiệu hoàn thành lệnh, hoàn
thành dữ liệu. Nếu một pha dữ liệu bị lỗi, tín hiệu nhận từ đơn vị bus tớ PLB Slave bởi PLB Master trạng thái lệnh lỗi sẽ cũng đƣợc xác nhận khi sự hoàn thành lệnh đƣợc chấp nhận trong khoảng thời gian xác nhận là một chu kỳ của xung nhịp PLB.
- Giao tiếp lệnh đọc MicroBlaze (đồng bộ với bus PLB clock) đƣợc mô tả ở Hình 22.
Hình 22: Thiết lập tín hiệu giao tiếp lệnh đọc IP client [3].
- Giao tiếp lệnh viết IP client (đồng bộ với bus PLB clock) đƣợc mô tả nhƣ Hình 23.
3.3.2. Kết nối giữa hệ thống bus PLB và các khối ngoại vi
Kit FPGA hỗ trợ các ngoại vi dùng để giao tiếp với thế giới bên ngoài và triển khai các ứng dụng của hệ thống nhƣ bộ chuyển đổi số-tƣơng tự DAC (Digital to Analog Conversion), khối giao tiếp mạng Ethernet, khối giao tiếp vào/ra nối tiếp theo chuẩn RS-232, giao diện đồ hoạ VGA, giao diện màn hình tinh thể lỏng LCD, các bộ định thời (timers)… Sự phối ghép giữa lõi vi xử lý với các ngoại vi này đƣợc thực hiện thông qua hệ thống bus PLB. Hệ thống bus PLB kết nối với các khối ngoại vi qua hệ thống giao tiếp bus mềm PLB_Slave. Khối giao tiếp bus này có các đặc điểm sau:
- Hỗ trợ giao diện trực tiếp giữa IP core của ngƣời sử dụng và hệ thống bus PLB chuẩn.
- Không hỗ trợ cho truy nhập bộ nhớ trực tiếp DMA và IP Master Service. - Hỗ trợ Slave 32 bit kết hợp.
- Hỗ trợ quá trình truyền dữ liệu (đọc và ghi) dạng byte, 16 bit và 32 bit.
Khối giao tiếp bus PLB_Slave_V46 đƣợc thiết kế để hỗ trợ ngƣời sử dụng thực hiện giao diện tốc độ cao giữa IBM PLB bus và IP core của ngƣời sử dụng. Bus này cho phép nhiều lõi IP đƣợc giao tiếp với bus PLB nhờ việc hỗ trợ địa chỉ giải mã ngoài vùng địa chỉ khác nhau nhƣ định dạng bởi ngƣời sử dụng. Tùy chọn PLB_V46 có thể đƣợc tối thiếu hóa cho kết nối từ điểm tới điểm, giảm tài nguyên của FPGA và tiềm năng nâng cấp.
Yếu tố cơ bản của thiết kế là sự tham gia của đơn vị tớ bus (bus slave). Hình 24 cung cấp các chức năng cho hoạt động các giao tiếp của bus slave. Nó thực thi giao thức và chuyển dịch thời gian giữa bus PLB và IPIC.
Hình 24: Sơ đồ khối hệ thống giao tiếp bus PLB_V46 slave.
Trong đó hệ thống bus PLB giao diện với khối IP core của ngƣời dùng qua các tín hiệu cơ bản sau:
- Bus2IP_Reset: Tín hiệu reset có mức tích cực cao dùng cho lõi IP.
- IP2Bus_Data: Bus dữ liệu đọc vào từ IP của ngƣời sử dụng. Dữ liệu đƣợc hạn chế bằng sự xác nhận của tín hiệu IP2Bus_RdAck và sƣờn lên của tín hiệu Bus2IP_Clk.
- IP2Bus_WrAck: Giới hạn dữ liệu viết, có mức tích cực cao. Dữ liệu viết trên tín hiệu Bus2IP_Data đƣợc cho rằng đã đƣợc lõi IP xác nhận trên sƣờn cao của tín hiệu Bus2IP_Clk và IP2Bus_WrAck, đã thiết lập mức logic cao bởi lõi IP.
- IP2Bus_RdAck: Giới hạn dữ liệu đọc, có mức tích cực cao. Dữ liệu viết trên tín hiệu Bus2IP_Data đƣợc cho rằng có giá trị bởi lõi IP trên sƣờn cao của tín hiệu Bus2IP_Clk và tín hiệu IP2Bus_RdAck đã xác nhận bởi lõi IP.
- IP2Bus_Error: Tín hiệu có mức tích cực cao cho biết lõi IP đã tìm ra một lỗi với quá trình hoạt động đƣợc yêu cầu.Tín hiệu này đƣợc xác nhận trong sự liên kết với tín hiệu IP2Bus_RdAck hoặc tín hiệu IP2Bus_WrAck.
- Bus2IP_Addr: Tín hiệu địa chỉ biểu thị địa chỉ mong muốn của hoạt động đọc hoặc viết đƣợc yêu cầu.
- Bus2IP_Data: Tín hiệu dữ liệu viết tới lõi IP. Dữ liệu viết đƣợc lõi IP chấp nhận trong suốt một hoạt động viết bởi sự xác nhận của tín hiệu IP2Bus_WrAck và sƣờn lên của tín hiệu Bus2IP_Clk.
- Bus2IP_RNW: Tín hiệu này chỉ ra khả năng của một hoạt động đƣợc yêu cầu với lõi IP. Tín hiệu ở mức cao là tín hiệu đọc, tín hiệu ở mức thấp là tín hiệu viết .
- Bus2IP_CS: Chip tích cực ở mức logic cao để chọn bus, mỗi trạng thái bit của bus tƣơng ứng với một địa chỉ hai lối vào trong C_ARD_ADDR_RANGE_ARRAY , sự xác nhận của chip lựa chọn sẽ chỉ ra một yêu cầu giải quyết tích cực tới không gian địa chỉ đích của chip lựa chọn.
- Bus2IP_RdCE: Chip tích cực ở mức logic cao để cho phép bus. Chip cho phép đƣợc chỉ định qua các lối vào của ngƣời sử dụng trong C_ARD_NUM_CE_ARRAY. Các chip cho phép chỉ đƣợc xác nhận trong suốt các yêu cầu thực hiện đọc kích hoạt với không gian địa chỉ đích và trong sự kết nối tƣơng ứng với địa chỉ thay thế không với không gian.
- Bus2IP_WrCE: Chip tích cực ở mức logic cao để cho phép bus. Chip cho phép đƣợc chỉ định qua các lối vào của ngƣời sử dụng trong C_ARD_NUM_CE_ARRAY. Các chip cho phép chỉ đƣợc xác nhận trong suốt các yêu cầu thực hiện viết kích hoạt với không gian địa chỉ đích và trong sự kết nối tƣơng ứng với địa chỉ thay thế không với không gian.
3.3.3. Bộ giao tiếp truyền thông nối tiếp UART Lite
Bộ giao tiếp truyền thông nối tiếp UART Lite chuẩn RS232 là một thành phần của hệ vi xử lý cần triển khai. Để kết nối cổng RS232 với khối giao tiếp bus PLB của lõi xử lý mềm MicroBlaze, EDK hỗ trợ bộ giao tiếp mềm XPS UART Lite, bộ giao tiếp này có nhiệm vụ chuyển đổi dữ liệu song song 32 bit trên khối giao tiếp bus PLB thành tín