第6章 原理图设计及IP调用_第1页
第6章 原理图设计及IP调用_第2页
第6章 原理图设计及IP调用_第3页
第6章 原理图设计及IP调用_第4页
第6章 原理图设计及IP调用_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章存储器设计第6章存储器设计21ROM设计RAM设计FIFO设计STACK设计346.1ROM设计

ROM是只读存储器(Read-OnlyMemory)的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,并且资料不会因为电源关闭而消失。【例6.1-1】ROM的VerilogHDL实现。modulemy_rom(clock,rden,address,q); input clock; //系统时钟 inputrden; //读使能信号,高有效 input[4:0]address;//地址信号 outputreg[7:0]q=8'h00;//数据信号 reg[7:0]rom[0:31];//rom存储器6.1ROM设计 initialbegin $readmemh("my_rom.txt",rom); end//用my_rom.txt文件对rom初始化 always@(posedgeclock) begin if(rden)q<=rom[address]; elseq<=q; endendmodule6.2RAM设计

RAM是随机存取存储器(RandomAccessMemory)的简称,它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。按照存储单元的工作原理,RAM又分为静态随机存储器(StaticRAM,SRAM)和动态随机存储器(DynamicRAM,DRAM)。【例6.2-1】RAM的VerilogHDL实现。modulemy_ram(clock,wren,address,data, q); input clock; //系统时钟 inputwren; //写使能信号,高有效 input[4:0]address; //地址信号6.2RAM设计

input[7:0]data; //写数据 outputreg[7:0]q=8'h00;//读数据信号 reg[7:0]ram[0:31];//ram存储器 //读操作 always@(posedgeclock) begin//注意因为要在写期间读出新数据,必须将新数据data提前送出

if(wren)q<=data;

elseq<=ram[address];

end//写操作

always@(posedgeclock)

begin if(wren)ram[address]<=data;

endendmodule6.3FIFO设计

FIFO(FirstInFirstOut)即先进先出存储器,其特点是最先写进的数据最先从出口读出。其基本工作方式非常类似地铁入口的排队栅栏,需要检票的乘客顺次通过入口的隔离门进入栅栏排队,然后依次从出口检票离开,整个过程中最先进入的乘客最先离开,所以顾名思义先进先出存储器。【例6.3-1】FIFO的VerilogHDL实现。modulemy_fifo(clock, aclr,data,rdreq,wrreq,//input q,empty,full,usedw//output); input clock;//系统时钟 inputaclr; //系统复位,异步高有效 input [7:0]data; //写数据 input rdreq; //读请求 input wrreq; //写请求 outputempty; //空标志信号 outputfull; //满标志信号 outputreg[7:0]q; //读出数据 outputreg[4:0]usedw; //可用资源量 reg[7:0]fifo_ram[0:31]; //存储器矩阵6.3FIFO设计

reg[4:0]rdaddr; //读地址指针 reg[4:0]wraddr; //写地址指针//FIFO读操作 always@(posedgeclock,posedgeaclr)begin if(aclr)begin q<=8'h00; end elseif(rdreq==1'b1&&empty==1'b0)begin q<=fifo_ram[rdaddr];//读出对应地址数据 end elseif(rdreq&&wrreq)begin q<=fifo_ram[rdaddr];//读出对应地址数据 end end6.3FIFO设计//FIFO写操作 always@(posedgeclock,posedgeaclr)begin if(aclr)begin

; end elseif(wrreq==1'b1&&full==1'b0)begin fifo_ram[wraddr]<=data;//将数据写入相应地址 end elseif(rdreq&&wrreq)begin fifo_ram[wraddr]<=data;//将数据写入相应地址 end end//指针操作 always@(posedgeclock,posedgeaclr)begin if(aclr)begin rdaddr<=4'd0; wraddr<=4'd0; end elsebegin6.3FIFO设计 wraddr<=((wrreq&&!full)||(wrreq&&rdreq))?wraddr+1:wraddr; rdaddr<=((rdreq&&!empty)||(wrreq&&rdreq))?rdaddr+1:rdaddr; end end//计算存储器资源 always@(posedgeclock,posedgeaclr)begin if(aclr)begin usedw<=5'd0; end elsebegin case({wrreq,rdreq}) 2'b00:usedw<=usedw; 2'b01:usedw<=(usedw==5'd0)?5'b00000:usedw-1; 2'b10:usedw<=(usedw==5'd31)?5'b11111:usedw+1; 2'b11:usedw<=usedw; default:usedw<=usedw; endcase end end6.3FIFO设计//空标志 assignempty=(usedw==5'd0)?1'b1:1'b0;//满标志 assignfull=(usedw==5'd31)?1'b1:1'b0;endmodule6.4STACK设计

栈(STACK)是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈的结构类似桶堆积物品,先堆进来的压在底下,随后一件一件往上堆。取走时,只能从上面一件一件取。【例6.4-1】STACK的VerilogHDL实现。modulestack(clk,rst_n,rden,wren,wr_data,//input rd_data,empty,full,error//output ); input clk; //系统时钟 inputrst_n; //系统复位信号 input rden; //读使能信号 input wren; //写使能信号 input[7:0]wr_data; //写数据 outputreg[7:0]rd_data;//读数据 outputempty; //栈空信号 outputfull; //栈满信号 outputregerror; //错误告警6.4STACK设计 reg[7:0]regs[0:31];//宽8深32存储器 reg[4:0]addr;//栈地址指针寄存器 regfilled;//当前地址指针指向存储器是否填满,1表示有数据,0表示无数据 assignempty=(addr==5'd0&&filled==1'b0)?1'b1:1'b0; assignfull=(addr==5'd31&&filled==1'b1)?1'b1:1'b0; always@(posedgeclk,negedgerst_n) begin if(!rst_n)begin addr<=5'd0; filled<=1'b0; rd_data<=8'h00; error<=1'b0; end elsebegin case({wren,rden}) 2'b00:; 2'b01:begin if(empty) error<=1'b1;//全空读告警 else

6.4STACK设计 if(addr==5'd0&&filled==1'b1) begin rd_data<=regs[addr];//最后一个数据读出地址不减1 addr<=addr; filled<=1'b0; error<=1'b0; endelse begin rd_data<=regs[addr]; addr<=addr-1'b1; filled<=1'b1; error<=1'b0;

end end 2'b10:begin if(full) error<=1'b1;//全满写告警 else if(empty)begin regs[addr]<=wr_data;//栈空时写入地址不加1 rd_data<=wr_data;addr<=addr; filled<=1'b1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论