SRAM的读写操作
自己写的SRAM的程序,主要在于实用性,适应工作的工程需要。使用芯片为:
芯片时序图为:
代码:
/********************************Copyright**************************************
**----------------------------File information--------------------------
** File name : ZF_SRAM.v
** CreateDate :2014.11
** Funtions : SRAM的读写功能,CS、LB、UB都被固定住(CS1 =L,CS2 =H,LB=L,UB=L)。读:WE =H,OE =L/写:we = L,OE = X;
上电之后,先对SRAM 进行初始化,然后再写入读出。
sram上半屏的数据地址:0- 5183(288*18),下半屏地址:5184 - 10367
** Operate on :M5C06N3L114C7
** Copyright :All rights reserved.
** Version :V1.0
**---------------------------Modify the file information----------------
** Modified by :
** Modified data :
** Modify Content:
*******************************************************************************/ module ZF_SRAM(
clk_90m,
rst_n, wr_reg, //写数据使能
rd_reg, //读数据使能 addr_wr_reg, //写数据地址
addr_rd_reg, //读数据地址
data_wr_reg, //写操作数据寄存器
data_rd_reg, //读出的数据寄存器 cs_sram,
wr_sram, //we
rd_sram, //oe
addr_sram,
data_sram_wr, //写入的数据
data_sram_rd, //读入的数据
dir_data, //数据方向控制
wr_over,
rd_over, test_1,
test_2 ); parameter width = ; input clk_90m;
input rst_n; input wr_reg; //写使能
input rd_reg; //读使能 input [width -:] addr_wr_reg; //地址寄存器
input [width -:] addr_rd_reg; //地址寄存器
input [width -:] data_wr_reg; //待写数据寄存器
output [width -:] data_rd_reg; //读出的数据寄存器
reg [width -:] data_rd_reg_1; //读出的数据寄存器 output reg wr_sram; //we
output reg rd_sram; //oe
output reg cs_sram; output reg [width-:] addr_sram; //写出的信号
output reg [width-:] data_sram_wr; //写出的数据
input [width-:] data_sram_rd; //读入的数据
output reg dir_data; //数据方向的控制
output reg wr_over;
output reg rd_over;
reg [width-:] data_zifu;
output test_1;
output test_2; //***************读写状态机**********************//
parameter idel_0 = 'd0; //初始化显示界面
parameter idel_1 = 'd1; //初始化显示界面2
parameter idel_2 = 'd2; //初始化显示界面
parameter idel_3 = 'd3; //初始化显示界面2
parameter idel_4 = 'd4; //初始化显示界面
parameter idel_5 = 'd5; //初始化显示界面 parameter idel = 'd6;
parameter wr_1 = 'd7; //拉低cs
parameter wr_2 = 'd8; //拉低wr
parameter wr_3 = 'd9; //保持
parameter wr_4 = 'd10; //拉高cs,wr
parameter wr_5 = 'd11; //拉高结束
parameter wr_6 = 'd12; //拉低结束
parameter wr_7 = 'd13; //拉低结束
/* 留几个状态间隔 */ parameter rd_1 = 'd17; //拉低cs
parameter rd_2 = 'd18; //拉低rd
parameter rd_3 = 'd19; //保持
parameter rd_4 = 'd20; //拉高cs,rd
parameter rd_5 = 'd21; //拉高结束
parameter rd_6 = 'd22; //拉低结束
parameter rd_7 = 'd23; //拉低结束 reg [:] state;
reg [:] i;
always @(posedge clk_90m or negedge rst_n)
begin
if(!rst_n)
begin
state <= idel_0;
data_zifu <= ;
wr_sram <= ;
rd_sram <= ;
cs_sram <= ;
addr_sram<= ;
data_sram_wr<= ;
dir_data <= ;
wr_over <= ;
rd_over <= ;
i <= ;
end
else
begin
case(state)
idel_0:
begin
wr_sram <= ;
rd_sram <= ;
cs_sram <= ; addr_sram <= ;
dir_data <= ;
state <= idel_1;
end
idel_1:
begin
if(i > )
begin
i <= ;
state <= idel;
end
else
begin
addr_sram <= i;
data_sram_wr <= 'h0000;
state <= idel_2;
end
end
idel_2:
begin
cs_sram <= ;
state <= idel_3;
end
idel_3:
begin
state <= idel_4;
wr_sram <= ;
end
idel_4:
begin
state <= idel_5;
wr_sram <= ;
end
idel_5 :
begin
wr_sram <= ;
cs_sram <= ;
i <= i + ;
state <= idel_1;
end
//----------------------------//
/* 初始化完毕 */
idel:
begin
wr_sram <= ;
rd_sram <= ;
cs_sram <= ; addr_sram <= ;
dir_data <= ;
wr_over <= ;
rd_over <= ;
if(wr_reg) //写使能有效
begin
dir_data <= ; //写方向
addr_sram <= addr_wr_reg; //寄存地址
data_sram_wr <= data_wr_reg; //寄存写入的数据
state <= wr_1;
end
else if(rd_reg)
begin
dir_data <= ; //读方向
addr_sram <= addr_rd_reg; //寄存地址
state <= rd_1;
end
else
state <= idel;
end
wr_1:
begin
state <= wr_2;
cs_sram <= ;
end
wr_2:
begin
state <= wr_3;
wr_sram <= ;
end
wr_3:
begin
state <= wr_4;
wr_sram <= ;
end
wr_4:
begin
state <= wr_5;
cs_sram <= ;
wr_sram <= ;
end
wr_5:
begin
wr_over <= ;
state <= wr_6;
end
wr_6:
begin
wr_over <= ;
state <= idel;
end //-------------------//
rd_1:
begin
state <= rd_2;
cs_sram <= ;
end
rd_2:
begin
state <= rd_3;
rd_sram <= ;
end
rd_3:
begin
state <= rd_4;
rd_sram <= ;
end
rd_4:
begin
data_zifu <= data_sram_rd; //读取数据
state <= rd_5;
rd_sram <= ;
cs_sram <= ;
end
rd_5:
begin
rd_over <= ;
state <= rd_7;
end
rd_6:
begin
rd_over <= ;
state <= idel;
end
default:state <= idel;
endcase
end
end always @(posedge clk_90m or negedge rst_n)
begin
if(!rst_n)
begin
data_rd_reg_1 <= ;
end
else if(rd_over)
begin
data_rd_reg_1 <= data_zifu;
end
else
data_rd_reg_1 <= data_rd_reg_1;
end assign data_rd_reg = data_rd_reg_1;
//----------------------------
assign test_1 = wr_reg;
assign test_2 = data_sram_wr[]; endmodule
仿真后复合读写时序。
为了检测sram是否读写成功,则可以让FPGA来来写数据,用单片机来读取数据,然后在线验证是否读取的数据是否正确:
程序打包上传,链接地址为:http://i.cnblogs.com/Files.aspx
SRAM的读写操作的更多相关文章
- 如何减小SRAM读写操作时的串扰
静态存储器SRAM是一款不需要刷新电路即能保存它内部存储数据的存储器.在SRAM 存储阵列的设计中,经常会出现串扰问题发生.那么要如何减小如何减小SRAM读写操作时的串扰,以及提高SRAM的可靠性呢, ...
- 10.异步SRAM的FPGA读写操作
异步SRAM:正如其名,不是与特定的时钟信号同步运行,而是根据输入信号的状态运行的.因为没有信号表明读取时已确定了有效数据,也没有信号表明写入时已接收到数据,所以,需要获取制造商的数据手册,根据时序图 ...
- c语言文件读写操作总结
C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...
- [转]Android - 文件读写操作 总结
转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...
- App.Config详解及读写操作
App.Config详解及读写操作 App.Config详解 应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而 ...
- 使用Python对Excel表格进行简单的读写操作(xlrd/xlwt)
算是一个小技巧吧,只是进行一些简单的读写操作.让人不爽的是xlrd和xlwt是相对独立的,两个模块的对象不能通用,读写无法连贯操作,只能单独读.单独写,尚不知道如何解决. #①xlrd(读) #cod ...
- io流对文件读写操作
public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedRead ...
- PHP文件读写操作之文件写入代码
在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...
- INI 文件的读写操作
在C#中对INI文件进行读写操作,在此要引入using System.Runtime.InteropServices; 命名空间,具体方法如下: #region 变量 private static r ...
随机推荐
- 批处理:echo的用法
批处理:echo的用法 若要用 echo 命令显示一条命令,可用下述语法: echo [message] 参数 ON|OFF 指定是否允许命令的回显.若要显示当前的 ECHO 的设置,可使用不带 ...
- CodeForces 703B(容斥定理)
题目链接:http://codeforces.com/contest/703/problem/B 解题思路: 第一次写 先求出每个点到其他点的价值,并将其记录 dp[i][j]=1(i<j),然 ...
- hdu 1205 吃糖果
思路: 仔细想想,想要不重复吃一种糖果, 把所有糖果吃完,只要所有糖果的和,减去最多的糖果+1>=最多糖果的数量即可不重复吃完. #include <stdio.h> int mai ...
- 织梦DedeCms调用全站相关文章方法
织梦DedeCms 有个标签可以调用相关文章,通过下面的修改可以调用全站的相关文章,文章页内显示相关文章内容,可以提高关键词密度,还是挺不错的. 模板调用代码 <div> < ...
- mysql 自连接
SELECT语句中的自连接. 到目前为止,我们连接的都是两张不同的表,那么能不能对一张表进行自我连接呢?答案是肯定的. 有没有必要对一张表进行自我连接呢?答案也是肯定的. 表的别名: 一张表可以自我连 ...
- struts2 + ajax + json的结合使用,实例讲解
struts2用response怎么将json值返回到页面javascript解析,这里介绍一个struts2与json整合后包的用法. 1.准备工作 ①ajax使用Jquery:jquery-1.4 ...
- WPF 复制和粘贴
/// <summary> /// 复制或剪切文件到剪切板 /// </summary> /// <param name="files">文件路 ...
- ES+Hbase对接方案概述
方案背景 Hbase的索引方案有很多,越来越多的人开始选择ES+Hbase的方案,其实该方案并没有想象中那么完美,ES并发低,同时查询速度相对Hbase也慢很多,那为什么会选择他呢,它的写入比较快,如 ...
- win7 电脑能上网,但是下面的图标显示红叉的解决方法
win7 电脑能上网,但是下面的图标显示红叉的解决方法 任务管理器里面结束explorer.exe进程,然后,点击文件,新建任务,输入explorer回车看看
- 键盘上各键对应的ASCII码与扫描码
键盘上各键对应的ASCII码与扫描码 vbKeyLButton 0x1 鼠标左键vbKeyRButton 0x2 鼠标右键vbKeyCancel 0x3 CANCEL 键vbKeyMButton 0x ...