【Espier FPGA VHDL学习帖】第21帖 SRAM设计
这一帖主要是参考的《VHDL实用教程》
首先,静态随机存储器SRAM是存储数据的重要器件,它由锁存器阵列构成,SRAM根据地质信号,经由译码电路选择欲读写的存储单元。
其次,详细介绍。
本帖的描述SRAM位4位地址线,8位输入输出数据线,即存储空间位16X8Bit.
Wr=’0’ AND rd=’1’,外部数据DIN锁进指定地址adr的RAM单元
Rd=’0’ and wr=’1’,将指定addr的RAM单元中的数据向dout口输出。
初步设想为这样,但是由于实验板的按键输入个数有限,所以addr直接取了固定的0地址,而输入din[7:0]只选中了其中的一位。
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ledd IS
GENERIC(k:INTEGER :=8;
w:INTEGER:=4 );
port (rd,wr,cs:in std_logic;
en:outstd_logic;
adr:in std_logic_vector(w-1 downto 0);
din:in std_logic_vector(k-1 downto 0);
dout:out std_logic_vector(k-1 downto 0) );
END ledd;
ARCHITECTURE behave OF ledd is
SUBTYPE word IS STD_LOGIC_VECTOR(K-1 DOWNTO 0);
TYPE memory IS array(0 TO 2**w-1) OF word;
SIGNAL sram:memory;
SIGNAL adr_in:INTEGER;
BEGIN
adr_in<=CONV_INTEGER(adr);
en<='0';
WRITE:PROCESS(wr,cs,adr_in,din,rd)
--数据写入进程
BEGIN
IF wr='0' AND rd='1' THEN
sram(0)<=din;
ENDIF;
END PROCESS;
READ:PROCESS(rd,cs,adr_in,wr)
BEGIN
IF rd='0' AND wr='1' THEN
dout<= sram(0);
ELSE
dout<= (others=>'Z');
END IF;
END PROCESS;
END behave;
实验步骤:
先向地址0写入数据,同时按下按键S3和S2,写入数据
按键按键S1,读出数据
数码管初始显示:
比较:
因为第一次写入的数据位按键按下的值,因为这里数据只设置了一位,所以可以看到两幅图只有一段数码管显示的区别。