您好,欢迎访问三七文档
EDA实验报告基于FPGA技术实现62256Sram芯片的读写控制及校验器的QuartusII程序设计指导教师:学号姓名:实验小组成员:EDA实验实验报告~1~一、实验目的及程序设计性能要求:如右图所示,为62256芯片关键图,管脚功能介绍如下:A0–A14地址总线(Address)D0/D7输入/输出口(Input/output)CS端口选择(Chipselect)WE输入始能(Writeenable)OE输出始能(Outputenable)VCC电源始能(Powersupply)VSS接地(Ground)性能要求:进行芯片进行工作室,CS,OE端口应置低电平。进行写操作时,WE端口信号应为负脉冲,进行读操作时WE端口应置高电平。所需设计的控制校验功能如下:正确输出62256芯片所需的使能端信号。在进行校验工作时,正确的控制读写控制端口WE的电平状态,并顺利输入与输出地址信号及数据信号,并进行实时校验。校验的具体要求是,共分为两步:第一,向62256芯片中输入地址与数据信号,其中奇数地址输入55,偶数地址输入AA。直到向所有内存(32KB)中写入数据后,进行读操作。此时将读入的数据与芯片内实时运算的,内存中应该有的数值进行比较,若值相同则输出为1,否则输出为0。第二步基本与第一步相同,只需改变奇地址输入为AA,偶地址输入为55。EDA实验实验报告~2~二、程序设计部分1.设计方案框图:2.程序状态转移图:3.程序流程图:Idlewriting_beginwriting_endread_beginread_end校验结果控制地址SRAM62256存储器校验电路复位控制数据时钟信号Addr=2fhAddr=2fh/DoutAddr2fhAddr2fhEDA实验实验报告~3~wr负脉冲addr=addr+1奇地址data_reg=AA偶地址data_reg=55wr=1addr=addr+1奇地址data_reg=AA偶地址data_reg=55addr2fhaddr2fhdata=data_reg验证正确dout=1验证错误dout=0结束YYYNwr负脉冲addr=addr+1奇地址data_reg=55偶地址data_reg=AAwr=1addr=addr+1奇地址data_reg=55偶地址data_reg=AAaddr2fhaddr2fhdata=data_reg验证正确dout=1验证错误dout=0结束YYYNNNNNN初始化检验步数Quan=0YEDA实验实验报告~4~4.VerilogHDL程序源代码:modulewyw(clk,addr,wr,ce,oe,data,dout,areset,data_reg,realaddr);inout[7:0]data;inputareset;inputclk;outputwr,oe,ce;output[14:0]addr;outputdout;output[7:0]data_reg;reg[14:0]addr;output[14:0]realaddr;reg[14:0]realaddr;wire[7:0]data;wirece=0;wireoe=0;regwr;regdout;parameterIdle=3'h0,Write_begin=3'h1,Write_end=3'h2,Read_begin=3'h3,Read_end=3'h4;regqiuyu;regquan;reg[2:0]STATE;reg[7:0]data_reg;//程序输入输出端口及状态定义assigndata=wr?data_reg:8'hzz;//定义双向数据端口data的值always@(posedgearesetorposedgeclk)//时钟上升沿激励及异步复位beginif(areset)//异步复位设置beginwr=1'b0;data_reg=8'h00;addr=15'b0;dout=1'b0;STATE=Idle;endelseEDA实验实验报告~5~begincase(STATE)//非复位情况下程序运行,状态判断Idle://第一状态Idle的定义beginwr=1;addr=15'b0;realaddr=15'b0;data_reg=8'h00;STATE=Write_begin;dout=1'b0;qiuyu=1'b0;quan=~quan;//校验步数设定,1,2循环endWrite_begin://第二状态Write_begin的定义beginaddr=addr+15'h1;//地址自加一realaddr=addr-15'h1;//由于波形显示时直接显示地址自加一结果,因此加入一个真实地址的显示wr=~wr;//We输出负脉冲的设定if(quan)//校验步数判断,并输入不同数据beginqiuyu=addr%2;//奇偶地址判断,并存入不同数据if(qiuyu)begindata_reg=8'h55;endelsebegindata_reg=8'h0AA;endSTATE=Write_end;endelsebeginqiuyu=addr%2;if(qiuyu)begindata_reg=8'h0AA;endelsebegindata_reg=8'h55;EDA实验实验报告~6~endSTATE=Write_end;endendWrite_end://第三状态Write_end定义beginwr=~wr;//We输出负脉冲的设定if(addr==15'h02f)//内存地址满后转入读校验beginSTATE=Read_begin;addr=15'h0;qiuyu=1'b0;endelseSTATE=Write_begin;//内存地址未满时继续写数据endRead_begin://第三状态Read_begin定义begin//与写入时同理,校验器内部data_reg寄存器产生正确的地址数据addr=addr+15'h1;realaddr=addr-15'h1;wr=0;if(quan)beginqiuyu=addr%2;if(qiuyu)begindata_reg=8'h55;STATE=Read_end;endelsebegindata_reg=8'h0AA;STATE=Read_end;endendelsebeginqiuyu=addr%2;if(qiuyu)EDA实验实验报告~7~begindata_reg=8'h0AA;STATE=Read_end;endelsebegindata_reg=8'h55;STATE=Read_end;endendendRead_end://第五状态Read_end定义beginif(addr==15'h02f)//校验完毕后转入第一状态执行下一步读写校验beginSTATE=Idle;addr=15'h0;endelsebeginif(data==data_reg)//从内存中读入数据,与寄存器内此地址的正确数据进行比较begindout=1'b1;//比较相同,结果输出1STATE=Read_begin;endelsebegindout=1'b0;//比较不同,结果输出0STATE=Read_begin;endendenddefault:STATE=Idle;endcaseendendendmoduleEDA实验实验报告~8~三、程序仿真及验证。1.功能波形仿真EDA实验实验报告~9~EDA实验实验报告~10~2.时序波形仿真4.RTL级电路模拟EDA实验实验报告~11~四、实验心得及总结:本实验逻辑复杂,程序编写难度大,要求实现功能多。本实验编写时曾参考网上的类似程序流程,但程序整体经过大幅修改及优化。在程序编写过程中,曾出现如下问题:1.逻辑关系及变量过于复杂使得程序编写陷入困境。2.关于阻塞赋值与非阻塞赋值的方式选择失误,曾长时间引起程序仿真时结果错误。3.网上下载的程序有先天不足级错误。以上问题的解决方法:1.从最外层逻辑关系入手,一步一步细化逻辑关系以及程序运行流程,通过形象的流程图及状态转移图来使程序结构清晰简化,大大加快编程进度。2.认真阅读了书本上关于阻塞赋值与非阻塞赋值的相关内容,并结合仿真时的直观错误,对每一个变量进行筛选,最后通过修改地址赋值语句为阻塞赋值,成功解决错误。3.借鉴有用的流程部分,舍弃大部分代码部分,从新设计优化程序。本次实验中,由于方法得当,加上本学期对《现代电子技术》的认真学习,加上组员的配合,本次试验得以相当高效与成功的完成。(全实验室第一个完成)同时,我在本次实验中学习到了很多仅仅从书本上学不到的东西,比如实验时的各种技巧与策略,对书本上知识的灵活应用,及在真实实验中必需的严谨精神,相信在今后的学习生活中会帮助我取得更大的进步。同时也非常感谢王凯老师对我组的认真指导与提出的意见及建议。2011年12月21日
本文标题:基于FPGA技术实现62256Sram芯片的读写控制及校验器的QuartusII程序设计
链接地址:https://www.777doc.com/doc-2569568 .html