• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

SRAM测试试验设计Verilog代码VIVADO ARTIX-7开发板

5小时前
92
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-24110Q94S2508.docx

共1个文件

名称:SRAM测试试验设计Verilog代码VIVADO? ARTIX-7开发板

软件:VIVADO

语言:Verilog

代码功能:

SRAM测试试验

测试SRAM接口,本试验用来试验SRAM的读写功能,通过在线调试工具观察读写的数据,并进行读写数据比对。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在ARTIX-7开发板验证,ARTIX-7开发板如下,其他开发板可以修改管脚适配:

ARTIX-7开发板.png

设计文档:

1简介

本试验用来试验SRAM的读写功能,通过在线调试工具观察读写的数据,并进行读写数据比对。

2实验原理

静态数据存储器SRAM是存储数据比较重要的器件,它由锁存器阵列构成。SRAM外部接口包括片选端口,读允许端口,写允许端口,地址端口,数据输出输入端口。在读写数据时,SRAM根据地址信号,经由译码电路选择读写的相对应的存储单元。我们开发板选择的SRAM型号是IS61WV12816EDBLL,可存储128K的数据,其管脚定下如下:

其时序如下图所示:

3程序设计

rst ? ? ? ?, //软复位信号

clk ? ? ?, //时钟信号

sram_ab ? ?, //sram的地址信号

sram_db ? ?, //sram双向数据信号

sram_wr ? ?, //sram写使能信号

sram_rd ? ?, ?//sram读使能信号

error, ? ? ?//用来数据比对,如果比对结果错误,则将error赋1,

task_start , //Start ? ?Testing ---LED1

task_finish

);

input ? ? ? ? ? rst ? ? ? ;

input ? ? ? ? ? clk ? ? ;

output [16:0] ? sram_ab ? ;

inout ?[15:0] ? sram_db ? ;

output ? ? ? ? ?sram_wr ? ;

output ? ? ? ? ?sram_rd ? ;

output error;

output ? ? ? ? ? task_start ;

output ? ? ? ? ?task_finish;

//ports

wire ? ? ? ? ? ?rst ? ? ? ;

wire ? ? ? ? ? ?clk ? ? ;

parameter ? ? IDLE ? ? = 3'D0,

WRITE_1 ?= 3'D1,

WRITE_2 ?= 3'D2,

READ_1 ? = 3'D3,

READ_2 ? = 3'D4;

assign ?sram_db = sram_rd ? sram_db_reg:'hz;

//计数用来产生25Mhz的时钟

reg [3:0] clk_count;

always @(posedge clk or negedge rst)

if(!rst)

begin

clk_count<=4'd0;

end

else

begin

clk_count<=clk_count+4'b1;

end

assign clk25m = clk_count[2];

//sram读写state machine

always @ (STATE or sram_ab or error or task_start)

begin

case(STATE)

IDLE ? ?: if(task_start)

NEXT = WRITE_1;

else

NEXT = IDLE ? ;

WRITE_1 : NEXT = WRITE_2;

WRITE_2 : if( sram_ab >= 17'h1ffff)

NEXT = READ_1;

else

NEXT = WRITE_1;

READ_1 ?: NEXT = READ_2;

READ_2 ?: if( ?sram_ab >= 17'h1ffff)//error ||

NEXT = IDLE;

else

NEXT = READ_1;

default : NEXT = IDLE ;

endcase

end

//registe the state

always @ (posedge clk25m or negedge rst)

if(!rst)

STATE <= IDLE;

else

STATE <= NEXT;

4实验现象

将目录“... at7_prj_07at7_prjat7_prj.runsimpl_1”文件夹下的 at7_prj.bit 文件下载到开发板上,则sram开始自动读写操作,通过在线调试工具可以看到sram_rd信号为低电平时,表明FPGA在读SRAM数据,读出来的数据sram_db_dly与count_dly进行比对,数据一致,则说明sram读写正常,error信号一直是低电平。

部分代码展示:

`timescale?1ns?/?1ps
//////////////////////////////////////////////////////////////////////////////////
//?Company:?
//?Engineer:?
//?
//?Create?Date:?2019/04/13?17:54:08
//?Design?Name:?
//?Module?Name:?at7_prj
//?Project?Name:?
//?Target?Devices:?
//?Tool?Versions:?
//?Description:?
//?
//?Dependencies:?
//?
//?Revision:
//?Revision?0.01?-?File?Created
//?Additional?Comments:
//?
//////////////////////////////////////////////////////////////////////////////////
module?at7_prj(
???????????????rst????????,?//软复位信号
?????????????????clk??????,?//时钟信号
?????????????????????????????
?????????????????sram_ab????,?//sram的地址信号
?????????????????sram_db????,?//sram双向数据信号
?????????????????sram_wr????,?//sram写使能信号
?????????????????sram_rd????,??//sram读使能信号
?????????????????error,??????//用来数据比对,如果比对结果错误,则将error赋1,
?????????????????task_start?,?//Start????Testing?---LED1?
?????????????????task_finish
????????????????);?
input???????????rst???????;?
input???????????clk?????;?
?
output?[16:0]???sram_ab???;?
inout??[15:0]???sram_db???;?
output??????????sram_wr???;?
output??????????sram_rd???;?
output?error;?
output???????????task_start?;?
output??????????task_finish;?????????
//ports?
wire????????????rst???????;???
wire????????????clk?????;???
??????????????????????????????
(*mark_debug="TRUE"*)reg????[16:0]???sram_ab???;???
???wire???[15:0]???sram_db???;??
(*mark_debug="TRUE"*)?reg????[15:0]???sram_db_dly?;
(*mark_debug="TRUE"*)?reg?????????????sram_wr???;???
(*mark_debug="TRUE"*)reg?????????????sram_rd???;???
??????????????????????????????
reg?????????????task_start?;??
reg?????????????task_finish;??
//internal?signals?
reg?????????????clk_2;?
(*mark_debug="TRUE"*)wire????????????clk25m;?
reg??[2:0]??????STATE,NEXT;?
(*mark_debug="TRUE"*)?reg?????????????error?????;?
(*mark_debug="TRUE"*)reg??[15:0]?????sram_db_reg;?
reg??[15:0]?????count??????;
(*mark_debug="TRUE"*)reg??[15:0]?????count_dly??????;?
//parameters?
parameter?????IDLE?????=?3'D0,?
??????????????WRITE_1??=?3'D1,?
??????????????WRITE_2??=?3'D2,?
??????????????READ_1???=?3'D3,?
??????????????READ_2???=?3'D4;?
??????????????
assign??sram_db?=?sram_rd???sram_db_reg:'hz;?
//计数用来产生25Mhz的时钟
reg?[3:0]?clk_count;?
always?@(posedge?clk?or?negedge?rst)?
???if(!rst)?
???????begin?
???????????clk_count<=4'd0;?
???????end

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1332

  • 2-24110Q94S2508.docx
    下载

相关推荐