高手帮一下忙,把下面的程序解释一下,要详细些。每一行添加注释。先谢谢了

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SRAM IS GENERIC(WIDTH:INTEGER:=8; DEPTH:INTEGER:=128; ADDER:INTEGER:=3); PORT(DATAIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DATAOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); CLOCK:IN STD_LOGIC; WE,RE:IN STD_LOGIC; SIGNAL WADD:IN STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL RADD:IN STD_LOGIC_VECTOR(2 DOWNTO 0));END ENTITY SRAM;ARCHITECTURE ART OF SRAM IS TYPE MEM IS ARRAY(0 TO 127) OF STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL RAMTMP:MEM; BEGINPROCESS(CLOCK) BEGIN IF (CLOCK'EVENT AND CLOCK='1') THEN IF(WE='1')THEN RAMTMP(CONV_INTEGER(WADD))<=DATAIN; END IF; END IF; END PROCESS;--读进程 PROCESS(CLOCK) BEGIN IF(CLOCK'EVENT AND CLOCK='1')THEN IF (RE='1') THEN DATAOUT<=RAMTMP(CONV_INTEGER(RADD)); END IF; END IF; END PROCESS;END ARCHITECTURE ART;

第1个回答  2013-12-24
VHDL语言的IEEE库程序。
LIBRARY IEEE; 表示本文件属于库IEEE
USE 。。。引用已有文件。
ENTITY SRAM IS 。。。开始定义一个实体
generic。。。通用描述部分,8位*128个内存单元,另外附加单元3个(就是下面的接口)。
PORT。。。接口:
DATAIN:8位向量输入数据;
DATAOUT:8位向量输出数据;
CLOCK:时钟输入信号,标准逻辑型,1位;
WE,RE:写、读信号,1位;
SIGNAL WADD:3位向量输入,写数据的地址;有问题,地址至少要7位,才有127
SIGNAL RADD:3位向量输入,读数据的地址;有问题,地址至少要7位,才有127
【按】一般做法,读写共用一个地址单元。
END。。。 实体SRAM定义结束。
ARCHITECTURE ART OF SRAM IS 开始定义SRAM实体的结构体
TYPE MEM IS 。。。定义一个新类型MEM,8位*128,对应于前面个8位*128SRAM
存储单元 ,实际是维数是128的一维单字节数组。
SIGNAL RAMTMP:MEM;引用上面的类型定义,定义了一个名称为RAMTMP的信号变量。
对应于前面的8位*128SRAM存储单元
BEGIN PROCESS(CLOCK) 进程描述,定义了两个进程,一个是写入,一个是读出。
当CLOCK‘EVENT发生、CLOCK=1、WE=1时,将输入数据DATAIN放入数组RAMTMP
注意,写入的地址在WADD中,但是只有3位,要用CONV_INTEGER函数将它
转变成INTEGER。
当CLOCK‘EVENT发生、CLOCK=1、RE=1时,将数组RAMTMP(RADD)的数值
存放到接口DATAOUT中。
END PROCESS;过程定义结束
END ARCHITECTURE ART 结构体定义结束。
IEEE的标准逻辑有9种值,如果考虑多态,也许可以用3位表达127,至少6进制。追问

本题的题目是:
【单端口SRAM模拟电路
实验内容及要求。
采用dff模拟单端口SRAM。
(1)数据长度8bit,SRAM深度128;
(2)假定操作信号与时钟同步;
(3)完成全部流程:设计规范文档、模块设计、代码输入、功能仿真、约束与综合、布局布线、下载验证等。】
请问把上面的程序仿真、下载到试验箱后,该如何操作实验箱,最终结果是什么?麻烦了,不胜感谢!

追答

硬件我不懂,仅仅从程序逻辑分析。下面的修改不知行否,你试试看吧:
ENTITY SRAM IS GENERIC(WIDTH:INTEGER:=8; DEPTH:INTEGER:=128; //ADDER:INTEGER:=3); ADDER:INTEGER:=4); PORT(DATAIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DATAOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); CLOCK:IN STD_LOGIC; //WE,RE:IN STD_LOGIC; WE:IN STD_LOGIC; //SIGNAL WADD:IN STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL WADD:IN STD_LOGIC_VECTOR(6 DOWNTO 0); RE:IN STD_LOGIC; //SIGNAL RADD:IN STD_LOGIC_VECTOR(2 DOWNTO 0)); SIGNAL RADD:IN STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY SRAM;

相似回答