第6章参数可设置LPM宏功能块应用EDAEDA技术实用教程参数可设置LPM宏功能块应用LPM(Libraryofparameterizedmodules):参数可设置模块库参数可设置模块使用方法:LPM在mega-lpm库中,可通过图形或HDL模块形式调用,设置或修改参数即可。模块功能、参数含义、使用方法可在帮助文件中查阅:helpMegafunctions/LPMAltera提供的宏功能模块与LPM函数:算术组件组合组件I/O组件存储器编译器存储组件6.1LPM模块的原理图方式调用LPM_COUNTERLPM_ROMLPM_COUNTER模块参数含义和设置:data[]:置入计数器的并行数据输入;clock:上升沿触发计数时钟输入。clk_en:高电平使能所有同步操作输入信号;updown:计数器加减控制输入。cin:最低进位输入;aclr:异步清0输入。aset:异步置位输入;q[]:计数输出;sload:在clk的上升沿同步并行数据加载输入;cout:计数进位或借位输出。LPM_WIDTH:计数器位宽;cnt_en:计数使能控制,6.1.1基于LPM_COUNTER的数控分频器设计数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比图6-1数控分频器电路原理图计数器计满1111时,由cout发出进位信号给并行加载控制信号sload,使4位并行数据d[3..0]被加载到计数器中,此后计数器在d[3..0]基础上进行加/减计数.加法计数:分频比R=“1111”-d[3..0]+1CLK每进入R个脉冲,cout发出一个进位信号减法计数:分频比R=d[3..0]+1参数设置数控分频器工作波形4位加法计数:分频比R=“1111”-d[3..0]+1或R=2n-d+1d[3..0]=12,R=4LPM模块产生毛刺,使输出产生错误4位加法计数:分频比R=“1111”-d[3..0]+1或R=2n-d+1d[3..0]=12,R=4修改电路:延时图6-3用LPM_ROM设计的4位乘法器原理图6.1.2基于LPM_ROM的4位乘法器设计参数设置图6-4LPM_ROM参数设置窗口ROM中配置数据(初始化数据)文件方法:(1)用文本编辑器编辑mif文件NEW\TEXTEDITORFILE\文件关键词:WIDTH:设置ROM数据宽度DEPTH:设置ROM数据深度(数据的数量)ADDRESS_RADIX:地址的表达格式DATA_RADIX:数据的表达格式地址/数据表以CONTENTBEGIN开始,以END结束;地址/数据表达方法:47:28冒号左边为ROM地址值,冒号右边为此地址中放置的数据文件编辑好,后以.mif为后缀保存文件设定LPM—FILE的路径指向该文件名LPM_ROM中作为乘法表的数据文件rom_data.mifWIDTH=8;DEPTH=256;ADDRESS_RADIX=HEX;DATA_RADIX=HEX;CONTENTBEGIN00:00;01:00;02:00;03:00;04:00;05:00;06:00;07:00;08:00;09:00;10:00;11:01;12:02;13:03;14:04;15:05;16:06;17:07;18:08;19:09;20:00;21:02;22:04;23:06;24:08;25:10;26:12;27:14;28:16;29:18;30:00;31:03;32:06;33:09;34:12;35:15;36:18;37:21;38:24;39:27;40:00;41:04;42:08;43:12;44:16;45:20;46:24;47:28;48:32;49:36;50:00;51:05;52:10;53:15;54:20;55:25;56:30;57:35;58:40;59:45;60:00;61:06;62:12;63:18;64:24;65:30;66:36;67:42;68:48;69:54;70:00;71:07;72:14;73:21;74:28;75:35;76:42;77:49;78:56;79:63;80:00;81:08;82:16;83:24;84:32;85:40;86:48;87:56;88:64;89:72;90:00;91:09;92:18;93:27;94:36;95:45;96:54;97:63;98:72;99:81;END;(2)用初始化存储器编辑窗口编辑.mif完成电路设计后,打开仿真器窗口simulator,选择Initialize菜单中InitializeMemery选项,在此窗口中完成地址/数据的编辑。然后按ExportFile将文件以.mif为后缀保存。图6-6在InitializeMemory窗口中编辑乘法表地址/数据图6-5LPM_ROM构成的乘法器仿真波形LPM模块的VHDL文本方式调用方法:将LPM中的某一宏功能块作为以VHDL表达的设计项目中的一个元件,可利用MAX+plusII中内带的LPM块处理器,根据项目需要对其参数作适当设置,由此生成一个特定的LPMVHDL文本表述,最后利用元件例化语句,在顶层设计中调用该模块,从而优化设计。6.2LPM模块的VHDL文本方式调用LPM模块可作为低层设计元件,用HDL文本方式调用。在MAX+plusII中可调用LPM的HDL语言有AHDL、VHDL、VerilogHDL。图6-7生成或修改一个定制的LPM模块6.2.1编辑定制LPM_RAM模块fileMegaWizardPlug-InManager图6-8用VHDL定制LPM_RAM,文件名:RAM2.vhd算术LPM模块DSP宏LPM模块门电路LPM模块存储器LPM模块图6-9选择RAM2数据位宽为8,地址线宽为9(29=512个字节)选择RAM数据位宽度选择RAM地址线位宽图6-10RAM2配置文件与结构设置对FPGA初化数据文件配置:均为0/放置初化数据文件RAM构建设置为:使用逻辑宏单元LCs/嵌入式阵列块EAB。选后者,不打勾图6-11选择在读请求信号有效后数据输出完成定制:生成文件、路径图6-12双口RAMX6.2.2双口RAM定制双口RAM定制方法同RAM2,自动产生的文本文件如例6.2.2RAM1数据位宽为8地址线宽为9【例6.2.2】--自动生成代码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;ARCHITECTURESYNOFRAM1ISSIGNALsub_wire0:STD_LOGIC_VECTOR(7DOWNTO0);COMPONENTlpm_ram_dq--LPM元件GENERIC(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;图6-13双口RAM的仿真波形图6-14波形发生器电路系统结构图1.正弦信号发生器结构6.2.3正弦信号发生器设计与LPMROM定制工作原理:计数器通过外来控制信号和高速时钟信号向波形数据ROM发出地址信号,输出波形频率由发出的地址信号速度决定,波形数据ROM中存有发生器的波形数据,当接受来自FPGA的地址信号后,从数据线输出相应波形数据,D/A转化器负责将ROM输出的数据转换成模拟信号,经滤波器后输出。2.正弦信号波形数据文件建立【例6.2.3.1】LPM_ROM中作为正弦波形数据文件sin_data.mifWIDTH=8;--数据位宽DEPTH=64;--地址线位宽6位(2^6字节)ADDRESS_RADIX=HEX;--16进制表示DATA_RADIX=DEC;--10进制表示CONTENTBEGIN00:255;01:254;02:252;03:249;04:245;05:239;06:233;07:225;08:217;09:207;0A:197;0B:186;0C:174;0D:162;0E:150;0F:137;10:124;11:112;12:99;13:87;14:75;15:64;16:53;17:43;18:34;19:26;1A:19;1B:13;1C:8;1D:4;1E:1;1F:0;20:0;21:1;22:4;23:8;24:13;25:19;26:26;27:34;28:43;29:53;2A:64;2B:75;2C:87;2D:99;2E:112;2F:124;30:137;31:150;32:162;33:174;34:186;35:197;36:207;37:217;38:225;39:233;3A:239;3B:245;3C:249;3D:252;3E:254;3F:255;END;定制LPMROM文件3.LPMROM定制选择ROM参数加入初始化文件仿真波形【例6.2.3.2】--SINDATA--自动生成代码LIBRARYieee;USEieee.std_logic_1164.all;ENTITYSINDATAISPORT(address:INSTD_LOGIC_VECTOR(5DOWNTO0);inclock:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDSINDATA;ARCHITECTURESYNOFSINDATAISSIGNALsub_wire0:STD_LOGIC_VECTOR(7DOWNTO0);COMPONENTlpm_romGENERIC(lpm_width:NATURAL;lpm_widthad:NATURAL;lpm_address_control:STRING;lpm_outdata:STRING;lpm_file:STRING);接上页PORT(address:INSTD_LOGIC_VECTOR(5DOWNTO0);inclock:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDCOMPONENT;BEGINq=sub_wire0(7DOWNT