Thiết kế mô hình thực hành vi mạch số lập trình bằng ngôn ngữ mô tả phần cứng VHDL

MỤC LỤC

FPGA

FPGA được cấu thành từ các khối logic (Logic Block) được bố trí dưới dạng ma trận, chúng được nối với nhau thông qua hệ thống các kênh kết nối lập trình được Hệ thống này còn có nhiệm vụ kết nối với các cổng giao tiếp IO_PAD của FPGA. Điểm khác biệt cơ bản thứ ba của FPGA so với các IC kể trên là ở cơ chế tái cấu trúc, toàn bộ cấu hình của FPGA thường được lưu trong một bộ nhớ động (RAM), chính vì thế mà khi ứng dụng FPGA thường phải kèm theo một ROM ngoại vi để nạp cấu hình cho FPGA mỗi lần làm việc.

Tìm hiểu về ngôn ngữ mô tả phần cứng VHDL 1.1. Giới thiệu về VHDL

GENERIC

ARCHITECTURE generic_decoder OF decoder IS BEGIN PROCESS (ena, sel) VARIABLE temp1 : STD_LOGIC_VECTOR (x'HIGH DOWNTO 0); VARIABLE temp2 : INTEGER RANGE 0 TO x'HIGH; BEGIN temp1 := (OTHERS => '1');. ARCHITECTURE parity OF parity_gen IS BEGIN PROCESS (input) VARIABLE temp1: BIT; VARIABLE temp2: BIT_VECTOR (output'RANGE); BEGIN temp1 := '0'; FOR i IN input'RANGE LOOP temp1 := temp1 XOR input(i);.

THIẾT KẾ MẠCH SỐ TRÊN FPGA

Kiến trúc tổng quan

    Cấu trúc chi tiết và tên gọi của các thành phần có thể thay đôi tùy theo các hãng sản xuất khác nhau nhưng về cơ bản FPGA được cấu thành từ các khối logic (Logic Block) số lượng của các khối khối này thay đổi từ vài trăm (Xilinx Spartan) đến vài chục nghìn (Xilinx Virtex 6, 7) được bố trí dưới dạng ma trận, chúng được nối với nhau thông qua hệ thống các kênh kết nối khả trình. IP core là các khối thiết kế sẵn có đăng ký sở hữu trí tuệ và thường là các thiết kế khá phức tạp ví dụ như các khối FIFO, khối làm việc với số thực (Floating Point Unit), khối chia, các khối CORDIC, các khối giao tiếp Ethernet, PCI EXPRESS, SPI, các khối xử lý số tín hiệu… Trong khuôn khổ chương trình học thì việc sử dụng này là được phép tuy vậy nếu muốn sử dụng các khối này với mục đích tạo ra sản phẩm ứng dụng thì cần xem xét kỹ vấn đề bản quyền. Mô tả netlist là dạng mô tả ở mức cổng vì vậy không mô tả trực quan được chức năng của vi mạch mà chỉ thể hiện được cấu trúc của mạch, trong đó các khối con (components) là các phần tử cơ bản được mô tả trong thư viện UNISIM của FPGA. Ví dụ một mô tả netlist có dạng như sau: - library IEEE; use. IEEE.STD_LOGIC_1164.ALL; library UNISIM; use. UNISIM.VCOMPONENTS.ALL; use UNISIM.VPKG.ALL;. SW5_IBUF_25, O => LED5_OBUF_9); end Structure--- Netlist có thể không phản ánh đúng bản chất thực tế của mạch mà mô tả này này chỉ sử dụng để kiểm tra lại chức năng của vi mạch sau khi ánh xạ lên thư viện phần tử FPGA.

    Phân bố và kết nối Placing: Ở bước này PAR lựa chọn các khối logic chức năng cụ thể phân bố trên FPGA để gán cho các khối chức năng trên mô tả thiết kế, việc lựa chọn dựa trên các tiêu chí như nguồn tài nguyên, độ dài kết nối, điều kiện ràng buộc trong PCF file… Quá trình này thực hiện thông qua một số pha, kết thúc mỗi pha thì thiết kế được tối ưu thêm một mức, kết thúc Placing một kết quả NCD mới được tạo ra. Phân tích thời gian tĩnh (Static timing analysis) cho phép nhanh chóng xác định các tham số về mạch thời gian sau quá trình Place & Routing, kết quả của bước kiểm tra này cho phép xác định có hay không các đường truyền vi phạm các điều kiện ràng buộc về mặt thời gian, chỉ ra các đường gây trễ vi phạm để người thiết kế tiến hành những thay đổi để tối ưu mạch nếu cẩn thiết. Giao thức truyền tin dị bộ nối tiếp Hình trên mô tả tín hiệu đầu vào cho một khối nhận tín hiệu từ đường truyền nối tiếp, ở trạng thái nghỉ (IDLE), không có dữ liệu thì tín hiệu được giữ ở mức cao, để bắt đầu truyền thông tin tín hiệu Rx sẽ chuyển về mức thấp trong một khoảng thời gian đủ lớn, thời gian này bằng thời gian nhận 1 bit thông tin tương ứng với tốc độ truyền của cổng gọi là Tbraud.

    STATE FRAME DETECTOR, trạng thái nhận dữ liệu (kể cả PARITY bit và STOP bit) - DATA_RECEIVING. Trạng thái nghỉ IDLE. Sơ đồ chuyển trạng thái như sau:. Máy trạng thái khối nhận thông tin nối tiếp Từ trạng thái IDLE sẽ chuyển sang trạng thái STATE FRAME DETECT nếu như đường truyền chuyển từ mức 1 xuống mức 0, để bắt được bước chuyển này ta sử dụng một thanh ghi giữ chậm tín hiệu Rx có tên là Rx_Reg, máy trạng thái ghi nhận Rx chuyển xuống mức 0 nếu Rx = 0 và Rx_Reg = 1. Khi đã chuyển sang trạng thái STATE FRAME DETECT máy trạng thái sẽ khởi động bộ đếm mẫu, tại vị trí lấy mẫu nếu Rx vẫn bằng 0 thì kết luận đây chính là tín hiệu START và sẽ chuyển sang trạng thái nhận dữ liệu RECEIVE DATA. Theo lý thuyết ở trạng thái này chúng ta sẽ đếm đên 8 và lấy mẫu ở điểm chính giữa nhưng vì khi xác nhận tín hiệu START ta xác nhận ở điểm giữa CNT = 8 và RESET ngay bộ đếm mẫu tại điểm này nên điểm lấy mẫu của ta không phải ở vị trí CNT = 8 nữa mà đối với các bit dữ liệu ta sẽ lấy tại các điểm CNT = 15. Trong trạng thái nhận dữ liệu thì bộ đếm bit cũng làm việc, khi có 1 bit thông tin được nhận bộ đếm này cộng thêm 1, đồng thời máy trạng thái cũng sẽ điều khiển thanh ghi dịch nhận dữ liệu RECEIVE_REG thông qua tín hiệu SHIFT_ENABLE để thanh ghi này dịch qua trái mỗi lần 1 bit, các bit thông tin được đẩy dần vào thanh ghi này cho tới đầy. Khi đã nhận đủ thông tin giá trị CNT_BIT = 9 thì toàn bộ thông tin từ RECEIVE_REG được ghi song song sang thanh ghi dữ liệu DATA_REG, máy trạng thái chuyển về trạng thái nghỉ và chờ để nhận dữ liệu tiếp theo. Mã thiết kế VHDL của khối này được ghép. máy trạng thái fsm.vhd, và khối tổng receiver.vhd. Nội dung của các khối được liệt kê dưới đây: Khối chia tần clk_div.vhd: --- LIBRARY ieee; USE ieee.Std_logic_1164.ALL; USE ieee.Std_logic_unsigned.ALL;. end if; end if; end process;. cnt16_enable : out std_logic; shift_enable : out std_logic; data_reg_WE : out std_logic); END fsm; -architecture rtl of fsm is. Yêu cầu về mặt thời gian cho các tín hiệu này thể hiện ở bảng sau: Bảng 4-6 Yêu cầu về mặt thời gian của giao tiếp PS/2 Ký hiệu Tên gọi Tối đa Tối thiểu TPS2_CLK Chu kỳ xung Clock 30us 50us TSU Thời gian Setup của PS2_CLK 5us 25us THold Thời gian Hold của PS2_CLK 5us 25us Từ bảng trên có thể tính được tần số của tín hiệu CLK vào khoảng 20kHz -30Khz, với tần số thấp như vậy có thể yên tâm về đòi hỏi đối với Tsu và Thold nếu thiết kế trên FPGA. Với nhận xét như ở trên ta thấy thay vì sử dụng bảng ROM 16 giá trị có thể sử dụng bảng ROM 4 giá trị (miền đánh dấu đậm), bảng ROM này có địa chỉ biểu diễn bằng 2 bit x1x0. Ta giả sử giá trị biên độ SIN cũng biểu diễn dưới dạng 4-bit d3d2d1d0. Toàn bộ thao tác trên có thể được thực hiện bằng một khối logic không phức tạp, bù lại ta sẽ tiết kiệm được ắ số lượng ụ nhớ cần cho bảng ROM. Việc mó húa chỉ ẳ bảng ROM cũng giúp tiết kiệm 1 bit dấu dùng để biểu diễn giá trị vì miền giá trị của bảng ROM luôn là giá trị dương. Kết quả mô phỏng khối NCO Như quan sát trên giản đồ sóng giá trị tín hiệu ở đầu ra có dạng sóng Sin đúng như mong muốn, để tăng độ phân giải và thu được dạng sóng đầu ra tốt hơn thì tăng số bit dành cho thanh ghi tích lũy và số bit sử dụng cho biểu diễn giá trị biên độ sóng. Từ điều khiển tần số được đặt giá trị tương ứng bằng 6 switch trên mạch, tín hiệu ra được gửi đến 5 LEDs. Về xung nhịp làm việc ta hạn chế xung CLK là 3.2 ns, con số này có được sau tổng hợp sơ bộ. Kết quả tổng hợp trên FPGA Device utilization summary:. 270.124MHz) Minimum input arrival time before clock: 2.360ns Maximum output required time after clock: 4.283ns Maximum combinational path delay: No path found All values displayed in nanoseconds (ns) Kết quả sau tổng hợp bao gồm kết quả về sử dụng tài nguyên và kết quả về thời gian.

    Hình 4-7. Cấu trúc chi tiết của Slice Những đường gạch đứt thể hiện những kết nối tới các tài nguyên mà chỉ SLICEM mới có, những đường gạch liền chỉ những kết nối mà cả hai dạng SLICEs đều có
    Hình 4-7. Cấu trúc chi tiết của Slice Những đường gạch đứt thể hiện những kết nối tới các tài nguyên mà chỉ SLICEM mới có, những đường gạch liền chỉ những kết nối mà cả hai dạng SLICEs đều có