当前位置:文档之家› 基于FPGA技术实现62256 Sram芯片的读写控制及校验器的Quartus II程序设计

基于FPGA技术实现62256 Sram芯片的读写控制及校验器的Quartus II程序设计

基于FPGA技术实现62256 Sram芯片的读写控制及校验器的Quartus II程序设计
基于FPGA技术实现62256 Sram芯片的读写控制及校验器的Quartus II程序设计

EDA实验报告

基于FPGA技术实现62256 Sram芯片的读写控制及校

验器的Quartus II程序设计

指导教师:

学号姓名:

实验小组成员:

一、实验目的及程序设计性能要求:

如右图所示,为62256芯片关键图,管脚功能介绍如下:

A0 – A14 地址总线(Address)

D0 /D7 输入/输出口(Input/output)

CS 端口选择(Chip select)

WE 输入始能(Write enable)

OE 输出始能(Output enable)

VCC 电源始能(Power supply)

VSS 接地(Ground)

性能要求:进行芯片进行工作室,CS,OE端口应置低电平。进行写操作时,WE端口信号应为负脉冲,进行读操作时WE端口应置高电平。

所需设计的控制校验功能如下:正确输出62256芯片所需的使能端信号。在进行校验工作时,正确的控制读写控制端口WE的电平状态,并顺利输入与输出地址信号及数据信号,并进行实时校验。校验的具体要求是,共分为两步:第一,向62256芯片中输入地址与数据信号,其中奇数地址输入55,偶数地址输入AA。直到向所有内存(32KB)中写入数据后,进行读操作。此时将读入的数据与芯片内实时运算的,内存中应该有的数值进行比较,若值相同则输出为1,否则输出为0。

第二步基本与第一步相同,只需改变奇地址输入为AA,偶地址输入为55。

二、程序设计部分

1.设计方案框图:

2.程序状态转移图:

3.程序流程图:

4.Verilog HDL程序源代码:

module wyw(clk, addr , wr, ce, oe, data, dout,areset,data_reg, realaddr);

inout[7:0] data;

input areset;

input clk;

output wr,oe,ce;

output[14:0] addr;

output dout;

output [7:0] data_reg;

reg[14:0] addr;

output[14:0] realaddr;

reg[14:0] realaddr;

wire[7:0] data;

wire ce=0;

wire oe=0;

reg wr;

reg dout;

parameter Idle=3'h0,

Write_begin=3'h1,

Write_end =3'h2,

Read_begin =3'h3,

Read_end =3'h4;

reg qiuyu;

reg quan;

reg[2:0] STATE;

reg[7:0] data_reg; //程序输入输出端口及状态定义assign data=wr?data_reg:8'hzz; //定义双向数据端口data的值always @(posedge areset or posedge clk ) //时钟上升沿激励及异步复位begin

if (areset) //异步复位设置

begin

wr<=1'b0;

data_reg<=8'h00;

addr<=15'b0;

dout<=1'b0;

STATE<=Idle;

end

else

begin

case(STATE) //非复位情况下程序运行,状态判断Idle: //第一状态Idle的定义

begin

wr<=1;

addr<=15'b0;

realaddr<=15'b0;

data_reg<=8'h00;

STATE=Write_begin;

dout<=1'b0;

qiuyu<=1'b0;

quan<=~quan; //校验步数设定,1,2循环

end

Write_begin: //第二状态Write_begin的定义

begin

addr=addr+15'h1; //地址自加一

realaddr=addr-15'h1; //由于波形显示时直接显示地址自

加一结果,因此加入一个真实地址

的显示

wr<=~wr; //We输出负脉冲的设定

if (quan) //校验步数判断,并输入不同数据

begin

qiuyu<=addr%2; //奇偶地址判断,并存入不同数据

if(qiuyu)

begin

data_reg<=8'h55;

end

else

begin

data_reg<=8'h0AA;

end

STATE=Write_end;

end

else

begin

qiuyu<=addr%2;

if(qiuyu)

begin

data_reg<=8'h0AA;

end

else

begin

data_reg<=8'h55;

end

STATE=Write_end;

end

end

Write_end: //第三状态Write_end定义begin

wr<=~wr; //We输出负脉冲的设定

if(addr==15'h02f) //内存地址满后转入读校验begin

STATE=Read_begin;

addr<=15'h0;

qiuyu<=1'b0;

end

else

STATE=Write_begin; //内存地址未满时继续写数据end

Read_begin: //第三状态Read_begin定义begin //与写入时同理,校验器内部

data_reg寄存器产生正确的地

址数据

addr=addr+15'h1;

realaddr=addr-15'h1;

wr=0;

if (quan)

begin

qiuyu<=addr%2;

if(qiuyu)

begin

data_reg<=8'h55;

STATE=Read_end;

end

else

begin

data_reg<=8'h0AA;

STATE=Read_end;

end

end

else

begin

qiuyu<=addr%2;

if(qiuyu)

begin

data_reg<=8'h0AA;

STATE=Read_end;

end

else

begin

data_reg<=8'h55;

STATE=Read_end;

end

end

end

Read_end : //第五状态Read_end定义

begin

if(addr==15'h02f) //校验完毕后转入第一状态执

行下一步读写校验

begin

STATE=Idle;

addr<=15'h0;

end

else

begin

if(data==data_reg) //从内存中读入数据,与寄存器

内此地址的正确数据进行比较

begin

dout<=1'b1; //比较相同,结果输出1

STATE=Read_begin;

end

else

begin

dout<=1'b0; //比较不同,结果输出0

STATE=Read_begin;

end

end

end

default: STATE=Idle;

endcase

end

end

endmodule

三、程序仿真及验证。1.功能波形仿真

2.时序波形仿真

4.RTL级电路模拟

四、实验心得及总结:

本实验逻辑复杂,程序编写难度大,要求实现功能多。本实验编写时曾参考网上的类似程序流程,但程序整体经过大幅修改及优化。在程序编写过程中,曾出现如下问题:

1.逻辑关系及变量过于复杂使得程序编写陷入困境。

2.关于阻塞赋值与非阻塞赋值的方式选择失误,曾长时间引起程序仿

真时结果错误。

3.网上下载的程序有先天不足级错误。

以上问题的解决方法:

1.从最外层逻辑关系入手,一步一步细化逻辑关系以及程序运行流程,

通过形象的流程图及状态转移图来使程序结构清晰简化,大大加快

编程进度。

2.认真阅读了书本上关于阻塞赋值与非阻塞赋值的相关内容,并结合

仿真时的直观错误,对每一个变量进行筛选,最后通过修改地址赋

值语句为阻塞赋值,成功解决错误。

3.借鉴有用的流程部分,舍弃大部分代码部分,从新设计优化程序。

本次实验中,由于方法得当,加上本学期对《现代电子技术》的认真学习,加上组员的配合,本次试验得以相当高效与成功的完成。(全实验室第一个完成)同时,我在本次实验中学习到了很多仅仅从书本上学不到的东西,比如实验时的各种技巧与策略,对书本上知识的灵活应用,及在真实实验中必需的严谨精神,相信在今后的学习生活中会帮助我取得更大的进步。同时也非常感谢王凯老师对我组的认真指导与提出的意见及建议。

2011年12月21日

相关主题
文本预览
相关文档 最新文档