Đề tài thực hiện thiết kế cpu của vi xử lý 8 bit sử dụng ngôn ngữ vhdl hoặc verilog trên fpga

Chuyên khảo phân tích Đề tài thực hiện thiết kế cpu của vi xử lý 8 bit sử dụng ngôn ngữ vhdl hoặc verilog trên fpga, đánh giá các khía cạnh quan trọng, đề xuất hướng nghiên cứu

Người đăng

Ẩn danh

Thể loại

báo cáo môn đồ án
48
19
0

Phí lưu trữ

30 Point

Tóm tắt

I. Hướng dẫn thiết kế CPU 8 bit trên FPGA cho người mới bắt đầu

Việc thực hiện đề tài thiết kế CPU của vi xử lý 8 bit là một cột mốc quan trọng trong lĩnh vực kiến trúc máy tínhthiết kế vi mạch số. Đề tài này không chỉ củng cố kiến thức lý thuyết mà còn cung cấp kinh nghiệm thực tiễn vô giá. Bằng cách sử dụng ngôn ngữ mô tả phần cứng (HDL) như VHDL hoặc Verilog, người học có thể mô hình hóa, mô phỏng và hiện thực hóa một đơn vị xử lý trung tâm (CPU) hoàn chỉnh trên nền tảng FPGA (Field-Programmable Gate Array). FPGA là một vi mạch tích hợp cho phép lập trình viên cấu hình lại các khối logic, tạo ra một hệ thống phần cứng tùy chỉnh mà không cần sản xuất chip vật lý. Điều này làm cho FPGA trở thành công cụ lý tưởng cho việc học tập, nghiên cứu và tạo mẫu các hệ thống nhúng. Mục tiêu chính của đề tài là xây dựng một bộ vi xử lý 8-bit, có khả năng thực thi một tập lệnh vi xử lý (ISA) cơ bản. Quá trình này bao gồm việc thiết kế các khối chức năng cốt lõi như khối tính toán số học và logic (ALU), hệ thống thanh ghi (Registers), đường đi dữ liệu (Datapath)khối điều khiển (Control Unit). Toàn bộ thiết kế sau đó sẽ được mô phỏng để kiểm tra tính đúng đắn, tổng hợp logic và nạp xuống một kit FPGA thực tế để kiểm chứng hoạt động. Thành công của đề tài này mở ra cánh cửa để hiểu sâu hơn về cách máy tính hoạt động ở mức độ thấp nhất, là nền tảng vững chắc cho các đồ án vi xử lý và các dự án phức tạp hơn trong tương lai.

1.1. Tầm quan trọng của việc tự thiết kế CPU trong kiến trúc máy tính

Tự thiết kế CPU là cách hiệu quả nhất để hiểu rõ nguyên lý hoạt động của một bộ não máy tính. Thay vì chỉ sử dụng các vi xử lý có sẵn, quá trình này buộc người thiết kế phải đối mặt và giải quyết các vấn đề cốt lõi của kiến trúc máy tính. Các khái niệm như chu kỳ lệnh, giao tiếp bus, quản lý bộ nhớ và thực thi lệnh trở nên hữu hình. Người học sẽ nắm vững cách các chỉ thị (instructions) được nạp, giải mã và thực thi, cũng như cách dữ liệu di chuyển giữa các thành phần thông qua đường đi dữ liệu (Datapath). Hiểu biết này là nền tảng không thể thiếu cho các kỹ sư muốn làm việc trong lĩnh vực thiết kế chip, hệ thống nhúng, hoặc tối ưu hóa phần mềm ở mức độ phần cứng.

1.2. Giới thiệu tổng quan về công nghệ FPGA và ngôn ngữ VHDL Verilog

FPGA (Field-Programmable Gate Array) là các vi mạch bán dẫn chứa các khối logic có thể lập trình (Configurable Logic Blocks - CLBs) và mạng kết nối định tuyến. Điều này cho phép người dùng tạo ra các mạch điện tử số tùy chỉnh. Khác với vi điều khiển thực thi lệnh tuần tự, FPGA thực thi các tác vụ một cách song song, mang lại hiệu năng vượt trội cho các ứng dụng chuyên dụng. Để lập trình cho FPGA, các ngôn ngữ mô tả phần cứng như VHDL và Verilog được sử dụng. Chúng không phải là ngôn ngữ lập trình tuần tự mà dùng để mô tả cấu trúc và hành vi của mạch logic. VHDL (VHSIC Hardware Description Language) và Verilog là hai chuẩn công nghiệp phổ biến, được hỗ trợ bởi các công cụ mạnh mẽ như công cụ Xilinx Vivadocông cụ Intel Quartus Prime.

II. Phân tích thách thức cốt lõi trong đồ án thiết kế vi xử lý 8 bit

Việc thực hiện một luận văn thiết kế CPU không hề đơn giản, nó đi kèm với nhiều thách thức cả về lý thuyết và thực hành. Thách thức đầu tiên và quan trọng nhất là việc định nghĩa một tập lệnh vi xử lý (ISA) rõ ràng và hợp lý. ISA là giao diện giữa phần cứng và phần mềm, quyết định mọi hoạt động mà CPU có thể thực hiện. Một ISA được thiết kế tốt cần cân bằng giữa sự đơn giản để dễ dàng hiện thực hóa và sự đầy đủ để có thể lập trình các tác vụ hữu ích. Một thách thức lớn khác là việc phân chia và tích hợp các khối chức năng. Đường đi dữ liệu (Datapath)khối điều khiển (Control Unit) phải hoạt động đồng bộ một cách hoàn hảo. Bất kỳ sai sót nào trong việc tạo ra tín hiệu điều khiển hoặc định thời đều có thể dẫn đến kết quả sai. Quá trình kiểm thử cũng là một rào cản lớn. Viết một testbench cho CPU hiệu quả đòi hỏi người thiết kế phải dự đoán mọi trường hợp hoạt động, từ các lệnh đơn giản đến các chuỗi lệnh phức tạp, để đảm bảo tính đúng đắn của thiết kế trước khi tiến hành tổng hợp logic. Cuối cùng, việc tối ưu hóa thiết kế để phù hợp với tài nguyên giới hạn của một kit FPGA cụ thể, đảm bảo tốc độ xung nhịp (clock) và giảm thiểu độ trễ cũng là một bài toán khó, đòi hỏi kiến thức sâu về cả thiết kế vi mạch số và kiến trúc của FPGA.

2.1. Lựa chọn tập lệnh vi xử lý ISA cho kiến trúc RISC 8 bit

Việc lựa chọn hoặc tự định nghĩa tập lệnh vi xử lý (ISA) là bước nền tảng. Đối với một CPU 8-bit, kiến trúc RISC 8-bit (Reduced Instruction Set Computer) thường là lựa chọn tối ưu. Kiến trúc RISC tập trung vào một tập lệnh nhỏ, đơn giản, có định dạng cố định và hầu hết các lệnh thực thi trong một chu kỳ xung nhịp. Điều này giúp đơn giản hóa đáng kể thiết kế của khối điều khiển (Control Unit). Các nhóm lệnh cơ bản cần được xác định bao gồm: nhóm lệnh truyền dữ liệu (Load/Store), nhóm lệnh số học và logic (thực thi bởi ALU), nhóm lệnh rẽ nhánh (Jump/Branch) và nhóm lệnh điều khiển. Việc định nghĩa rõ ràng mã lệnh (opcode) và các kiểu định địa chỉ (addressing modes) sẽ quyết định cấu trúc của toàn bộ CPU.

2.2. Khó khăn trong việc mô phỏng và kiểm thử bằng Testbench cho CPU

Mô phỏng là giai đoạn không thể thiếu để xác minh thiết kế. Một testbench cho CPU không chỉ đơn thuần là cung cấp tín hiệu clock và reset. Nó phải có khả năng nạp một chương trình mẫu (viết bằng mã máy) vào một bộ nhớ RAM/ROM mô phỏng, sau đó theo dõi và kiểm tra kết quả hoạt động của CPU. Các kịch bản kiểm thử cần bao quát các lệnh số học, logic, lệnh truy xuất bộ nhớ, và đặc biệt là các lệnh rẽ nhánh có điều kiện và không điều kiện. Việc gỡ lỗi (debug) trên dạng sóng mô phỏng là một công việc tốn nhiều thời gian, đòi hỏi sự kiên nhẫn và khả năng phân tích logic sâu sắc để truy tìm nguồn gốc của sai sót, dù là ở đường đi dữ liệu hay trong logic điều khiển.

III. Phương pháp xây dựng kiến trúc CPU 8 bit từ các khối cơ bản

Để xây dựng một đơn vị xử lý trung tâm 8-bit, phương pháp tiếp cận theo module là hiệu quả nhất. Thiết kế được chia thành các khối chức năng chính, mỗi khối được phát triển và kiểm thử độc lập trước khi tích hợp lại với nhau. Cấu trúc tổng thể của CPU bao gồm hai phần chính: Đường đi dữ liệu (Datapath)Khối điều khiển (Control Unit). Datapath là nơi chứa các thành phần thực hiện xử lý dữ liệu, bao gồm khối tính toán số học và logic (ALU), các thanh ghi (Registers) đa dụng, thanh ghi lệnh (Instruction Register - IR), bộ đếm chương trình (Program Counter - PC) và các bộ đa hợp (MUX) để lựa chọn luồng dữ liệu. Các thành phần này được kết nối với nhau thông qua một hệ thống giao tiếp bus nội bộ. ALU chịu trách nhiệm thực hiện các phép toán cơ bản như cộng, trừ, AND, OR, XOR. Hệ thống thanh ghi dùng để lưu trữ tạm thời các toán hạng và kết quả. PC giữ địa chỉ của lệnh tiếp theo cần thực thi. Trong khi đó, khối điều khiển là bộ não của CPU. Nó nhận mã lệnh (opcode) từ thanh ghi lệnh, giải mã và tạo ra các tín hiệu điều khiển tuần tự để điều khiển hoạt động của Datapath, chẳng hạn như lựa chọn phép toán cho ALU, cho phép ghi/đọc thanh ghi, và điều khiển truy xuất bộ nhớ. Phương pháp này giúp quản lý độ phức tạp của đồ án vi xử lý và dễ dàng hơn trong việc gỡ lỗi.

3.1. Thiết kế đường đi dữ liệu Datapath và khối ALU hiệu quả

Phần đường đi dữ liệu (Datapath) là xương sống của CPU, bao gồm tất cả các mạch logic cần thiết để lưu trữ và xử lý thông tin. Thành phần trung tâm của Datapath là khối tính toán số học và logic (ALU). Một ALU 8-bit cơ bản cần thực hiện các phép toán như ADD, SUB, AND, OR, XOR, NOT, và các phép dịch bit. Thiết kế ALU thường dựa trên một bộ cộng đủ (full-adder) và các cổng logic, được điều khiển bởi một tín hiệu lựa chọn (ALUsel) từ khối điều khiển. Ngoài ALU, Datapath còn chứa một mảng thanh ghi (Register File) gồm các thanh ghi đa dụng (ví dụ: Reg B, C, D, E) và các thanh ghi chức năng đặc biệt như thanh ghi tích lũy (Accumulator), bộ đếm chương trình (PC), con trỏ ngăn xếp (SP). Các bộ dồn kênh (MUX) đóng vai trò quan trọng trong việc định tuyến dữ liệu từ các thanh ghi đến đầu vào của ALU và ghi kết quả trở lại.

3.2. Xây dựng khối điều khiển Control Unit và hệ thống thanh ghi

Nếu Datapath là cơ bắp thì khối điều khiển (Control Unit) chính là bộ não. Nhiệm vụ của nó là giải mã lệnh chứa trong Thanh ghi lệnh (Instruction Register) và tạo ra một chuỗi tín hiệu điều khiển chính xác theo thời gian. Các tín hiệu này sẽ ra lệnh cho Datapath phải làm gì trong mỗi chu kỳ clock: thanh ghi nào được đọc, phép toán nào ALU thực hiện, kết quả được ghi vào đâu, PC sẽ cập nhật như thế nào. Có hai phương pháp chính để thiết kế Control Unit: sử dụng logic cứng (hardwired) hoặc vi mã (micro-programmed). Với một kiến trúc RISC 8-bit đơn giản, thiết kế hardwired sử dụng các mạch logic tổ hợp thường hiệu quả và nhanh hơn. Các thanh ghi đặc biệt như PC, SP, và Thanh ghi trạng thái (Status Register) cũng là một phần quan trọng, giúp quản lý luồng chương trình và lưu lại trạng thái (cờ Zero, Carry) của các phép toán.

IV. Cách mô tả phần cứng CPU bằng VHDL Verilog chi tiết nhất

Việc chuyển đổi từ thiết kế kiến trúc trên giấy sang mã nguồn là bước hiện thực hóa quan trọng. Ngôn ngữ mô tả phần cứng VHDL hoặc Verilog cho phép mô tả cấu trúc và hành vi của từng khối trong CPU. Phương pháp tiếp cận từ dưới lên (bottom-up) thường được áp dụng. Đầu tiên, các khối cơ bản nhất như bộ cộng, MUX, và flip-flop được mô tả. Sau đó, chúng được kết hợp để tạo ra các module lớn hơn như khối tính toán số học và logic (ALU) và mảng thanh ghi. Ví dụ, thực thể ALU trong VHDL sẽ có các cổng đầu vào cho hai toán hạng và một tín hiệu điều khiển (sel), cổng đầu ra cho kết quả. Bên trong, một câu lệnh case sẽ được sử dụng để lựa chọn hoạt động (cộng, trừ, AND, OR) dựa trên giá trị của sel. Tương tự, một mảng thanh ghi có thể được mô tả bằng một mảng (array) trong VHDL, với logic để xử lý việc đọc và ghi dựa trên địa chỉ thanh ghi và tín hiệu cho phép ghi. Cuối cùng, một file thiết kế cấp cao nhất (top-level) sẽ được tạo ra để kết nối tất cả các module này lại với nhau, bao gồm ALU, thanh ghi, khối điều khiển, và các logic giao tiếp, hình thành nên đơn vị xử lý trung tâm hoàn chỉnh. Quá trình này gọi là mô phỏng VHDL hoặc mô phỏng Verilog ở cấp độ truyền thanh ghi (RTL).

4.1. Triển khai các module ALU thanh ghi bằng ngôn ngữ VHDL

Trong VHDL, mỗi module được định nghĩa là một cặp entityarchitecture. Entity định nghĩa các cổng giao tiếp vào/ra (ports), trong khi architecture mô tả hoạt động bên trong. Đối với ALU, entity sẽ có các cổng a, b (dữ liệu vào 8 bit), sel (tín hiệu chọn phép toán), và c (kết quả ra 8 bit). Trong architecture, một quy trình (process) nhạy cảm với sự thay đổi của các tín hiệu đầu vào sẽ sử dụng câu lệnh case để thực hiện phép toán tương ứng. Đối với một mảng thanh ghi, có thể sử dụng một kiểu dữ liệu mảng, ví dụ: type t_ram is array (0 to 7) of std_logic_vector(7 downto 0);. Một quy trình nhạy cảm với sườn lên của xung clock sẽ thực hiện việc ghi dữ liệu vào vị trí được chỉ định bởi địa chỉ.

4.2. Kỹ thuật tổng hợp logic và tối ưu hóa tài nguyên trên FPGA

Sau khi viết và mô phỏng mã HDL, bước tiếp theo là tổng hợp logic (Logic Synthesis). Đây là quá trình mà các công cụ như công cụ Xilinx Vivado tự động dịch mã VHDL/Verilog thành một danh sách các cổng logic cơ bản (netlist) mà FPGA có thể hiểu được. Trong giai đoạn này, việc tối ưu hóa tài nguyên là rất quan trọng. Lập trình viên cần chú ý viết mã HDL theo cách có thể tổng hợp được hiệu quả, tránh các cấu trúc phức tạp không cần thiết như vòng lặp vô hạn hoặc các chốt (latch) không mong muốn. Các công cụ tổng hợp cũng cung cấp nhiều tùy chọn để tối ưu hóa theo diện tích (giảm số lượng khối logic sử dụng) hoặc theo tốc độ (tăng tần số hoạt động tối đa), giúp thiết kế CPU phù hợp với yêu cầu của hệ thống nhúng cụ thể.

V. Quy trình mô phỏng và nạp thiết kế CPU 8 bit lên kit FPGA

Quy trình xác minh và triển khai thiết kế là bước cuối cùng để kiểm chứng hoạt động của CPU. Quá trình này bắt đầu bằng việc mô phỏng ở cấp độ RTL (Register-Transfer Level) sử dụng các công cụ tích hợp trong công cụ Xilinx Vivado hoặc Intel Quartus Prime. Một testbench cho CPU được viết bằng VHDL/Verilog để cung cấp các kích thích đầu vào (xung clock, reset, chương trình kiểm thử) và giám sát các tín hiệu đầu ra của CPU. Sau khi mô phỏng cho thấy thiết kế hoạt động đúng như mong đợi, quá trình tổng hợp logic được thực hiện để chuyển đổi mã HDL thành cấu trúc cổng logic. Tiếp theo là các bước Place & Route (Sắp xếp và Định tuyến), nơi công cụ tự động sắp xếp các cổng logic này vào các CLB trên chip FPGA và kết nối chúng lại với nhau. Kết quả của quá trình này là một tệp cấu hình nhị phân (bitstream). Tệp bitstream này sau đó được nạp vào kit FPGA Xilinx hoặc kit FPGA Altera thông qua giao diện JTAG. Khi đã được nạp, chip FPGA sẽ được cấu hình thành CPU 8-bit vừa thiết kế. Việc kiểm tra cuối cùng được thực hiện bằng cách giao tiếp với CPU trên kit, ví dụ như hiển thị kết quả lên đèn LED hoặc gửi dữ liệu qua cổng nối tiếp, để xác nhận rằng đơn vị xử lý trung tâm hoạt động chính xác trong môi trường phần cứng thực tế.

5.1. Sử dụng công cụ Xilinx Vivado để mô phỏng và tổng hợp

Phần mềm công cụ Xilinx Vivado là một bộ công cụ toàn diện cho các thiết kế trên FPGA của Xilinx. Nó cung cấp một môi trường phát triển tích hợp (IDE) cho phép người dùng viết mã VHDL/Verilog, tạo và chạy mô phỏng VHDL bằng trình mô phỏng tích hợp, thực hiện tổng hợp logic, và triển khai thiết kế lên phần cứng. Người dùng có thể tạo một dự án, thêm các file mã nguồn của từng module CPU, viết một testbench, và xem dạng sóng của các tín hiệu nội bộ để gỡ lỗi. Sau khi xác minh thành công, trình hướng dẫn 'Implementation' của Vivado sẽ tự động thực hiện các bước tổng hợp, tối ưu hóa và định tuyến để tạo ra tệp bitstream cuối cùng.

5.2. Kết quả thực thi chương trình trên kit FPGA Xilinx hoặc Altera

Kết quả cuối cùng của một luận văn thiết kế CPU là khả năng chạy một chương trình đơn giản trên phần cứng thực. Sau khi nạp tệp bitstream lên kit FPGA Xilinx (như Basys 3 hoặc Nexys A7) hoặc kit FPGA Altera (như DE10-Lite), CPU 8-bit sẽ bắt đầu hoạt động. Một chương trình kiểm thử đơn giản có thể là một vòng lặp đếm, một phép tính toán và hiển thị kết quả lên 8 đèn LED của kit. Việc quan sát các đèn LED nhấp nháy hoặc thay đổi trạng thái theo đúng logic của chương trình là bằng chứng xác thực nhất cho sự thành công của toàn bộ quá trình thiết kế, từ ý tưởng kiến trúc ban đầu đến hiện thực hóa trên mạch điện tử số.

VI. Tương lai và hướng phát triển cho đề tài thiết kế CPU 8 bit

Hoàn thành một đề tài thực hiện thiết kế CPU của vi xử lý 8 bit không phải là điểm kết thúc, mà là một nền tảng vững chắc để khám phá những lĩnh vực phức tạp hơn trong kiến trúc máy tính. Từ một thiết kế CPU đơn chu kỳ (single-cycle), hướng phát triển tự nhiên nhất là cải tiến nó thành một kiến trúc đa chu kỳ (multi-cycle) để tối ưu hóa việc sử dụng tài nguyên. Một bước tiến xa hơn và đầy thách thức là triển khai kỹ thuật pipeline trong CPU. Kỹ thuật đường ống cho phép CPU thực hiện đồng thời nhiều giai đoạn khác nhau của các lệnh khác nhau, giúp tăng đáng kể thông lượng và hiệu suất xử lý. Một hướng phát triển khác là mở rộng khả năng của CPU bằng cách thêm vào các module ngoại vi, biến nó thành một Hệ thống trên chip (SoC - System on a Chip) đơn giản. Có thể tích hợp các bộ điều khiển giao tiếp như UART, SPI, I2C, hoặc bộ điều khiển bộ nhớ để tương tác với bộ nhớ RAM/ROM bên ngoài. Những cải tiến này không chỉ nâng cao độ phức tạp và tính năng của thiết kế mà còn mang lại những hiểu biết sâu sắc về các kỹ thuật được sử dụng trong các bộ vi xử lý thương mại hiện đại, mở ra nhiều cơ hội ứng dụng trong lĩnh vực hệ thống nhúng và IoT.

6.1. Khả năng mở rộng kiến trúc Pipeline và bộ nhớ Cache

Kỹ thuật pipeline trong CPU chia quá trình thực thi một lệnh thành nhiều giai đoạn (ví dụ: Nạp lệnh, Giải mã, Thực thi, Truy cập bộ nhớ, Ghi kết quả). Bằng cách cho phép các giai đoạn của các lệnh khác nhau chồng chéo lên nhau, pipeline có thể cải thiện đáng kể hiệu suất. Tuy nhiên, nó cũng giới thiệu các vấn đề phức tạp như xung đột dữ liệu (data hazards) và xung đột điều khiển (control hazards) cần được giải quyết. Một hướng mở rộng cao cấp khác là thiết kế một hệ thống bộ nhớ đệm (Cache) đơn giản để giảm độ trễ khi truy cập vào bộ nhớ RAM/ROM chính, một khái niệm cốt lõi trong việc tăng tốc hệ thống máy tính.

6.2. Ứng dụng CPU 8 bit tự thiết kế trong các hệ thống nhúng chuyên dụng

Một CPU 8-bit tùy chỉnh, được tối ưu hóa về tài nguyên và năng lượng, rất phù hợp cho các hệ thống nhúng chuyên dụng. Thay vì sử dụng một vi điều khiển đa năng, việc triển khai một CPU với tập lệnh được thiết kế riêng cho một ứng dụng cụ thể (Application-Specific Instruction-set Processor - ASIP) có thể mang lại hiệu quả vượt trội. Ví dụ, một CPU tự thiết kế có thể được tích hợp trên cùng một chip FPGA với các bộ xử lý tín hiệu số (DSP) để tạo ra một hệ thống điều khiển robot, một thiết bị IoT thu thập dữ liệu cảm biến, hoặc một bộ điều khiển logic cho một quy trình công nghiệp. Điều này thể hiện giá trị thực tiễn to lớn của việc nắm vững kỹ năng thiết kế vi mạch số.

20/09/2025

Trích đoạn nội dung tài liệu

LỜI MỞ ĐẦU Trong thời đại công nghệ thông tin phát triển chóng mặt, với những ứng dụng thực tế đem lại hiệu quả và lợi ích cho con người người công nghệ thông tin đã và đang dần thay thế sức lao động đồng thời nâng cao hiệu quả hoạt đông trong các lĩnh vực của cuộc sống. Nhắc đến Công nghệ FPGA có lẽ đã không còn xa lạ gì đối với chúng ta, bởi lẽ các ứng dụng của nó đã tràn ngập ở khắp mọi ngóc ngách trong cuộc sống, kể cả những lĩnh vực con người khó hoặc không thể tiếp xúc như lĩnh vực nghiên cứu, chế tạo chíp…. Nghiên cứu và chế tạo chíp là việc làm hết sức cần thiết trong giai đoạn công nghiệp hóa hiện nay. Để chế tạo ra những loại chíp có tác dụng đúng như mong muốn, đòi hỏi của con người và của sự phát triển, có nhiều ứng dụng trong đời sống, nghiên cứu cũng như khoa học.

Và thành phần quan trọng nhất của chíp chính là CPU. CPU viết tắt của chữ Central Processing Unit : đơn vị xử lí trung tâm. CPU có thể được xem như não bộ, một trong những phần tử cốt lõi nhất của chíp. Nhiệm vụ chính của CPU là xử lý các chương trình vi tính và dữ kiện.

Vì vậy nhóm chúng em đã chọn đề tài “Thực hiện thiết kế CPU của vi xử lý 8 bit sử dụng ngôn ngữ VHDL hoặc Verilog trên FPGA” De. TỔNG QUAN VỀ FPGA 1. Cấu trúc chung của FPGA Trong khi tồn tại sự phát triển công nghệ từ PAL lên GAL và CPLD, có một xu hướng phát triển khác dựa trên công nghệ mảng cổng, đó là mảng cổng có thể lập trình được dạng trường, FPGA (Field-Programmable Gate Array). Từ 1980, các công ty sản xuất PLD hàng đầu đã đẩy mạnh quá trình nghiên cứu về FPGA và nhanh chóng cho ra các thế hệ FPGA với số lượng cổng và tốc độ ngày càng cao.các FPGA hiện nay có số lượng cổng đủ lớn để có thể thay thế cả một hệ thống bao gồm lõi CPU, Bộ điều khiển bộ nhớ (Memory Controller), các ngoại vi như SPI,Timer, I2C, GPIO, PWM, Video/Audio Controller… (nghĩa là tương đương với các SoC hiện đại).

Configur a ble Logic I/O Bloc k Programm a ble BLOCK RAMS I/O BLOCK RAMS Hình 1.1: Sơ đồ khối của FPGA De.2: Vị trí các chân tín hiệu (pin) của CLB FPGA gồm có (hình 1.1):  CLBs (configurable Logic Blocks): các khối logic có thể cấu hình được, là các thành phần tiêu chuẩn. Trong hầu hết các FPGA, mỗi một CLB chứa một số các mảnh, mà mỗi mảnh lại chứa một số (thường là 2 hoặc 4) ô logic (logic cell) với một số thành phần nhớ (Flip-Flop) hoặc bộ dồn kênh (Mux) nếu không dùng FF. Mỗi ô logic có thể được cấu hình để thực hiện các chức năng logic cơ bản (như AND, OR, NOT) trên các tín hiệu số nhờ sử dụng bảng LUT (look-up Table). Các CLB liên kết với nhau qua mạng liên kết có thể lập trình được (Programmable Interconnect hay routing).

 Interconnect hay Routing: mạng liên kết hay định tuyến, là các ma trận chuyển mạch có thể lập trình được - PSM (Programmable Switch Matrix) để hình thành các đơn vị thực hiện các chức năng phức tạp hơn. Như vậy từng chân I/O của FPGA có thể được lập trình để đảm bảo các giao tiếp điện cần thiết cho kết nối FPGA với hệ thống mà nó là thành phần (hình 1.  Block RAM: khối RAM, là các băng nhớ bên trong FPGA De.FPGA Các FPGA khác nhau có số lượng các ô logic, kích cỡ và số lượng các block RAM, các MAC khác nhau. Các FPGA sử dụng trong các hệ thống lai (hybrid system) thường có khoảng 100K-200K ô logic, 500KB của RAM bên trong và 100 MACs.

Hệ thống lai có thể sử dụng FPGA với 1000 khối I/O tương ứng với 1000 I/O pin để đảm bảo các giao tiếp với hệ thống chủ, cũng như với bộ nhớ cục bộ nối trực với FPGA. Các FPGA thường được lập trình sau khi đã hàn gắn trên bảng mạch in, tương tự như các CPLD lớn. Nhưng dữ liệu cấu hình trong FPGA bị mất khi ngừng cấp nguồn (mất điện) giống như RAM trong máy tính vậy. Do đó, muỗi lần ngắt nguồn và bật lại thì ta phải nạp lại tệp cấu hình vào FPGA.

Muốn lưu giữ lại cấu hình đã lập trình cho FPGA thì ta phải mắc thêm PROM hay EPROM ngoài. Bộ nhớ ngoài này có nhiệm vụ lưu tệp cấu hình ở dạng nhị phân (bitstream hay bit file) và tự động nạp dữ liệu cấu hình lại cho FPGA mỗi khi bật nguồn, như vậy dù có ngắt nguồn FPGA vẫn “không bị mất” dữ liệu. Các phiên bản EEPROM có thể có thể lập trình được trong hệ thống (hay trong mạch), thường thông qua giao tiếp JTAG. Tệp cấu hình chứa các thiết lập cho từng CLB, PSM, MAC, I/O và các thành phần có thể cấu hình khác của FPGA.

Các FPGA được sử dụng trong các hệ thống máy tính lai có thể được lập trình lại vô số lần. Thời gian tải cấu hình mới thường chỉ chưa đến 1 giây. Một số FPGA hiện nay có khả năng trong khi đang hoạt động chuyển đến cấu hình mới đã được nạp trước vào thiết bị. Một số FPGA cũng cho phép cầu hình lại từng phần của thiết bị.

Do FPGA có số lượng rất lớn các khối logic nên có nhiều tài nguyên để thực hiện nhiều chức năng toán học chuyên dụng và phức tạp.Vì vậy các FPGA phù hợp cho các thiết kế phức tạp hơn so với CPLD. Nhìn chung các CPLD là sự lựa chọn tốt cho các ứng dụng tổ hợp, trong khi các FPGA phù hợp hơn cho các máy trạng thái lớn (như các vi xử lý). FPGA có các phần tử logic chạy theo dạng song song. Còn vi điều khiển dựa trên cấu trúc CPU thực thi theo mã lệnh theo dạng tuần tự.

FPGA dùng ngôn ngữ lập trình phần cứng (Verilog, VHDL) và lập trình trên FPGA gọi là lập trình phần cứng. Lập trình vi điều khiển là lập trình phần mềm phần cứng có sẵn. Định tuyến trong FPGA Định tuyến trong FPGA bao gồm các khối chuyển mạch (SB) và các dây nối. Định tuyến đảm bảo kết nối giữa các khối I/O và các khối logic và giữa các khối logic với nhau.

Kiểu của kiến trúc định tuyến quyết định vùng được định tuyến và mật độ các khối logic. Khối chuyển mạch nằm ở giao của các kênh định tuyến dọc (vertical routing channel) và ngang (horizontal routing channel).7: Kết nối trong khối chuyển mạch De.FPGA Nói chung, định tuyến của FPGA không có phân đoạn. Nghĩa là, từng đoạn dây nối trải rộng chỉ một khối logic trước khi nó kết thúc ở một khối (hay hộp) chuyển mạch, mà trong một khối chuyển mạch có một số chuyển mạch có thể lập trình được. Kiến trúc định tuyến của Xilinx FPGA Các nghiên cứu hàn lâm sử dụng một mô hình kiến trúc chung đơn giản của Xilinx FPGA cho ở hình 1.

Kiến trúc chung này của Xilinx FPGA gồm có một mảng hai chiều các khối logic có thể lập trình được CLB (configurable Logic Block), với các kênh định tuyến ngang và dọc giữa các hàng và các cột của các CLB. Mỗi CLB có 4 đầu vào và một đầu ra, và tất cả các khối logic là giống nhau Hình 1.8: Kiến trúc đơn giản của Xilinx FPGA Các tài nguyên của định tuyến trong Xilinx FPGA gồm: Các khối kết nối (Connection Block): các khối kết nối C nối các dây dẫn của kênh định tuyến với các chân tín hiệu của các CLB. Có hai đặc tính ảnh hướng chính đến khả năng định tuyến của thiết kế: tính linh hoạt, Fc, là số dây dẫn mà từng tín hiệu của CLB có thể kết nối; và cấu hình, là mẫu của các chuyển mạch tạo lập kết nối (đặc biệt nếu giá trị Fc thấp).FPGA Các khối chuyển mạch (Switch Block): các khối chuyển mạch S cho phép các dây dẫn chuyển mạch giữa các dây dọc và ngang. Tính linh hoạt, Fs, xác định số lượng các đoạn dây nối mà một đoạn dây nối đi vào trong khối S có thể kết nối.

Cấu hình của các khối chuyển mạch S là rất quan trọng bởi vì có thể chọn hai cấu hình khác nhau có các khả năng định tuyến khác nhau với cùng một giá trị tính linh hoạt Fs.10: Định tuyến qua các khối chuyển mạch De.FPGA Các khối chuyển mạch mà chỉ kết nối các rãnh trong cùng một miền, chẳng hạn, 0- 0, 1-1, được gọi là các khối chuyển mạch của tập hợp con hay phẳng hai chiều (Subset switch box hay Planar). Các khối chuyển mạch mà cho phép kết nối với bất kỳ miền nào khác, chẳng hạn, 0-3, 1-2, được gọi là các khối chuyển mạch Wilton, và chúng được sử dụng rộng rãi do đảm bảo định tuyến linh hoạt hơn.11: Các đường dây trong Xilinx FPGA Các đường dây dài-đơn (Single-length lines): chúng được dùng cho các kết nối tương đói ngắn giữa các CLB và chúng trải rộng chỉ qua một CLB (hình 1. Các đường dây dài-gấp đôi (Double-length lines): chúng tương tự như các đường dây dài-đơn, ngoại trừ mỗi đường dây ở đây trải rộng qua hai CLB. Chúng cho các trễ định tuyến nhỏ đối với kết nối dài vừa phải (hình 1.

Các đường dây dài (Long lines): chúng phù hợp cho các kết nối dài trải rộng một số CLB (hình 1.FPGA CB x : Routing S S xx x x x LB LB LB S S S S General purpose LB LB LB Direct S S S S LB LB LB S S Hình 1.13: Kiến trúc định tuyến của Xilinx FPGA 2. Kiến trúc định tuyến của Actel FPGA Kiến trúc của Actel FPGA rất giống với phân kênh mảng cổng. Lõi của FPGA gồm các module logic, LM (hay khối logic, LB) đơn giản được sử dụng để thực hiện các cổng logic theo yêu cầu, và các thành phần nhớ. Các LM được liên kết với nhau nhờ các rãnh định tuyến chia theo các đoạn (segment).

Không giống các mảng cổng, các độ dài của các đoạn dây nối được xác định trước và có thể với các thành phần chuyển mạch trở kháng thấp để tạo ra độ dài định tuyến chính xác cho tín hiệu liên kết. Xung quanh lõi logic là giao tiếp với các miếng đệm vào/ra (I/O pad) của thiết bị. Các I/O pad nối với các chân tín hiệu (pin) của FPGA. Giao tiếp này bao gồm các module vào/ra, I/OM (hay khối, I/OB) thực hiện chuyển đổi và kết nối các tín hiệu logic từ lõi đến các I/O pad.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ