第3章QuartusII集成开发工具基于QuartusII进行EDA设计开发的流程3.1QuartusII原理图设计-支持面向对象技术1.为本项工程设计建立文件夹2.输入设计项目和存盘3.将设计项目设置成可调用的元件4.设计全加器顶层文件5.将设计项目设置成工程和时序仿真参考QuarutsII简单入门.doc1.为本项工程设计建立文件夹如下图所示在F盘,建立以自己学号命令的文件夹如200913000000,并在其中建立命为EX1的文件夹,用来保存实验1的文件。2.输入设计项目和存盘元件输入对话框3.将设计项目设置成可调用的元件将所需元件全部调入原理图编辑窗并连接好4.设计全加器顶层文件连接好的全加器原理图f_adder.bdf5.将设计项目设置成工程和时序仿真f_adder.bdf工程设置窗5.将设计项目设置成工程和时序仿真加入本工程所有文件5.将设计项目设置成工程和时序仿真全加器工程f_adder的仿真波形3.4基于宏功能模块的设计QuartusⅡ自带的宏模块库主要有三个:Megafunction库-参数化模块库Maxplus2库--P93Primitives(原语)库—P94缓冲器buffer逻辑门logic其他功能other引脚pin存储单元storage3.4.7其他模块-Maxplus2库Maxplus2库主要由74系列数字集成电路组成,包括时序电路宏模块和运算电路宏模块两大类,其中时序电路宏模块包括触发器、锁存器、计数器、分频器、多路复用器和移位寄存器,运算电路宏模块包括逻辑预算模块、加法器、减法器、乘法器、绝对值运算器、数值比较器、编译码器和奇偶校验器。对于这些小规模的集成电路,在数字电路课程中有详细的介绍。他们的调入方法和Megafunction库中的宏模块是一样的,只是端口和参数无法设置。计数器74161设计举例模10计数器仿真结果模10计数器仿真波形mod12计数器BCD码计数器与二进制码计数器的仿真波形两个74160一个74161设计的创建、编辑;在QuartusII中,用户的每个独立设计都对应一个项目,每个项目可包含一个或多个设计文件,其中有一个是顶层文件,顶层文件的名字必须与项目名相同。编译器是对项目中的顶层文件进行编译。项目还管理所有中间文件,所有项目的中间文件的文件名相同,仅后缀名(扩展名)不同。*对于每个新的项目最好建立一个单独的子文件夹,其名字不能为中文,只能为英文、数字或字符!*不要在C、D盘中保存设计,一般放在其他盘如E盘!*更不能与QuartusII的关键字同名!打开层次管理窗口,可看到当前项目的层次关系;*最好以学号如AY0306103命名文件夹;sy01sy02sy03sy04sy05sy0638yimamod13bcd保存设计输入文件为*.bdf实验一3-8译码器演示--单模块、原理图输入设计实验一3-8译码器演示设计的编译(编译信息利用、错误定位、器件指定、rpt);编译器是对项目进行编译,因此,若先建设计文件,必须要将此文件指定才能对其进行编译。将当前文件指定为项目,同File/Project/SetprojecttoCurrentFile;编译前要选择时序仿真或功能仿真从菜单“Processing”中选择“TimingSNFExtractor”时序仿真,或功能仿真“FunctionalSNFExtrctor”项,(编译器仅由三项构成:CompilerNetlistExtractor;DatabaseBulider;FunctionalSNFExtrctor)。设计仿真(信号脚输入、endtime、group等);*时钟周期ClockPeriod=T2,菜单Option/snaptoGrid修改;*结束时间endtime=T1,菜单File/endtime修改;T1nT2*保存设计文件为*.vwf,与输入文件*.bdf同名,仅后缀名(扩展名)不同floorplan使用(改变信号的引脚)。3-8译码器(Decoder)-P178【例7.24】74138的Verilog描述modulettl74138(a,y,g1,g2a,g2b);input[2:0]a;inputg1,g2a,g2b;outputreg[7:0]y;always@(*)beginif(g1&~g2a&~g2b)//只有当g1、g2a、g2b为100时,译码器使能begincase(a)3'b000:y=8'b11111110;//译码输出3'b001:y=8'b11111101;3'b010:y=8'b11111011;3'b011:y=8'b11110111;3'b100:y=8'b11101111;3'b101:y=8'b11011111;3'b110:y=8'b10111111;3'b111:y=8'b01111111;default:y=8'b11111111;endcaseendelsey=8'b11111111;endendmodule3:8DECODERABG1CG2ANG2BNY0NY1NY2NY3NY4NY5NY6NY7N74138inst3-8译码器(Decoder)Maxplus2库—74138Primitives(原语)库缓冲器buffer逻辑门logic--nand其他功能other—gnd,vcc引脚pin—input,output存储单元storage模100BCD码计数器参考P148例6.15-模100BCD码计数器//***************百分秒计数进程,每计满100,cn2产生一个进位*********always@(posedgecn1orposedgeclr)beginif(clr)begin{sh,sl}=8'h00;cn2=0;end//异步复位elseif(sl==9)//低位是否为9beginsl=0;if(sh==9)beginsh=0;cn2=1;endelsesh=sh+1;endelsebeginsl=sl+1;cn2=0;endend//assigncout=(qout==8‘d59)?1:0;三目运算符3.4.1~3.4.6Megafunction库Megafunction库是Altera提供的参数化模块库。LPM(LibraryofParametrizedModules)从功能上看,可以把Megafunction库中的元器件分为:算术运算模块(arithmetic)-mult、divide、counter;逻辑门模块(gates)-constant储存模块(storage)-rom、latchIO模块(I/O)-altpll算数运算模块库(arithmetic)参数化乘法器lpm_mult宏功能模块的基本参数表3.4.1乘法器模块--lpm_mult(1)调用lpm_mult(2)lpm_mult参数设置输入输出位宽设置乘法器类型设置(3)编译仿真8位有符号乘法器电路功能仿真波形3.4.3计数器模块-P83计数器输出端口宽度和计数方向设置计数器模和控制端口设置更多控制端口设置模24方向可控计数器电路lpm_counter计数器功能仿真波形1、lpm_counter:参数化计数器P831)输入信号选择data[]:数据输入,用于预置数;*clock:输入时钟;*clk_en:时钟输入使能;*cin:进位输入*cnt_en:计数器使能;updown:控制计数的方向,加(1)减(0)法选择;*aclr:异步清零;aset:异步置数(1或AVALUE);aload:异步预置(data[]);sclr:同步清零;sload:同步预置(data[]);sset:同步置数(1或SVALUE)。1、lpm_counter:参数化计数器2)输出信号选择*cout:进位输出;*q[]:计数值输出;eq[15..0]:计数值译码输出:q[]=0eq[0]=1;q[]=1eq[1]=1;…q[]=15eq[15]=1;1、lpm_counter:参数化计数器3)参数设置ParameterTypeRequiredDescription*LPM_WIDTHIntegerYesq[]宽度*LPM_DIRECTIONStringNoUP/DOWN*LPM_MODULUSIntegerNo选择模数LPM_AVALUEIntegerNo异步置数初值LPM_SVALUEIntegerNo同步置数初值参数化计数器的使用方法一:直接调用•直接从\max2lib\mega_lpm调用lpm_counter熟悉后方法一好用些(选择余地大);•选择输入输出脚和参数选择参数化计数器的使用方法二:使用MegaWizard要点:•打开File/MegaWizard;•选择创建新的定制宏单元;•选择计数器以及输出文件的语言(选AHDL、VHDL和VerilogHDL中的一个);•按提示输入各种参数。•初学时用方法二简单些;lpm_counter的使用初步VCCclk_50MINPUTclk_100HzOUTPUTupcountermodulus500000clockcoutmycounterinst分频器:1)输入信号选择clock:输入时钟;updown:控制计数的方向,加(1)减(0)法选择;2)输出信号选择cout:进位输出;*q[19:0]:计数值输出;3)参数设置LPM_WIDTH-20LPM_MODULUS-19'd500000-19'b1111010000100100000LPM_DIRECTION-UP分频器的Verilog描述:modulefdiv12(reset,clkin,clkout,qout);inputreset,clkin;outputregclkout;outputreg[4:0]qout;always@(posedgeclkin)beginif(!reset)beginclkout=0;qout=0;endelsebeginif(qout==5)beginqout=0;clkout=~clkout;endelseqout=qout+5'b00001;endendendmodule3.将设计项目设置成可调用的元件–P64将所需元件全部调入原理图编辑窗并连接好lpm_counter的使用初步1、编译后生成功能模块:菜单File/Update-CreateSymbolFilesforCurrentFile类似74-seriesmacrofunctions2、保存为**.bsf与顶层文件*.bdf不同名!文件夹的名字不能与QuartusII的关键字同名!打开层次管理窗口,可看到当前项目的层次关系;顶层paobiao.bdfmod100.bsfmod60.bsfmod60.bsf底层mod100.bdfmod60.bdfmod60.bdf(*需要把相关的文件考到项目文件夹里,并加入到工程项目里)CreateDefaultSymbol实验二数字跑表-P231设计任务和要求:1、整个数字跑表实质是一个计数器,由百分秒计数器(模100计数器),秒钟计数器和分钟计数器(模60计数器)级联而成;2、上述三个计数器均为BCD码计数器,可调用参数化宏单元(LPM-counter)来实现,注意进位信号的设计和使用!3、清零为异步清零(aclr),暂停功能可用计数器的时钟使能(clk-en)来实现;maxplus2\mega_lpm:参数化宏单元4、设计输入采用层次化(多模块)设计,所有模块全部用原理图输入设计方法。(二)、数字跑表的设计1、功能描述•设计一数字跑表,可以显示1/100秒、秒和分钟;•具有暂停健,当按下该键时,停止计数,放开该键继续计数;•具有清零键,按下时跑表清零,从头计数;数字跑表CLKCLRPAUSE百分秒秒分数字跑表输入输出示意图(设计顶