Trong tài liệu hƣớng dẫn của các dòng FPGA của Xilinx còn sử dụng khái niệm SLICE, 1 Slice gồm 4 khối logic tạo thành, số lƣợng các Slices thay đổi từ vài ngàn đến vài chục ngàn tùy theo loại FPGA.
- Hệ thống mạng liên kết lập trình được: Mạng liên kết trong FPGA đƣợc cấu thành từ các đƣờng kết nối theo hai phƣơng ngang và đứng, tùy theo từng loại FPGA mà các đƣờng kết nối đƣợc chia thành các nhóm khác nhau, ví dụ trong XC4000 của Xilinx có 3 loại kết nối: ngắn, dài và rất dài. Các đƣờng kết nối đƣợc nối với nhau thông qua các khối chuyển mạch lập trình đƣợc (programable switch), trong một khối
Logic block
I/O block Programmable interconnects
chuyển mạch chứa một số lƣợng nút chuyển lập trình đƣợc, cho phép thực hiện các dạng liên kết phức tạp khác nhau.
- Các khối vào/ra (I/O blocks): Đƣợc phân bổ xung quanh vi mạch tạo thành các liên kết với bên ngoài. Khối vào/ra nhiều hay ít là tuỳ thuộc vào từng loại FPGA. Chúng có thể đƣợc kết nối với các thiết bị bên ngoài nhƣ LED, USB, RS232, RAM... tuỳ theo mục đích sử dụng.
- Các phần tử tích hợp sẵn: Ngoài các khối logic, tùy theo các dòng FPGA khác nhau, còn có các phần tử tích hợp sẵn đƣợc sử dụng cho những mục đích cụ thể. Ví dụ để thiết kế những ứng dụng dạng SoC, dòng Virtex 4, 5 của Xilinx có chứa nhân xử lý Power PC; để thiết kế những ứng dụng xử lý tín hiệu số, dòng Virtex của Xilinx tích hợp các DSP Slice là bộ nhân, cộng tốc độ cao, thực hiện hàm A*B+C.
Ứng dụng của FPGA:
FPGA đƣợc ứng dụng trong các lĩnh vực xử lý tín hiệu số, các hệ thống hàng không, vũ trụ, quốc phòng, tiền thiết kế mẫu ASIC (ASIC prototyping), các hệ thống điều khiển trực quan, phân tích nhận dạng ảnh, nhận dạng tiếng nói, mật mã học, mô hình phần cứng máy tính...
Do tính linh động cao trong quá trình thiết kế, FPGA cho phép giải quyết lớp những bài toán phức tạp mà trƣớc kia chỉ thực hiện nhờ phần mềm máy tính. Ngoài ra nhờ mật độ cổng logic ngày càng lớn, FPGA đƣợc ứng dụng cho những bài toán đòi hỏi khối lƣợng tính toán lớn và dùng trong các hệ thống làm việc theo thời gian thực.
Quy trình thiết kế VLSI với công nghệ FPGA:
Thiết kế VLSI với công nghệ FPGA thƣờng tuân theo quy trình nhƣ mô tả trong Hình 9. Trong quá trình mô tả thiết kế (Design Entry), ngƣời thiết kế có thể sử dụng các sơ đồ mạch điện, các ngôn ngữ mô tả phần cứng hoặc kết hợp cả hai phƣơng pháp này. Ngƣời thiết kế chỉ lựa chọn sử dụng sơ đồ mạch điện khi muốn mô tả chi tiết các phần cứng. Trái lại, sử dụng ngôn ngữ mô tả, ngƣời thiết kế có thể thiết kế theo các thuật toán để mô tả các mạch phức tạp với thời gian mô tả nhanh gọn hơn, việc sửa chữa do đó cũng dễ dàng hơn.
Quá trình tổng hợp logic (Synthesis) là quá trình dịch từ các ngôn ngữ mô tả sang dạng mạch điện hoàn chỉnh, còn gọi là dạng netlist. Nếu trong thiết kế có sử dụng các bản thiết kế các linh kiện phụ trợ thì quá trình tổng hợp cũng tạo ra dạng netlist của các thành phần con này. Quá trình tổng hợp cũng thực hiện kiểm tra lỗi cú pháp trong file mã nguồn mô tả và phân tích thứ bậc trong thiết kế nhằm đảm bảo tối ƣu hóa kiến trúc của bản thiết kế.
Quá trình thực thi (Implementation) thƣờng bao gồm ba bƣớc: dịch (Translate), gắn kết với thƣ viện phần cứng (Map), đặt chỗ và định tuyến (Place and Route). Bƣớc dịch tổng hợp tất cả các netlist thành một thiết kế logic, gán các cổng vào ra của thiết kế với linh kiện phần cứng thực tế (là các linh kiện trong vi mạch FPGA). Bƣớc gắn kết với thƣ viện phần cứng thực hiện việc phân chia bản thiết kế thành từng phần nhỏ tƣơng ứng với các khối cơ bản (block) của FPGA. Bƣớc đặt chỗ và định tuyến thực hiện việc định vị trí các block trên chip thực tế và tạo các đƣờng kết nối giữa các khối này (còn đƣợc gọi là thực thi layout). Lúc này bản thiết kế hoàn chỉnh, tƣơng ứng với FPGA đƣợc tạo ra.
Quá trình lập trình thiết bị (Device Programming) thực hiện việc chuyển bản thiết kế sau bƣớc Implemention sang định dạng có thể nạp vào chip FPGA. Cuối cùng là thực hiện việc nạp (download) thiết kế vào FPGA.
Song song với quy trình thiết kế trên là quy trình kiểm chứng thiết kế. Kiểm chứng bao gồm các công việc: mô phỏng hành xử (Behavioral Simulation), mô phỏng chức năng (Functional Simulation) và phân tích thời gian (Timing Analysis). Mô phỏng hành xử là bƣớc đầu tiên và đƣợc thực hiện liên tục trong quá trình từ khi mô tả tới khi tổng hợp ra thiết kế. Bƣớc này đảm bảo các thiết kế đƣợc mô tả hoạt động đúng chức năng mong muốn. Ngƣời ta mô phỏng bằng cách theo dõi các tín hiệu, các cổng ra của mạch thiết kế, tƣơng ứng với các tín hiệu đầu vào đặt trƣớc, xem có phù hợp không. Việc mô phỏng hành xử (Behavioral Simulation) đƣợc thực hiện rất nhanh, nhờ đó ngƣời thiết kế có thể dễ dàng quay lại chỉnh sửa file mã thiết kế nếu cần. Do chƣa qua bƣớc tổng hợp logic nên mô phỏng hành xử chƣa cho biết thông tin về thời gian và tài nguyên đƣợc sử dụng. Mô phỏng chức năng (Functional Simulation) đƣợc thực hiện sau bƣớc dịch, dùng để kiểm chứng chức năng logic của mạch. Nếu mạch thực hiện chƣa đúng chức năng mong muốn, ngƣời thiết kế có thể quay lại sửa bản mã mô tả. Bƣớc phân tích thời gian (Timing Analysis) đƣợc thực hiện sau khi đã thực hiện việc đặt chỗ và định tuyến (Place and Route) các phần tử trong mạch. Bƣớc này cho biết các thông số về thời gian thực hiện mạch, thời gian trễ trên đƣờng truyền và tốc độ hoạt động tối đa của mạch.
Cũng giống nhƣ quy trình thiết kế VLSI tổng quát, bƣớc đầu tiên của quy trình thiết kế FPGA là mô tả bản thiết kế bằng sơ đồ mạch hoặc bằng ngôn ngữ mô tả phần cứng (Design Entry). Điểm khác nhau cơ bản nhất giữa quy trình thiết kế FPGA và
FPGA thì các bƣớc này khá đơn giản, không cần phải quyết định các giá trị điện trở và điện dung cho mạch (bƣớc Circuit extraction trong thiết kế VLSI cổ điển) do bƣớc này đã đƣợc thực hiện trƣớc trong quá trình sản xuất vi mạch FPGA.
1.3.3. Giới thiệu về ngôn ngữ mô tả phần cứng VHDL và ứng dụng của VHDL trong thiết kế VLSI trong thiết kế VLSI
Trƣớc đây, các mạch tích hợp (IC) thƣờng đƣợc thiết kế và xây dựng bằng các công cụ đồ hoạ với sự trợ giúp của máy tính thƣờng đƣợc gọi là các công cụ CAD (Computer Aided Design). Với phƣơng pháp thiết kế này, chúng ta thƣờng sử dụng các thành phần linh kiện cơ bản nhƣ các cổng logic, điện trở, tụ, các vi mạch cơ bản và các ký hiệu khác từ các thƣ viện đƣợc xây dựng sẵn bởi các nhà cung cấp công cụ CAD. Ngƣời thiết kế chỉ việc gọi chúng ra, đặt chúng vào các vị trí trong sơ đồ nguyên lý và nối dây liên kết giữa các linh kiện này theo yêu cầu của ứng dụng. Về sau các cụm linh kiện hay đƣợc sử dụng lại đƣợc cất vào thƣ viện và ngƣời thiết kế chỉ việc nhặt chúng ra khi cần. Phƣơng pháp thiết kế này đƣợc gọi là bottom-up (từ dƣới lên). Phƣơng pháp này có ƣu điểm là dễ hiểu nhƣng lại tiêu tốn khá nhiều thời gian, đặc biệt là khi chúng ta muốn xây dựng các mạch lớn. Bên cạnh đó, phƣơng pháp này cũng gây nhiều khó khăn cho ngƣời thiết kế khi phải kiểm tra các mạch phức tạp. Do đó, phƣơng pháp thiết kế truyền thống này đã nhanh chóng đƣợc cải tiến và dần thay thế bằng các quy trình và phƣơng pháp thiết kế khác thuận lợi hơn. Xu hƣớng thiết kế hiện nay là phƣơng pháp thiết kế top-down (từ trên xuống) cùng với việc sử dụng các ngôn ngữ mô tả phần cứng (HDL: Hardware Description Language) và các công cụ thiết kế, tổng hợp bằng máy tính. Nhờ vào việc cải tiến từng bƣớc chu trình thiết kế top-down, một ngôn ngữ mô tả phải hỗ trợ tất cả các mức trừu tƣợng khác nhau: đặc điểm kỹ thuật hệ thống, mô tả thuật toán, các khối chức năng và netlist mức cổng logic. Một lĩnh vực quan trọng trong chu trình thiết kế ngày nay là việc sử dụng các công cụ tổng hợp logic (synthesis tool). Các công cụ này cho phép tạo ra các netlist mức cổng logic một cách tự động từ các mô tả về cách hoạt động. Điều này đòi hỏi một ngôn ngữ đƣợc chuẩn hoá cho phép mô phỏng hệ thống đã xây dựng ở các mức mô tả khác nhau.
VHDL (VHSIC Hardware Description Language; VHSIC (Very High Speed Integrated Circuit) ra đời nhằm đáp ứng những yêu cầu trên. VHDL cho phép mô tả các hoạt động tuần tự và đồng thời của các vi mạch số. Các mạch số đƣợc mô tả trong VHDL có thể có định thời (timing) hoặc có thể không và VHDL cũng cho phép mô tả các mạch này ở các mức mô tả khác nhau. VHDL cũng cho phép xây dựng các thiết kế phân cấp bằng cách xây dựng các mô-đun nhỏ và nối chúng lại với nhau. Ngày này, hầu hết các công cụ thiết kế đều hỗ trợ ngôn ngữ VHDL vì nó đã đƣợc chuẩn hoá bởi Hiệp hội các kỹ sƣ điện-điện tử (IEEE) [13]. Nhờ đó, VHDL có thể đƣợc sử dụng nhƣ là một môi trƣờng chuyển đổi giữa các công cụ CAD khác nhau hoặc giữa ngƣời sử dụng công cụ CAD và nhà cung cấp chip.
Cấu trúc một chƣơng trình viết bằng ngôn ngữ VHDL bao gồm 5 phần: Thƣ viện (Library), thực thể (Entity), kiến trúc (Architecture), cấu hình (Configuration) và gói (Package). Trong đó 3 phần không thể thiếu đƣợc trong một chƣơng trình VHDL đó là: Thƣ viện, thực thể và kiến trúc, phần cấu hình và gói thƣờng đƣợc sử dụng khi thiết kế các mạch phức tạp.
- Phần thƣ viện (Library) là nơi chứa các mô tả về các hàm và linh kiện cơ bản nhất đƣợc sử dụng trong thiết kế. Khi thực hiện mô phỏng hay tổng hợp, các chƣơng trình sẽ tham chiếu tới các mô tả này trong thƣ viện. Do VHDL đƣợc chuẩn hóa bởi Hiệp hội các kỹ sƣ điện-điện tử (IEEE) nên thƣ viện thƣờng đƣợc sử dụng là thƣ viện IEEE.
- Thực thể (Entity) là danh sách mô tả các chân vào/ra (các Port) và các tham số chung (Generic) có thể thay đổi của mạch điện.
- Kiến trúc (Architecture) mô tả chi tiết hoạt động hoặc cấu trúc bên trong của thực thể. Trong phần này ngƣời thiết kế có thể khai báo các tín hiệu, các quá trình và các linh kiện sử dụng trong mạch. Một architecture thể hiện một chức năng của thực thể gắn với nó. VHDL cho phép xây dựng nhiều architecture cho một thực thể. Có hai cách mô tả kiến trúc của một phần tử (hoặc hệ thống) đó là mô hình hành xử (Behaviour) hay mô tả theo mô hình cấu trúc (Structure). Tuy nhiên một hệ thống có thể bao gồm cả mô tả theo mô hình hoạt động và mô tả theo mô hình cấu trúc.
Mô tả kiến trúc theo mô hình hoạt động: Mô hình hoạt động mô tả các hoạt động của hệ thống (hệ thống đáp ứng với các tín hiệu vào nhƣ thế nào và đƣa ra kết quả gì ra đầu ra) dƣới dạng các cấu trúc ngôn ngữ lập trình bậc cao. Cấu trúc đó có thể là PROCESS, WAIT, IF, CASE, FOR-LOOP… nhƣng thành phần chủ yếu của việc mô tả hoạt động là PROCESS.
Mô tả kiến trúc theo mô hình cấu trúc: Mô hình cấu trúc của một phần tử (hoặc hệ thống) có thể bao gồm nhiều cấp cấu trúc bắt đầu từ một cổng logic đơn giản đến xây dựng mô tả cho một hệ thống hoàn thiện. Thực chất của việc mô tả theo mô hình cấu trúc là mô tả các phần tử con bên trong hệ thống và sự kết nối của các phần tử con đó.
- Cấu hình (Configuration) chỉ rõ thực thể sử dụng kiến trúc nào trong số các kiến trúc đƣợc xây dựng.
- Gói tƣơng tự nhƣ thƣ viện, chứa các hàm và các mạch linh kiện căn bản đƣợc sử dụng nhiều lần trong thiết kế. Sự khác biệt ở đây là các mô tả trong thƣ viện thấp hơn nhiều so với trong gói do gói là các mô tả riêng của ngƣời sử dụng.
Với cấu trúc nhƣ trên, VHDL có thể giúp ngƣời thiết kế mô tả mạch số ở nhiều mức trừu tƣợng khác nhau. Các mức trừu tƣợng trong mô tả phần cứng VHDL đƣợc chỉ ra trong Hình 10.
Hình 10: Các mức trừu tượng trong mô tả phần cứng.
Mức cao nhất là mức hệ thống. Mức này mô tả mạch điện là tổ hợp các khối chức năng đƣợc kết nối lại với nhau. Các chức năng có thể đƣợc quyết định thực hiện bằng phần cứng hoặc phần mềm. Mức này cho phép hiểu đƣợc hoạt động của mạch nhƣng không mô tả đƣợc kiến trúc chi tiết bên trong vi mạch. Mức thứ hai thấp hơn là mức truyền dữ liệu giữa các thanh ghi (RTL: Register Transfer Level hay Dataflow), mức này cho phép các nhà thiết kế hình dung đƣợc cấu trúc của mạch và luồng dữ liệu di chuyển trang mạch. Mức trừu tƣợng hóa thấp nhất là mức cổng (gate level), khi thiết kế ở mức này nhà thiết kế phải quan tâm chi tiết đến các thuộc tính điện của các cổng lô-gic và của mạch.
Với khả năng cho phép mô tả ở các mức cao, ngôn ngữ mô tả phần cứng VHDL giúp ngƣời lập trình dễ dàng hơn khi sử dụng phƣơng pháp thiết kế từ trên xuống, không mất thời gian cho mức cổng và cho phép mô tả những vi mạch phức tạp hơn nhiều.
Chương 2 Lõi vi xử lý mềm MicroBlaze
Chƣơng trƣớc cung cấp các kiến thức cơ bản nhất về hệ vi xử lý, hệ thống SoC, công nghệ FPGA và phƣơng pháp thiết kế VLSI. Chƣơng này trình bày cụ thể về vi xử lý MicoBlaze, là vi xử lý đƣợc sử dụng để triển khai hệ vi xử lý về sau.
2.1. Giới thiệu về MicroBlaze
MicroBlaze là lõi vi xử lý mềm 32 bit phát triển bởi hãng Xilinx [6]. Đây là bộ vi xử lý đƣợc tích hợp trong các kit phát triển FPGA của Xilinx nhƣ Spartan-II, Spartan-III, Virtex. Chúng ta có thể thiết lập các thông số cho MicroBlaze và kết nối với các ngoại vi (UART, GPIO, Erthenet MAC…) thông qua phần mềm EDK. Hiện nay, MicroBlaze đã có phiên bản 9.0 sử dụng phần mềm EDK 10.1
Lõi vi xử lý MicroBlaze đƣợc xây dựng theo kiến trúc Harvard, với tập lệnh thu gọn RISC (Reduced Instruction Set Computer). Nó đƣợc trang bị các bus riêng biệt để truy xuất dữ liệu và lệnh từ bộ nhớ on-chip và bộ nhớ ngoài tại cùng một thời điểm.
Sau đây là những đặc điểm chính của vi xử lý MicroBlaze:
- Có 32 thanh ghi mục đích chung có độ rộng 32 bit (General Purpose Registers, còn gọi là các thanh ghi đa năng), 14 thanh ghi dùng cho các mục đích đặc biệt.
- Lệnh của MicroBlaze có 32 bit với 3 toán hạng và 2 chế độ địa chỉ. - Bus địa chỉ 32 bit.
- Sử dụng cấu trúc đƣờng ống (Pipeline).
2.2. Kiến trúc cơ bản của MicroBlaze
2.2.1. Kiến trúc lõi MicroBlaze
Lõi xử lý MicroBlaze gồm:
- 32 thanh ghi mục đích chung kích thƣớc 32 bit (Register File 32 x 32-bit) - Các thanh ghi mục đích đặc biệt kích thƣớc 32 bit (Special Purpose Registers) - Bộ đệm lệnh (Instruction Buffer)
- Khối quản lý bộ nhớ MMU (Memory Manage Unit) - Bộ đếm chƣơng trình (Program Counter)
- Giao tiếp Bus (Bus interface)
- Các khối xử lý: Đơn vị dấu phẩy động FPU (Float Point Unit), bộ chia (Divider), bộ nhân (Multiplier), các module dịch (Shift, Barrel shift) và khối logic và số học ALU (Arithmetic Logic Unit) thực hiện các phép toán số học và logic. Cấu trúc lõi xử lý MicroBlaze đƣợc mô tả nhƣ Hình 11.
Hình 11: Cấu trúc lõi xử lý MicroBlaze [6].
Các giao tiếp bus gồm giao tiếp bus lệnh (Instruction-side bus interface) và giao tiếp bus dữ liệu (Data-side bus interface). Trong đó có bộ đệm lệnh I-Cache, bộ đệm dữ liệu D-Cache.
Để giao tiếp với các thành phần bên ngoài lõi, MicroBlaze sử dụng các loại bus: Bus xử lý nội PLB (Processor Local Bus), bus giao tiếp dữ liệu theo chuẩn bus xử lý nội DPLB (Data interface, Processor Local Bus), bus giao tiếp lệnh theo chuẩn bus xử lý nội IPLB (Instruction interface, Processor Local Bus)…
Vi xử lý MicroBlaze là một vi xử lý tƣơng đối mạnh, đƣợc xây dựng nhằm hƣớng tới các ứng dụng dạng SoC có yêu cầu khả năng xử lý cao. Hình 12 mô tả một hệ thống chuyển mạch tăng tốc điển hình có sử dụng vi xử lý MicroBlaze.