您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > (十一)用LPM生成FIFO和双端口RAM.ppt
利用MAXPLUSII中的兆功能函数生成VHDL应用程序一、生成先入先出FIFO二、生成双口RAM一、生成先入先出FIFO1、编辑LPM_FIFO设计实体2、LPM_FIFO定制文件仿真测试图8-4生成或修改一个定制的巨功能块选择LPM巨功能块编辑器选择建立一个巨功能块最后按键NEXT1、编辑LPM_FIFO设计实体图8-5用VHDL定制LPM_FIFO,文件名:fifo2.vhd选择功能块类型选择建立FIFO功能块选择巨功能表达语言为VHDL在选定的目录中确定生成的功能块的文件名:fifo2.vhd图8-6选择FIFO数据位宽为8,深度为512选择FIFO宽度:8位选择FIFO深度:512个单元图8-7fifo端口设置选择含溢出标志输出含异步清零图8-8选择在读请求信号有效后数据输出选择同步工作模式图8-9选择Area优化方式选择优化方式选择使用EAB设计FIFO,去掉勾图8-10单击“Finish”后完成fifo2.vhd的定制完成fifo图形符号输入:输入数据data[7..0]写请求wrreq读请求rdreq时钟clock异步清零aclr输出:输出数据q[7..0]满信号full将编制好的输出文件设置成工程2、LPM_FIFO定制文件仿真测试打开文件原文件选目标器件【例】LIBRARYieee;USEieee.std_logic_1164.all;ENTITYfifo2ISPORT(data:INSTD_LOGIC_VECTOR(7DOWNTO0);--输入数据wrreq:INSTD_LOGIC;--写入请求rdreq:INSTD_LOGIC;--读出请求clock:INSTD_LOGIC;--工作时钟aclr:INSTD_LOGIC;--异步清0q:OUTSTD_LOGIC_VECTOR(7DOWNTO0);--数据输出full:OUTSTD_LOGIC);--溢出标志ENDfifo2;ARCHITECTURESYNOFfifo2ISSIGNALsub_wire0:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALsub_wire1:STD_LOGIC;COMPONENTlpm_fifo--调用LPM_FIFO声明GENERIC(lpm_width:NATURAL;--类属数据宽度自然数数据类型lpm_numwords:NATURAL;--类属数据深度自然数数据类型lpm_widthu:NATURAL;--类属地址宽度自然数数据类型lpm_showahead:STRING;--类属数据读出方式字符串数据类型lpm_hint:STRING);--类属优化方式字符串数据类型PORT(rdreq:INSTD_LOGIC;PORT(rdreq:INSTD_LOGIC;aclr:INSTD_LOGIC;clock:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(7DOWNTO0);wrreq:INSTD_LOGIC;data:INSTD_LOGIC_VECTOR(7DOWNTO0);full:OUTSTD_LOGIC);ENDCOMPONENT;BEGINq=sub_wire0(7DOWNTO0);full=sub_wire1;BEGINq=sub_wire0(7DOWNTO0);full=sub_wire1;lpm_fifo_component:lpm_fifoGENERICMAP(LPM_WIDTH=8,--类属映射语句,数据宽度8位LPM_NUMWORDS=512,--8位字节数512个LPM_WIDTHU=9,--地址线位宽9位LPM_SHOWAHEAD=OFF,--关闭先行数据输出开关LPM_HINT=USE_EAB=ON,MAXIMIZE_SPEED=5)--打开内部EAB,最大速度约束等级为5PORTMAP(rdreq=rdreq,aclr=aclr,clock=clock,wrreq=wrreq,data=data,q=sub_wire0,full=sub_wire1);ENDSYN;图8-11FIFO的仿真波形先入先出打开芯片地板资源编辑窗芯片地板资源编辑窗选择全屏幕显示此FIFO使用了1K30内部16个单元的EABGENERICMAP(LPM_WIDTH=8,LPM_NUMWORDS=512,LPM_SHOWAHEAD=OFF,LPM_HINT=USE_EAB=Off,MAXIMIZE_SPEED=5“)若设置不使用EAB(EAB=Off),则生成FIFO需用的资源如下图:不使用EAB时,综合后产生的提示信息:1、选择器件:EP1K30QC剩余资源不足20%;2、建议更换器件:EP1K100QC或EP1K30TC二、生成双口RAM说明:定制一个有两个端口的RAM,一个端口输入数据,另一个端口输出数据。1、双口RAM定制双口RAM定制仿真图如:1、写数据时,we=1,若地址=10B,数据=BC,则Q在clk下降沿输出BC,表示数据已经存入RAM。2、读数据时,we=0,若地址依旧为10B,则Q在clk上升沿输出BC,将刚才存入的数据读出。2、编辑LPM_RAMDQ设计实体选择LPM_RAM_DQ选择VHDL语言选择字节宽度和地址宽度:8~256让它空着双口RAM图形符号输入:输入数据data[7..0]写信号we时钟inclock地址address[7..0]输出:输出数据q[7..0]生成的源文件说明【例8-26】LIBRARYieee;USEieee.std_logic_1164.all;ENTITYRAM1ISPORT(address:INSTD_LOGIC_VECTOR(8DOWNTO0);--9位地址输入inclock:INSTD_LOGIC;--数据写入时钟we:INSTD_LOGIC;--写允许信号data:INSTD_LOGIC_VECTOR(7DOWNTO0);--8位写入数据q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位RAM数据输出ENDRAM1;ARCHITECTURESYNOFRAM1ISARCHITECTURESYNOFRAM1ISSIGNALsub_wire0:STD_LOGIC_VECTOR(7DOWNTO0);COMPONENTlpm_ram_dqGENERIC(lpm_width:NATURAL;--类属RAM数据宽度自然数数据类型lpm_widthad:NATURAL;--类属RAM地址线位宽自然数数据类型lpm_indata,lpm_address_control,lpm_outdata,lpm_hint:STRING);PORT(address:INSTD_LOGIC_VECTOR(8DOWNTO0);we,inclock:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(7DOWNTO0);data:INSTD_LOGIC_VECTOR(7DOWNTO0));ENDCOMPONENT;BEGINq=sub_wire0(7DOWNTO0);lpm_ram_dq_component:lpm_ram_dqGENERICMAP--类属映射语句(LPM_WIDTH=8,--8位数据宽度自然数数据类型LPM_WIDTHAD=9,--9位地址线宽度自然数数据类型LPM_INDATA=REGISTERED,--寄存器锁存方式写入数据,字符串数据类型LPM_ADDRESS_CONTROL=REGISTERED,--寄存器锁存方式写入地址,字符串数据类型LPM_OUTDATA=UNREGISTERED,--非寄存器锁存方式输出数据LPM_HINT=USE_EAB=ON)--允许使用FPGA中的EABPORTMAP(address=address,inclock=inclock,data=data,we=we,q=sub_wire0);ENDSYN;使用EAB的资源占用图不使用EAB时的提示信息不使用EAB的资源占用图写数据:下降沿(00H)=07H,(01H)=08H·····读数据:下降沿(00H)=07H,(01H)=08H·····
本文标题:(十一)用LPM生成FIFO和双端口RAM.ppt
链接地址:https://www.777doc.com/doc-4258444 .html