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

Một phần của tài liệu Ngôn ngữ mô tả phần cứng với VHDL (Trang 144 - 150)

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.

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ô phng 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

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:

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 vi đường d liu 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 PROCESS; END arc;

Kết lun

Ngày này việc ứng dụng VHDL trong việc thiết kế mạch và chíp ngày càng 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 liu tham kho:

- 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 - McGraw.Hill.VHDL.Programming.by.Example.4th.Ed - Circuit Design With VHDL MIT Press eBook

Một phần của tài liệu Ngôn ngữ mô tả phần cứng với VHDL (Trang 144 - 150)

Tải bản đầy đủ (PDF)

(150 trang)