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 ...
随机推荐
- web后门排查与高效分析web日志技巧
今年一直大大小小的事情忙,很少有时间能静下心写个文章,所以最近博客更新也越来越少了,公司现在安全团队在我这边,一直在玩命的招人.下个月8号有一个互联网金融的会,4月在qcon北京站,都以嘉宾的身份去分 ...
- 每日一练(写不出心得体会了!毕竟哪有那么多心得好写。然后看github上有很多不错的题目。分享一下!)
第一题: 问题描述:写一个reverseWords函数 调用方式:console.log(reverseWords('Hello World')); 期望输出:World Hello 第二题: 问题描 ...
- Gulp, 比Grunt更好用的前端构建工具
Gulp, 比Grunt更好用的前端构建工具 本文主要从两个方面介绍Gulp:一,Gulp相对于Grunt的优势: 二,Gulp的安装和使用流程 Gulp相对于Grunt的优势 gulp.js 的作者 ...
- jQuery.isEmptyObject() 函数详解
所谓"空对象",即不包括任何可枚举(自定义)的属性.简而言之,就是该对象没有属性可以通过for...in迭代. 该函数属于全局jQuery对象. 语法 jQuery 1.4 新增该 ...
- Open Credit System
Open Credit SystemInput: Standard Input Output: Standard Output In an open credit system, the studen ...
- JVM垃圾收集策略解析
地址:http://developer.51cto.com/art/201002/184385_all.htm
- java笔记--异常详解与处理
一.异常概念 Throwable类是Java中所有错误或异常的超类. 1.只有当对象是此类(或其子类)的实例时,才能通过Java虚拟机或着Java throw语句抛出. 2.只有此类或其子类才 ...
- [Effective JavaScript 笔记] 第7条:视字符串为16位的代码单元序列
Unicode编码,基础:它为世界上所有的文字系统的每个字符单位分配一个唯一的整数,该整数介于0~1114111之间,在Unicode术语中称为代码点(code point). 和其它字符编码几乎没有 ...
- iPhone/iOS图片相关(读取、保存、绘制、其它相关)
http://blog.csdn.net/jerryvon/article/details/7526147 20:50:42 一.读取图片 1.从资源(resource)读取 UIImage* ima ...
- glut64位操作系统安装
64位win7下OpenGL的配置 - walkandthink的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/walkandthink/article/detai ...