实验一实用计数器的VHDL设计一.实验目的熟悉quartusII的VHDL文本设计流程全过程,学习计数器的设计,仿真,进一步了解异步的概念。二.实验原理实用的D触发器除含有时钟端CLK外,还含有异步清零端CLR和时钟使能端ENA。这里的异步并非时序逻辑的异步,而是指独立于时钟控制的复位控制端,在任何时候,只要CLR=’1’,此时D触发器的输出端即可清零,与时钟信号无关。三.程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLK,RST,EN,LOAD:INSTD_LOGIC;DATA:INSTD_LOGIC_VECTOR(3DOWNTO0);DOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCNT10;ARCHITECTUREBEHAVOFCNT10ISBEGINPROCESS(CLK,RST,EN,LOAD)VARIABLEQ:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='0'THENQ:=(OTHERS=>'0');ELSIFCLK'EVENTANDCLK='1'THENIFEN='1'THENIF(LOAD='0')THENQ:=DATA;ELSEIFQ<9THENQ:=Q+1;ELSEQ:=(OTHERS=>'0');ENDIF;ENDIF;ENDIF;ENDIF;IFQ="1001"THENCOUT<='1';ELSECOUT<='0';ENDIF;DOUT<=Q;ENDPROCESS;ENDBEHAV;四.程序分析该程序的进程语句中含有两个独立的IF语句。第一个IF语句是非完整性条件语句,因而将产生计数器时序电路;第二个IF语句产生一个纯组合逻辑的多路选择器。五.RTL电路图六.工作时序图通过对上图的观察可知:(1)当计数器使能EN为高电平时允许计数;RST低电平时计数器被清零。(2)图中出现的加载信号LOAD由于是同步加载控制信号,其第一个负脉冲恰好在CLK的上升沿处,故将5加载于计数器,此后由5到9,出现了第一个进位脉冲。由于LOAD第二个负脉冲未在CLK上升沿处,故没有发生加载操作,而第3,第4个负脉冲都出现了加载操作,这是因为它们都处于CLK上升沿处。实验二LPM计数器模块使用方法一.实验目的熟悉调用quartusII中的LPM计数器,掌握流程的设置以及时序仿真。二.实验原理掌握LPM计数器的调用方法,流程的测试,同类宏模块的一般使用方法及不同特性的仿真测试方法。三.设计过程(1)LMP_COUNTER计数器模块文本调用(2)生成的计数器文件LIBRARYieee;USEieee.std_logic_1164.all;LIBRARYlpm;USElpm.all;ENTITYCNT4BISPORT(aclr:INSTD_LOGIC;clk_en:INSTD_LOGIC;clock:INSTD_LOGIC;data:INSTD_LOGIC_VECTOR(3DOWNTO0);sload:INSTD_LOGIC;updown:INSTD_LOGIC;cout:OUTSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDCNT4B;ARCHITECTURESYNOFcnt4bISSIGNALsub_wire0:STD_LOGIC;SIGNALsub_wire1:STD_LOGIC_VECTOR(3DOWNTO0);COMPONENTlpm_counterGENERIC(lpm_direction:STRING;lpm_modulus:NATURAL;lpm_port_updown:STRING;lpm_type:STRING;lpm_width:NATURAL);PORT(sload:INSTD_LOGIC;clk_en:INSTD_LOGIC;aclr:INSTD_LOGIC;clock:INSTD_LOGIC;cout:OUTSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);data:INSTD_LOGIC_VECTOR(3DOWNTO0);updown:INSTD_LOGIC);ENDCOMPONENT;BEGINcout<=sub_wire0;q<=sub_wire1(3DOWNTO0);lpm_counter_component:lpm_counterGENERICMAP(lpm_direction=>"UNUSED",lpm_modulus=>12,lpm_port_updown=>"PORT_USED",lpm_type=>"LPM_COUNTER",lpm_width=>4)PORTMAP(sload=>sload,clk_en=>clk_en,aclr=>aclr,clock=>clock,data=>data,updown=>updown,cout=>sub_wire0,q=>sub_wire1);ENDSYN;四.时序仿真五.原理图输入设计实验三基于LPM的流水线乘法累加器设计一.实验目的熟悉调用quartusII中的LPM计数器,掌握流程的设置以及时序仿真。通过一个八位流水线乘法累加器的实例介绍顶层原理图工程,VHDL文本描述和宏功能块为原理图元件的输入和设计方法。二.实验原理通过TOOLS中的MegaWizardPlug-InManager命令分别生成LPM加法器模块,乘法模块及寄存器模块。最后有序的将他们连接在一起构成八位乘法累加器顶层文件。三.设计过程(1)LPM加法器模块设置调用(2)LPM乘法器模块设置调用(3)各模块的symbolADD16BMULT8BFF8B四.8位乘法累加器顶层设计五.乘法累加器的时序仿真由上述波形可知:在clk的第四个上升沿后才得到第一个计算数据,之前都是0,这就是流水线结构的计算结果。第四个上升...