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 ...
随机推荐
- IF IE
1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->2. <!--[if IE]> 所有的IE可识别 & ...
- servlet运行流程
servlet运行流程 (2013-06-19 19:16:43) 转载▼ 首先Servlet被部署到Web容器中,当客户端发送调用这个Servlet的请求到达Web容器时,Web容器会先判 ...
- linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...
- stm32f系列单片机startup_stm32fxxx.s文件说明(转)
* 文件名 : startup_stm32f10x_hd.s;* 库版本 : V3.5.0;* 说明: 此文件为STM32F10x高密度设 ...
- yum只下载而不安装软件包?
yum本身自带了两个选项, 用来只下载要安装的rpm包, 而并不实际安装包: yum --downloadonly --downloaddir=/root/Desktop rpm-name1 rpm ...
- Git+Gradle+Eclipse构建项目
步骤: 1.安装好Git.解压gradle-2.14.zip免安装文件: 2.用SourceTree将GitLab上的项目拉取下来: 3.打开eclipse->Import->Gradle ...
- Action的动态调用方法
Action执行的时候并不一定要执行execute方法,我们可以指定Action执行哪个方法: 1. 方法一(通过methed属性指定执行方法): 可以在配置文件中配置Action的时候用method ...
- HTML快速入门4
七.表单 1. 概述 建立交互式的站点,需要使用 HTML 表单,它可以让用户提供信息,并对此作出处理.可以建立类似 复选框.单选按钮及文本框的控件. 掌握表单的使用对 Active Server P ...
- python4delphi 设置syspath
详细看demo25的代码 These techniques are demonstrated in Demo25 in the examples folder of your Python for D ...
- HTML前端--各种小案例
掬一捧清水,放逐在江河,融入流逝的岁月,将心洗净; 捻一缕心香,遥寄在云端,在最深的红尘里重逢,将心揉碎; 望一程山水,徘徊在月下,在相思渡口苦守寒冬,将心落寞. 案例一: 隐藏扩展域,并去掉afte ...