Khóa luận: Thiết kế thử nghiệm bộ ghi dịch trên FPGA của Phạm Đức Trí

Tài liệu nghiên cứu Thiết kế thử nghiệm bộ ghi dịch trên fpga, tổng hợp lý thuyết và thực hành, cung cấp kiến thức chuyên sâu về .

Người đăng

Ẩn danh

Thể loại

khóa luận tốt nghiệp

2017

60
0
0

Phí lưu trữ

30 Point

Tóm tắt

I. Tổng quan thiết kế bộ ghi dịch trên FPGA cho người mới

Thiết kế và thử nghiệm bộ ghi dịch trên FPGA là một bài toán nền tảng trong lĩnh vực thiết kế vi mạch số. Bộ ghi dịch, hay còn gọi là thanh ghi dịch, là một loại mạch tuần tự cơ bản, được cấu thành từ một chuỗi các flip-flop D mắc nối tiếp. Chức năng chính của nó là lưu trữ và dịch chuyển dữ liệu nhị phân theo từng xung nhịp (clock). Nhờ tính linh hoạt và khả năng lập trình lại của FPGA (Field-Programmable Gate Array), việc triển khai trên FPGA cho phép tạo ra các bộ ghi dịch phức tạp, đáp ứng các yêu cầu cụ thể của hệ thống mà không cần sản xuất vi mạch chuyên dụng (ASIC). Quy trình này bao gồm việc mô tả phần cứng bằng ngôn ngữ như VHDL hoặc Verilog, sau đó tiến hành mô phỏng bộ ghi dịch để kiểm tra chức năng, và cuối cùng là tổng hợp và nạp cấu hình lên chip FPGA. Việc hiểu rõ nguyên lý hoạt động và các phương pháp thiết kế là bước khởi đầu quan trọng cho bất kỳ kỹ sư nào muốn làm chủ công nghệ lập trình FPGA.

1.1. Hiểu đúng bản chất Bộ ghi dịch là gì và vai trò

Về cơ bản, bộ ghi dịch là gì có thể được định nghĩa là một tập hợp các phần tử nhớ (thường là flip-flop D trong bộ ghi dịch) được kết nối với nhau sao cho dữ liệu có thể được dịch chuyển từ phần tử này sang phần tử kế tiếp dưới sự điều khiển của tín hiệu xung nhịp. Vai trò của chúng vô cùng quan trọng trong các hệ thống số. Chúng được sử dụng để lưu trữ tạm thời dữ liệu, thực hiện chuyển đổi giữa luồng dữ liệu nối tiếp và song song, tạo trễ tín hiệu, và là thành phần cốt lõi trong các bộ xử lý (CPU) và các ngoại vi lập trình được. Theo tài liệu gốc, "bộ ghi dịch được sử dụng rộng rãi để nhớ số liệu, chuyển số liệu song song thành nối tiếp, nối tiếp thành song song", nhấn mạnh tầm quan trọng và ứng dụng đa dạng của loại mạch này trong kỹ thuật.

1.2. Phân loại các thanh ghi dịch phổ biến trong mạch số

Các thanh ghi dịch được phân loại chủ yếu dựa trên cách thức dữ liệu được nhập vào và xuất ra. Có bốn loại chính: bộ ghi dịch SISO (Serial Input/Serial Output - Vào nối tiếp/Ra nối tiếp), bộ ghi dịch SIPO (Serial Input/Parallel Output - Vào nối tiếp/Ra song song), bộ ghi dịch PISO (Parallel Input/Serial Output - Vào song song/Ra nối tiếp), và bộ ghi dịch PIPO (Parallel Input/Parallel Output - Vào song song/Ra song song). Ngoài ra, chúng còn được phân loại theo hướng dịch chuyển dữ liệu (dịch trái, dịch phải) hoặc các chức năng mở rộng như bộ ghi dịch đa năng có khả năng thực hiện nhiều chế độ hoạt động khác nhau. Việc lựa chọn loại thanh ghi dịch phù hợp phụ thuộc hoàn toàn vào yêu cầu cụ thể của ứng dụng bộ ghi dịch trong từng hệ thống.

1.3. Lý do nên triển khai trên FPGA cho thiết kế mạch tuần tự

Việc triển khai trên FPGA mang lại nhiều lợi thế vượt trội cho thiết kế mạch tuần tự. Thứ nhất, FPGA cho phép tái cấu trúc phần cứng một cách nhanh chóng, giúp rút ngắn chu kỳ phát triển sản phẩm và dễ dàng sửa lỗi. Kỹ sư có thể thử nghiệm nhiều kiến trúc khác nhau chỉ bằng cách thay đổi mã mô tả phần cứng. Thứ hai, FPGA cung cấp khả năng xử lý song song thực sự, lý tưởng cho các ứng dụng đòi hỏi tốc độ cao mà vi điều khiển truyền thống khó đáp ứng. Cuối cùng, chi phí phát triển ban đầu với FPGA thấp hơn nhiều so với việc thiết kế một vi mạch ASIC, đặc biệt là đối với các sản phẩm có số lượng nhỏ và vừa. Đây là nền tảng lý tưởng để hiện thực hóa các mạch dịch bit và các logic số phức tạp khác.

II. Thách thức trong thiết kế mạch tuần tự và bộ ghi dịch

Quá trình thiết kế mạch tuần tự nói chung và bộ ghi dịch nói riêng đặt ra nhiều thách thức về mặt lý thuyết và thực tiễn. Một trong những khó khăn lớn nhất là việc phân tích và thiết kế dựa trên đồ hình trạng thái, đòi hỏi sự chính xác trong việc mã hóa trạng thái và xác định phương trình logic cho các phần tử nhớ. Việc lựa chọn loại flip-flop (D-FF, T-FF, JK-FF) cũng ảnh hưởng trực tiếp đến độ phức tạp của mạch logic tổ hợp đi kèm. Hơn nữa, vấn đề đồng bộ hóa (synchronization) là cực kỳ quan trọng; các lỗi như 'race condition' hoặc 'metastability' có thể xảy ra nếu không quản lý cẩn thận tín hiệu xung nhịp (CLK) và các tín hiệu bất đồng bộ. Tối ưu hóa tài nguyên trên FPGA, bao gồm số lượng LUT (Look-Up Table) và flip-flop, cũng là một bài toán cần giải quyết để đảm bảo thiết kế vừa hoạt động đúng chức năng vừa hiệu quả về chi phí và công suất tiêu thụ.

2.1. Phân tích và rút gọn đồ hình trạng thái trong thiết kế

Một bước quan trọng trong thiết kế mạch tuần tự là xây dựng đồ hình trạng thái (state diagram). Đồ hình này mô tả trực quan hoạt động của mạch, thể hiện các trạng thái và các điều kiện chuyển đổi giữa chúng. Từ đồ hình trạng thái, kỹ sư cần thực hiện mã hóa, tức là gán một mã nhị phân duy nhất cho mỗi trạng thái. Thách thức ở đây là làm sao để rút gọn số lượng trạng thái và chọn phương pháp mã hóa tối ưu để đơn giản hóa hệ phương trình logic của mạch. Như trong tài liệu tham khảo, quá trình này bao gồm các bước "hình thức hóa", "mã hóa trạng thái", và "xác định hệ phương trình logic", là những công đoạn đòi hỏi tư duy logic và kỹ năng tối ưu hóa cao.

2.2. Vấn đề đồng bộ hóa và quản lý tín hiệu xung nhịp CLK

Tín hiệu xung nhịp (CLK) là "trái tim" của mọi mạch tuần tự. Mọi hoạt động dịch chuyển dữ liệu trong bộ ghi dịch đều phải được đồng bộ hóa với cạnh lên hoặc cạnh xuống của xung CLK. Thách thức lớn nhất là đảm bảo tín hiệu CLK được phân phối đồng đều đến tất cả các flip-flop trong mạch (clock skew) và xử lý các tín hiệu đầu vào bất đồng bộ. Nếu không quản lý tốt, các hiện tượng bất định có thể xảy ra, dẫn đến hoạt động sai lệch của toàn bộ hệ thống. Do đó, việc thiết kế một cây xung nhịp (clock tree) hợp lý và sử dụng các kỹ thuật đồng bộ hóa là bắt buộc trong các thiết kế FPGA phức tạp.

2.3. Lựa chọn flip flop D trong bộ ghi dịch và tối ưu hóa

Mặc dù có nhiều loại flip-flop, flip-flop D trong bộ ghi dịch là lựa chọn phổ biến nhất vì sự đơn giản của nó: giá trị đầu ra (Q) sẽ bằng giá trị đầu vào (D) tại thời điểm có xung nhịp tác động. Cấu trúc này rất phù hợp cho việc truyền dữ liệu tuần tự. Tài liệu gốc khẳng định: "Các FF sử dụng trong bộ ghi thường là D-FF hoặc là các loại khác nhưng mắc theo kiểu D để tạo thành các bộ ghi dịch". Tuy nhiên, thách thức không chỉ dừng lại ở việc lựa chọn. Kỹ sư cần tối ưu hóa mạch logic tổ hợp kết nối giữa các flip-flop để giảm độ trễ (delay) và giảm diện tích chiếm dụng trên chip, đảm bảo thanh ghi dịch có thể hoạt động ở tần số cao nhất có thể.

III. Hướng dẫn lập trình FPGA Code VHDL bộ ghi dịch chi tiết

Ngôn ngữ mô tả phần cứng (HDL) như VHDL và Verilog là công cụ chính để lập trình FPGA. VHDL (Very High Speed Integrated Circuit Hardware Description Language) cung cấp một phương pháp trừu tượng và cấu trúc để mô tả hoạt động của bộ ghi dịch. Thay vì thiết kế ở mức cổng logic, kỹ sư có thể mô tả hành vi của mạch thông qua các cấu trúc lệnh tuần tự bên trong một tiến trình (process). Một bản code VHDL bộ ghi dịch điển hình sẽ bao gồm một thực thể (entity) định nghĩa các cổng vào/ra (như data_in, clk, reset, data_out) và một kiến trúc (architecture) mô tả logic hoạt động. Việc sử dụng VHDL không chỉ giúp tăng tốc độ thiết kế mà còn cải thiện khả năng đọc hiểu, bảo trì và tái sử dụng mã nguồn cho các dự án phức tạp hơn.

3.1. Cấu trúc cơ bản của một chương trình VHDL shift register

Một chương trình VHDL shift register thường bao gồm ba phần chính. Đầu tiên là khai báo thư viện (ví dụ library IEEE; use IEEE.STD_LOGIC_1164.ALL;), cung cấp các kiểu dữ liệu chuẩn như std_logicstd_logic_vector. Tiếp theo là khối ENTITY, nơi định nghĩa giao diện của bộ ghi dịch với bên ngoài, bao gồm các cổng (ports) đầu vào và đầu ra. Cuối cùng, khối ARCHITECTURE chứa logic hoạt động của mạch. Bên trong kiến trúc, một tín hiệu (signal) nội bộ thường được khai báo để lưu trữ giá trị của thanh ghi dịch. Logic dịch chuyển dữ liệu thường được đặt trong một khối PROCESS nhạy cảm với tín hiệu clkreset.

3.2. Viết code cho bộ ghi dịch SIPO và các biến thể khác

Để viết mã cho một bộ ghi dịch SIPO 8-bit, ta có thể khai báo một tín hiệu nội bộ kiểu std_logic_vector(7 downto 0). Bên trong PROCESS, khi có cạnh lên của xung nhịp, logic sẽ thực hiện hai thao tác đồng thời: gán bit cao nhất của thanh ghi bằng dữ liệu đầu vào nối tiếp, và dịch chuyển tất cả các bit còn lại sang phải một vị trí (shift_reg <= data_in & shift_reg(7 downto 1);). Đầu ra song song chính là giá trị của tín hiệu thanh ghi này. Các biến thể như PISO hay bộ ghi dịch đa năng có thể được hiện thực bằng cách thêm các tín hiệu điều khiển và sử dụng các câu lệnh if hoặc case để lựa chọn chế độ hoạt động.

3.3. Đối tượng và kiểu dữ liệu quan trọng trong lập trình VHDL

Trong lập trình FPGA với VHDL, việc hiểu rõ các đối tượng là rất quan trọng. SIGNAL được dùng để biểu diễn các dây nối vật lý và các phần tử nhớ, giá trị của nó chỉ được cập nhật sau khi tiến trình kết thúc. VARIABLE là đối tượng cục bộ trong một tiến trình, giá trị được cập nhật ngay lập tức và dùng cho các tính toán trung gian. CONSTANT dùng để định nghĩa các giá trị không đổi. Về kiểu dữ liệu, STD_LOGIC là kiểu chuẩn cho một bit, trong khi STD_LOGIC_VECTOR là một mảng các bit, rất phù hợp để biểu diễn dữ liệu của thanh ghi dịch. Nắm vững các khái niệm này là nền tảng để viết mã VHDL hiệu quả và chính xác.

IV. Phương pháp mô phỏng bộ ghi dịch hiệu quả với Testbench

Sau khi hoàn thành việc viết mã, bước tiếp theo và không thể thiếu là mô phỏng bộ ghi dịch. Mô phỏng là quá trình kiểm tra chức năng của thiết kế trong một môi trường giả lập trước khi triển khai trên FPGA. Quá trình này giúp phát hiện và sửa chữa các lỗi logic, đảm bảo thiết kế hoạt động đúng như yêu cầu. Để thực hiện mô phỏng, người ta xây dựng một môi trường kiểm tra gọi là testbench. Testbench là một đoạn mã VHDL riêng biệt, không được tổng hợp thành phần cứng, có nhiệm vụ tạo ra các tín hiệu kích thích (xung nhịp, reset, dữ liệu đầu vào) cho thiết bị cần kiểm tra (DUT - Device Under Test) và có thể quan sát hoặc tự động kiểm tra tín hiệu đầu ra. Sử dụng các công cụ như ModelSim cho phép kỹ sư xem xét dạng sóng tín hiệu theo thời gian, một cách trực quan để xác minh hoạt động của mạch dịch bit.

4.1. Xây dựng một Testbench cho bộ ghi dịch VHDL hoàn chỉnh

Một testbench cho bộ ghi dịch VHDL hoàn chỉnh bao gồm việc khởi tạo DUT, tạo tín hiệu xung nhịp (clock generation), và tạo các chuỗi tín hiệu đầu vào (stimulus generation). Khối tạo xung nhịp thường là một PROCESS đơn giản lật trạng thái của tín hiệu clk sau mỗi nửa chu kỳ. Khối tạo stimulus là một PROCESS khác, nơi các giá trị khác nhau được gán tuần tự cho tín hiệu đầu vào dữ liệu, cùng với việc kích hoạt tín hiệu reset ban đầu. Ví dụ, testbench sẽ tuần tự đưa một chuỗi bit '10110011' vào bộ ghi dịch SISO và kiểm tra xem chuỗi bit tương ứng có xuất hiện ở đầu ra sau đủ số chu kỳ xung nhịp hay không.

4.2. Sử dụng phần mềm ModelSim để kiểm tra và gỡ lỗi thiết kế

ModelSim là một trong những công cụ mô phỏng ModelSim mạnh mẽ và phổ biến nhất trong ngành công nghiệp vi mạch. Nó cho phép biên dịch mã VHDL/Verilog của cả thiết kế và testbench, sau đó thực thi mô phỏng. Giao diện của ModelSim hiển thị các dạng sóng (waveforms) của tất cả các tín hiệu được chọn (cổng vào/ra, tín hiệu nội bộ). Kỹ sư có thể phóng to, đo lường thời gian và kiểm tra giá trị của tín hiệu tại bất kỳ thời điểm nào. Nếu đầu ra không như mong đợi, họ có thể quay lại mã nguồn, sửa lỗi, và chạy lại mô phỏng. Quá trình này giúp tiết kiệm rất nhiều thời gian và công sức so với việc gỡ lỗi trực tiếp trên phần cứng.

4.3. Phân tích dạng sóng để xác thực chức năng mạch dịch bit

Phân tích dạng sóng là kỹ năng cốt lõi khi thực hiện mô phỏng bộ ghi dịch. Khi quan sát cửa sổ dạng sóng, kỹ sư cần chú ý đến mối quan hệ thời gian giữa các tín hiệu. Ví dụ, đối với một bộ ghi dịch SIPO, cần xác nhận rằng: 1) Sau khi reset, tất cả các đầu ra song song đều về 0. 2) Tại mỗi cạnh lên của xung CLK, bit dữ liệu ở đầu vào được chốt vào bit đầu tiên của thanh ghi. 3) Đồng thời, các bit khác dịch sang phải một vị trí. 4) Sau N xung nhịp (với N là độ dài thanh ghi), toàn bộ chuỗi N bit đầu vào sẽ xuất hiện đồng thời ở đầu ra song song. Việc xác thực cẩn thận từng chức năng này đảm bảo mạch dịch bit hoạt động chính xác.

V. Quy trình triển khai trên FPGA từ tổng hợp đến thực thi

Sau khi thiết kế đã được xác minh thông qua mô phỏng, quy trình triển khai trên FPGA bắt đầu. Đây là quá trình chuyển đổi mã HDL trừu tượng thành một tệp cấu hình vật lý (bitstream) để nạp vào chip FPGA. Quá trình này được thực hiện tự động bởi các bộ công cụ phần mềm từ các nhà sản xuất FPGA như Intel Quartus Prime hay AMD (Xilinx) Vivado. Quy trình này gồm nhiều bước, bắt đầu bằng tổng hợp (Synthesis), nơi mã HDL được dịch thành một danh sách mạng (netlist) gồm các cổng logic cơ bản. Tiếp theo là các bước thực thi (Implementation) bao gồm ánh xạ (Map), đặt vị trí (Place) và đi dây (Route). Cuối cùng, tệp bitstream được tạo ra và sẵn sàng để nạp lên bo mạch phát triển, biến thiết kế logic thành một mạch điện tử hoạt động thực sự.

5.1. Bước tổng hợp thiết kế với công cụ Vivado hoặc Quartus

Tổng hợp (Synthesis) là bước đầu tiên trong quy trình triển khai. Công cụ tổng hợp Vivado hoặc Quartus sẽ phân tích mã VHDL, kiểm tra cú pháp và chuyển đổi các cấu trúc mô tả hành vi (như if, case, process) thành các cấu trúc logic cơ bản mà FPGA có thể hiểu được, như LUTs, flip-flops và các khối nhớ. Trong bước này, công cụ cũng thực hiện các tối ưu hóa logic để giảm diện tích và cải thiện tốc độ của thiết kế. Kết quả của quá trình tổng hợp là một tệp netlist, mô tả sự kết nối giữa các phần tử logic, là đầu vào cho giai đoạn thực thi tiếp theo.

5.2. Gán chân và định tuyến Place and Route PAR cho vi mạch

Giai đoạn Place and Route (PAR) là nơi thiết kế logic được ánh xạ vào tài nguyên vật lý của chip FPGA. Bước 'Place' sẽ quyết định vị trí cụ thể cho mỗi phần tử logic (LUT, flip-flop) trên ma trận của FPGA. Mục tiêu là đặt các phần tử có liên quan gần nhau để giảm thiểu độ trễ đường truyền. Bước 'Route' sẽ kết nối các phần tử này lại với nhau bằng cách sử dụng các kênh định tuyến có sẵn trên chip. Đây là một quá trình phức tạp, có ảnh hưởng lớn đến hiệu suất thời gian (timing performance) của thiết kế. Kỹ sư cũng cần phải gán các cổng vào/ra của bộ ghi dịch (như clk, reset, data_in, data_out) cho các chân vật lý cụ thể trên vỏ chip FPGA.

5.3. Nạp cấu hình và kiểm tra trên kit phát triển thực tế

Bước cuối cùng là tạo tệp bitstream và nạp (download) nó vào FPGA trên một bo mạch phát triển, ví dụ như hệ thống CIC-310 được đề cập trong tài liệu. Tệp bitstream chứa toàn bộ thông tin cấu hình cho các khối logic và các kết nối. Sau khi nạp, chip FPGA sẽ hoạt động chính xác như một bộ ghi dịch đã được thiết kế. Việc kiểm tra trên phần cứng thực tế là bước xác nhận cuối cùng, đảm bảo thiết kế không chỉ đúng về logic mà còn đáp ứng được các yêu cầu về điện và thời gian trong môi trường hoạt động thực. Đây là khoảnh khắc thiết kế từ phần mềm trở thành một sản phẩm vật lý.

VI. Top ứng dụng bộ ghi dịch trong thực tiễn và tương lai

Các ứng dụng bộ ghi dịch vô cùng đa dạng và là nền tảng cho nhiều công nghệ kỹ thuật số hiện đại. Chúng không chỉ giới hạn trong các bài toán học thuật mà còn hiện diện trong hầu hết các thiết bị điện tử xung quanh chúng ta. Từ việc điều khiển hàng loạt đèn LED với chỉ vài chân vi điều khiển, đến việc giao tiếp với các thiết bị ngoại vi theo chuẩn nối tiếp như SPI, thanh ghi dịch đóng một vai trò không thể thiếu. Trong các hệ thống phức tạp hơn, chúng là thành phần cốt lõi của các bộ xử lý, bộ nhớ đệm, và các mạch xử lý tín hiệu số (DSP). Với sự phát triển không ngừng của công nghệ FPGA, khả năng thiết kế các bộ ghi dịch tùy chỉnh, hiệu năng cao và tích hợp nhiều chức năng ngày càng mở rộng, hứa hẹn nhiều ứng dụng đột phá trong tương lai.

6.1. Ứng dụng trong chuyển đổi dữ liệu nối tiếp song song

Một trong những ứng dụng bộ ghi dịch phổ biến nhất là chuyển đổi dữ liệu. Bộ ghi dịch SIPO nhận một chuỗi bit nối tiếp từ một đường truyền duy nhất và chuyển đổi nó thành dữ liệu song song trên nhiều đường truyền. Ứng dụng này rất quan trọng trong việc giao tiếp với các module như màn hình LCD hoặc bộ nhớ flash. Ngược lại, bộ ghi dịch PISO lấy dữ liệu song song từ một bus nội bộ và gửi đi tuần tự qua một đường truyền, giúp tiết kiệm số lượng chân cắm và dây dẫn, điển hình trong các giao thức truyền thông nối tiếp như SPI (Serial Peripheral Interface).

6.2. Vai trò của thanh ghi dịch trong CPU và hệ vi xử lý

Bên trong một bộ xử lý trung tâm (CPU), các thanh ghi dịch là thành phần không thể thiếu. Chúng được sử dụng để thực hiện các phép toán dịch bit (bitwise shift) và quay bit (rotate), là những thao tác cơ bản trong lập trình cấp thấp và tối ưu hóa thuật toán. Ví dụ, phép dịch trái một bit tương đương với phép nhân 2, và dịch phải tương đương với phép chia 2. Ngoài ra, các thanh ghi chuyên dụng trong CPU, như thanh ghi lệnh (Instruction Register) hay bộ đếm chương trình (Program Counter), cũng có thể được xây dựng dựa trên cấu trúc của bộ ghi dịch và các phần tử nhớ.

6.3. Hướng phát triển của thiết kế mạch số trên FPGA

Tương lai của thiết kế mạch tuần tựbộ ghi dịch trên FPGA gắn liền với xu hướng tích hợp hệ thống trên một con chip (SoC - System on a Chip). Các FPGA hiện đại không chỉ chứa các khối logic lập trình được mà còn tích hợp sẵn các lõi vi xử lý cứng (như ARM Cortex-A), các khối DSP, và bộ nhớ tốc độ cao. Điều này cho phép thiết kế các hệ thống phức tạp hơn, nơi các bộ ghi dịch tùy chỉnh hoạt động như những khối tăng tốc phần cứng (hardware accelerators) cho phần mềm chạy trên lõi xử lý. Hướng phát triển này mở ra tiềm năng cho các ứng dụng trong trí tuệ nhân tạo, xử lý hình ảnh thời gian thực, và mạng 5G, nơi tốc độ và khả năng xử lý song song là yếu tố quyết định.

04/10/2025

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

LỜI MỞ ĐẦU MỤC LỤC DANH MỤC CÁC TỪ VIẾT TẮT DANH MỤC CÁC BẢNG BIỂU DANH MỤC CÁC HÌNH VẼ CHƢƠNG 1: CƠ SỞ LÝ THUYẾT VỀ BỘ GHI DỊCH. Khái quát về bộ ghi dịch. Các bộ ghi dịch. Bộ ghi dịch song song.

Bộ ghi dịch nối tiếp. Trình tự thiết kế bộ ghi dịch. Trình tự thiết kế. Thiết kế bộ ghi dịch từ đồ hình trạng thái.

9 CHƢƠNG 2: HỆ THỐNG PHÁT TRIỂN CIC-310 VÀ FPGA. Hệ thống phát triển CIC 310. Bảng phát triển SN-PLDE2. Bảng thí nghiệm SN-PLDE3A.

Cơ bản về lập trình logic FPGA. Quy trình thiết kế FPGA. Ngôn ngữ lập trình VHDL. Đối tƣợng trong VHDL.

Kiểu dữ liệu trong VHDL. Các phép toán trong VHDL. Các đơn vị thiết kế trong VHDL. Cấu trúc chung của một chƣơng trình mô tả VHDL.

Môi trƣờng kiểm tra testbench. Các cấu trúc lệnh song song. Các cấu trúc lệnh tuần tự. 37 CHƢƠNG 3: THIẾT KẾ BỘ GHI DỊCH TRÊN FPGA.

Lập sơ đồ khối và sơ đồ cấu trúc. Giới thiệu thanh ghi SN74164. Chức năng các chân của thanh ghi SN74164. Nguyên lý hoạt động.

Thiết lập sơ đồ nguyên lý của bộ ghi dịch. Mô phỏng bộ ghi dịch. 45 KẾT LUẬN DANH MỤC TÀI LIỆU THAM KHẢO DANH MỤC CÁC TỪ VIẾT TẮT Từ viết tắt Từ đầy đủ Nội dung CLK Clock Xung nhịp CLR Clear Xóa xung Complex Programmable Logic CPLD Thiết bị logic lập trình bù Device DUT Device under test Thiết bị cần kiểm tra FF Flip-Flop Phần tử nhớ Ma trận cổng lập trình đƣợc theo FPGA Field-programmable gate array trƣờng GND Ground Điểm nối đất HDL Hardware Description Language Ngôn ngữ mô tả phần cứng LED Light Emitting Diode Diode phát quang LUT Look up table Bảng ánh xạ PAR Place and Route Định vị và định tuyến kết nối PIPO Parallel Input/Parallel Output Vào song song/ra song song PISO Parallel Input/Serial Output Vào song song/ra nối tiếp RAM Random Access Memory Bộ nhớ truy cập ngẫu nhiên ROM Read-Only Memory Bộ nhớ chỉ đọc SIPO Serial Input/Parallel Output Vào nối tiếp/ra song song SISO Serial Input/Serial Output Vào nối tiếp/ra nối tiếp Bộ nhớ truy xuất ngẫu nhiên SRAM Stactic Random Access Memory tĩnh Very High Speed Intergrated Circuit Ngôn ngữ mô tả phần cứng cho VHDL Hardware Description Language các mạch tích hợp tốc độ rất cao DANH MỤC CÁC BẢNG BIỂU Bảng 1.1: Bảng trạng thái của bộ ghi nối tiếp dịch phải .2: Bảng trạng thái của bộ ghi nối tiếp dịch trái có các lối ra song song và lối ra nối tiếp .1: Sơ đồ công tắc đầu vào Logic .2: Sơ đồ chân cắm hiển thị LED Logic .3: Sơ đồ chân cắm hiển thị 7 phân đoạn 6 chữ số .4: Sơ đồ bố trí chân của máy phát điện xung .5: Sơ đồ bàn phím ma trận .6: Sơ đồ chân cắm bộ hiển thị 16 phân đoạn.7: Sơ đồ chân cắm LED điểm chấm 5x7 .8: Sơ đồ chân cắm LCD 2021 .1: Bảng trạng thái .2: Sơ đồ phân định chân cắm đầu vào/ra trên CIC-310 .3: Bảng trạng thái thứ nhất .4: Bảng trạng thái thứ 2.5: Bảng trạng thái thứ 3 .6: Bảng trạng thái thứ 4 .7: Bảng trạng thái thứ 5. 49 DANH MỤC CÁC HÌNH VẼ Hình 1.1: Thanh ghi dịch 4 bit cơ bản dùng D-FF .2: Sơ đồ bộ ghi dịch song song 4 bit.3: Bộ ghi nối tiếp dịch phải .4: Ghi nối tiếp dịch trái có các lối ra song song và ra nối tiếp.5: Bộ ghi nối tiếp dịch phải và ghi song song.6: Bộ ghi nối tiếp vừa dịch phải, vừa dịch trái.7: Các bƣớc thiết kế bộ ghi dịch .8: Các cung biểu diễn sự thay đổi trạng thái từ của FF- .10: Bảng Karnaugh đầu vào kích cho các D-FF .11: Mạch thực hiện D-FF .12: Bảng Karnaugh đầu vào kích cho các T-FF .13: Mạch thực hiện T-FF .14: Bảng Karnaugh đầu vào kích cho các JK-FF .15: Mạch thực hiện của JK-FF .16: Bảng Karnaugh đầu vào kích cho các RS-FF .17: Mạch thực hiện của RS-FF .1: Hệ thống phát triển CPLD/FPGA .2: Bảng mạch phát triển mạch SN-PLDE2 .3: Bảng thí nghiệm SN-PLDE3A .4: Bộ chuyển mạch Logic S1-S3 .5: Hiển thị LED Logic .6: Phân định chân cắm của hiển thị 7 phân đoạn .7: Mã vận hành của bộ hiển thị 7 phân đoạn 6 chữ số .8: Hiển thị 16 phân đoạn .9: Ổ cắm bộ hiển thị 16 phân đoạn .10: Phân định chân cắm của bộ LED điểm chấm 5x7.11: Ổ cắm bộ LED điểm chấm 5x7 JP22 và bộ chọn lọc điểm chấm JP24 .12: Bộ kết nối LCD2021 .13: Cấu trúc tổng thể một FPGA .14: Khối logic FPGA .15: Lƣu đồ thiết kế FPGA .16: Cấu trúc mô tả phần cứng và các đối tƣợng trong VHDL.

Sơ đồ tổng quát chƣơng trình thử testbench .1: Sơ đồ các chân của thanh ghi SN74164 .2: Sơ đồ khối của thanh ghi SN74164 .3: Tạo file thiết kế.4: Lấy linh kiện .5: Sơ đồ nguyên lý thanh ghi SN74164.6: Hộp thoại thiết bị .7: Hộp thoại lựa chọn loại thiết bị .8: Hộp thoại lựa chọn tốc độ biên dịch.9: Biên dịch và kiểm tra lỗi thiết kế .10: Phân định chân cắm trên MAX+plus II .11: Trạng thái đầu vào/ra trƣờng hợp thứ nhất.12: Trạng thái đầu vào/ra trƣờng hợp thứ 2 .13: Trạng thái đầu vào trƣờng hợp thứ 3 .14: Trạng thái đầu ra khi có xung CLK thứ nhất .15: Trạng thái đầu ra khi có xung CLK thứ 2 .16: Trạng thái đầu ra khi có xung CLK thứ 3 .17: Trạng thái đầu ra khi có xung CLK thứ 4 .18: Trạng thái đầu ra khi có xung CLK thứ 5 .19: Trạng thái đầu ra khi có xung CLK thứ 6 .20: Trạng thái đầu ra khi có xung CLK thứ 7 .21: Trạng thái đầu ra khi có xung CLK thứ 8 .22: Trạng thái đầu vào/ra trƣờng hợp thứ 4 trên CIC-310 .23: Trạng thái đầu vào/ra trƣờng hợp thứ 5 trên CIC-310. 50 CHƢƠNG 1 CƠ SỞ LÝ THUYẾT VỀ BỘ GHI DỊCH Mạch số là mạch dùng để xử lý tín hiệu số. Tín hiệu số là tín hiệu có biên độ biến thiên không liên tục theo thời gian hay còn gọi là tín hiệu rời rạc, nó đƣợc biểu diễn dƣới dạng xung với 2 mức điện thế cao và thấp mà tƣơng ứng với hai mức điện thế này là hai mức 0 hoặc 1 của mạch số. Mạch số đƣợc chia làm 2 loại: + Mạch tổ hợp (Combinational Circuits) là mạch mà trạng thái tín hiệu đầu ra tại một thời điểm xác định chỉ phụ thuộc vào trạng thái tín hiệu ở đầu vào tại thời điểm đó.

Các phần tử cơ bản để xây dựng nên hệ tổ hợp là các phần tử AND, OR, NOT. + Mạch dãy – Mạch tuần tự (Sequential Circuits) là mạch có trạng thái tín hiệu đầu ra phụ thuộc không những vào trạng thái tín hiệu đầu vào mà còn phụ thuộc vào trạng thái trong của mạch, nghĩa là mạch có lƣu trữ nhớ các trạng thái. Để xây dựng mạch dãy ngoài, các mạch tổ hợp cơ bản nhƣ AND, OR, NOT còn cần phải có các phần tử Flip-Flop. Trong mạch tuần tự lại đƣợc chia làm 2 loại chính là bộ đếm và bộ ghi dịch.

Nội dung dƣới đây trình bày lý thuyết cơ bản về bộ ghi dịch 1. Khái quát về bộ ghi dịch 1. Định nghĩa Bộ ghi dịch (còn gọi là thanh ghi dịch) đƣợc cấu tạo từ một dãy phần tử nhớ đƣợc mắc liên tiếp với nhau và một số các cổng logic cơ bản hỗ trợ. Nó có khả năng ghi (nhớ) số liệu và dịch thông tin.

Muốn ghi và truyền một từ nhị phân n bit cần n phần tử nhớ (n Flip-Flop). Trong các bộ ghi dịch thƣờng dùng các Flip-Flop (FF) đồng bộ nhƣ RS-FF, T-FF, JK- FF, D-FF. Bộ ghi dịch đƣợc sử dụng rộng rãi để nhớ số liệu, chuyển số liệu song song thành nối tiếp và ngƣợc lại. Bộ ghi dịch là thành phần không thể thiếu đƣợc trong CPU của các hệ thống xử lý, trong các cổng vào/ra có khả năng lập trình.

Bộ ghi dịch còn đƣợc dùng để thiết kế bộ đếm, tạo dãy tín hiệu nhị phân tuần hoàn. 1 Các bộ ghi dịch có thể đƣợc thiết kế bằng cách sử dụng các FF rời rạc hoặc đƣợc tích hợp trên các chip. Cấu tạo Bộ ghi dịch gồm một dãy các phần tử nhớ đơn bit (FF) đƣợc mắc liên tiếp. Các FF sử dụng trong bộ ghi thƣờng là D-FF hoặc là các loại khác nhƣng mắc theo kiểu D để tạo thành các bộ ghi dịch.

Để ghi n bit thông tin ngƣời ta sử dụng n FF, đầu ra của FF này đƣợc mắc tới đầu vào của FF tiếp theo.1: Thanh ghi dịch 4 bit cơ bản dùng D-FF Thông tin đƣợc nạp vào bộ ghi dịch từng bit một và đƣợc đồng bộ với xung nhịp. Phân loại a) Dựa vào tín hiệu vào/ra: - Vào nối tiếp/ra song song - SIPO (Serial Input/Parallel Output): Thông tin đƣợc đƣa vào thanh ghi dịch tuần tự từng bit một, số liệu đƣợc đƣa ra đồng thời tức là tất cả n FF của thanh ghi dịch đƣợc đọc cùng một lúc. - Vào song song/ra song song - PIPO (Parallel Input/Parallel Output): Thông tin đƣợc đƣa vào và lấy ra đồng thời ở n FF. - Vào nối tiếp/ra nối tiếp - SISO (Serial Input/Serial Output): Thông tin đƣợc đƣa vào và lấy ra tuần tự từng bit một.

- Vào song song/ra nối tiếp – PISO (Parallel Input/Serial Output): Thông tin đƣợc đƣa vào đồng thời cả n FF, lấy ra tuần tự từng bit một dƣới sự điều khiển của xung nhịp. b) Hướng dịch dữ liệu: - Dịch trái. - Vừa dời phải vừa dời trái. 2 c) Số lượng đầu vào: - Đầu vào đơn: Mỗi FF trong bộ ghi dịch chỉ sử dụng một đầu vào điều khiển, ví dụ nhƣ D-FF hay các FF khác mắc theo kiểu D.

- Đầu vào đôi: Các FF trong bộ ghi dịch sử dụng cả hai đầu vào điều khiển, ví dụ hai đầu vào điều khiển của JK-FF hay RS-FF. d) Số lượng đầu ra: - Đầu ra đơn: Mỗi FF trong bộ ghi dịch chỉ có một đầu ra (hoặc ̅ ) đƣợc đƣa ra chân của vi mạch. - Đầu ra đôi: Cả hai đầu ra của FF và ̅ đều đƣợc đƣa ra chân của vi mạch. e) Cách ghi dữ liệu: - Ghi nối tiếp: Các bit của từ nhị phân đƣợc đƣa vào bộ ghi dịch một cách tuần tự theo thứ tự của từ nhị phân.

- Ghi song song: Các bit của từ nhị phân đƣợc ghi đồng thời một lúc vào bộ ghi. Các bộ ghi dịch 1. Bộ ghi dịch song song  Sơ đồ: Hình 1.2: Sơ đồ bộ ghi dịch song song 4 bit.  Nguyên tắc hoạt động: Trƣớc tiên dùng xung “Xóa” CD = 0 để xóa, lối ra = 0000.

Các số liệu cần ghi đƣa tới lối vào .

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