Thiết kế bộ nhớ 13 3-

Một phần của tài liệu Thiết kế vi mạch bằng VHDL (Trang 134 - 139)

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 với bus dữ liệu vào ra hai chiều

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; ---

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 …..

Một phần của tài liệu Thiết kế vi mạch bằng VHDL (Trang 134 - 139)