Trong đoạn này, chỳng ta sẽ thiết kế cỏc mạch bộ nhớ sau:
+ ROM
+ RAM với bus dữ liệu vào ra tỏch rời.
ROM (Read Only Memory): Bộ nhớ chỉ đọc và ghi: Sơ đồ của ROM được chỉ ra trong hỡnh 9.23. Vỡ ROM là bộ nhớ chỉ đọc, khụng cú tớn hiệu clock, chõn cho phộp ghi, nú chỉ cú tớn hiệu vào bus địa chỉ và tớn hiệu ra là bus dữ liệu.
Hỡnh 9.23.Sơ đồ của ROM
Mó thiết kế ROM như sau:
--- LIBRARY ieee;
USE ieee.std_logic_1164.all;
--- ENTITY rom IS
GENERIC ( bits: INTEGER := 8; -- # of bits per word
words: INTEGER := 8); -- # of words in the memory PORT ( addr: IN INTEGER RANGE 0 TO words-1;
data: OUT STD_LOGIC_VECTOR (bits-1 DOWNTO 0)); END rom;
--- ARCHITECTURE rom OF rom IS
TYPE vector_array IS ARRAY (0 TO words-1) OF STD_LOGIC_VECTOR (bits-1 DOWNTO 0);
CONSTANT memory: vector_array := ( "00000000",
"00000010", "00000100", "00001000", "00010000", "00100000", "01000000", "10000000"); BEGIN data <= memory(addr); END rom; --- Kết quả mụ phỏng:
Hỡnh 9.24. Kết quả mụ phỏng thiết kế ROM
RAM với đường bus vào ra riờng biệt: Sơ đồ của RAM với đường bus vào ra riờng biệt được thể hiện trong hỡnh 9.25
Hỡnh 9.25. RAM với đường dữ liệu tỏch rời
Như chỳng ta thấy trờn hỡnh, RAM cú cỏc bus dư liệu vào data_in, bus dữ liệu ra data_out, bus địa chỉ, tớn hiệu clk và tớn hiệu cho phộp đọc/ghi. Khi tớn hiệu cho phộp ghi/đọc được xỏc nhận là ghi thỡ tại mỗi xung lờn tiếp theo của clk thỡ dữ liệu đầu vào (data_in) phải được lưu trữ tại vị trớ addr, và dữ liệu ra phải được đọc từ địa chỉ addr.
Mó thiết kế RAM sẽ như sau:
--- --- library IEEE; use IEEE.STD_LOGIC_1164.all; --- ENTITY ram IS
GENERIC ( bits: INTEGER := 8; -- # of bits per word words: INTEGER := 16); -- # of words in the --- memory---
PORT ( wr_ena, clk: IN STD_LOGIC;
addr: IN INTEGER RANGE 0 TO words-1;
data_in: IN STD_LOGIC_VECTOR (bits-1 DOWNTO 0); data_out: OUT STD_LOGIC_VECTOR (bits-1 DOWNTO 0)); END ram;
--- ARCHITECTURE ram OF ram IS
TYPE vector_array IS ARRAY (0 TO words-1) OF STD_LOGIC_VECTOR (bits-1 DOWNTO 0);
SIGNAL memory: vector_array; BEGIN
PROCESS (clk, wr_ena) BEGIN
IF (wr_ena='1') THEN
IF (clk'EVENT AND clk='1') THEN memory(addr) <= data_in; END IF; END IF; END PROCESS; data_out <= memory(addr); END ram; ---
Kết quả mụ phỏng:
Hỡnh 9.26. Kết quả mụ phỏng RAM cú đương dữ liệu vào ra khỏc nhau.
RAM với đường bus song song:
Sơ đồ của RAM với đường bus song song được thể hiện trong hỡnh 9.27. Dữ liệu được ghi vào RAM hay được đọc từ RAM thực hiện trờn cựng 1 đường bus.
Hỡnh 9.27. RAM với đường dữ liệu chung
Mó thiết kế sẽ như sau:
--- LIBRARY ieee;
USE ieee.std_logic_1164.all;
--- ENTITY ramc IS
GENERIC ( bits: INTEGER := 8; -- # of bits per word words: INTEGER := 16); -- # of words in the -- memory
PORT ( clk, wr_ena: IN STD_LOGIC;
addr: IN INTEGER RANGE 0 TO words-1;
bidir: INOUT STD_LOGIC_VECTOR (bits-1 DOWNTO 0)); END ramc;
--- ARCHITECTURE arc OF ramc IS
TYPE vector_array IS ARRAY (0 TO words-1) OF STD_LOGIC_VECTOR (bits-1 DOWNTO 0);
SIGNAL memory: vector_array; BEGIN PROCESS (clk, wr_ena) BEGIN IF (wr_ena='0') THEN bidir <= memory(addr); ELSE bidir <= (OTHERS => 'Z');
IF (clk'EVENT AND clk='1') THEN memory(addr) <= bidir; END IF; END IF; END PROCESS; END arc; ---
Kết luận
Ngày này việc ứng dụng VHDL trong việc thiết kế mạch và chớp ngày cang nhiều. Cụng nghệ này đang là xu hướng của thời đại, đơn giản vỡ nú khụ ng chỉ tiờu tốn ớt về tiền bạc mà nú cũn giỳp cho chỳng ta đơn giản trong việc thiết kế phần cứng.
Trờn đõy, chỳng ta đó trỡnh bày một cỏch khỏi quỏt về phương phỏp thiết kế cỏc mạch. Những mạch cơ bản nhất đó được chỳng ta thiết kế một cỏch chi tiờt, hoàn thiện. Đõy là cơ sở cho những thiết kế lơn hơn về phần cứng, để thiết kế cỏc ứng dụng cho cỏc FPGA, ASIC.
Tài liệu tham khảo:
- Circuit design with VHDL , Voilnei A.Pedroni
- VHDL language.
- The vhdl – cookbook , Peter J.Ashedo
- Thiết kế mạch bằng mỏy tớnh, Nguyễn Linh Giang …..
Phõn cụng cụng việc:
Nguyễn Ngọc Linh: Chương 2,3 Nguyễn Quốc Việt: Chương 4,5 Nghiờm Kim Phương: Chương 6,7