EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——【Espier FPGA VHDL学习帖】第21帖 SRAM设计 ' A3 }2 n: C: O( @6 c* _* A) D
) h K+ t, C; V; w# g6 @; ?这一帖主要是参考的《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 utstd_logic; adr:in std_logic_vector(w-1 downto 0); din:in std_logic_vector(k-1 downto 0); dout ut 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 ROCESS(wr,cs,adr_in,din,rd) --数据写入进程 BEGIN IF wr='0' AND rd='1' THEN sram(0)<=din; ENDIF; END PROCESS; READ ROCESS(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,读出数据 ( x; u( O, R- D* C& r9 w( S
数码管初始显示: / |4 [ C! ~( x
# N2 t* G9 D, P4 b W1 N% d
比较:
$ N8 | V; k: \# O# t# p/ H 因为第一次写入的数据位按键按下的值,因为这里数据只设置了一位,所以可以看到两幅图只有一段数码管显示的区别。
2 D- `. p1 q4 k$ W! ] |