1、=Q+1; ELSE Q: END IF; END IF; END IF; END IF; IF Q=1001 THEN COUT=; ELSE COUT DOUT =Q; END PROCESS;END BEHAV;四 程序分析该程序的进程语句中含有两个独立的IF语句。第一个IF语句是非完整性条件语句,因而将产生计数器时序电路;第二个IF语句产生一个纯组合逻辑的多路选择器。五 RTL电路图六 工作时序图通过对上图的观察可知:(1) 当计数器使能EN为高电平时允许计数;RST低电平时计数器被清零。(2) 图中出现的加载信号LOAD由于是同步加载控制信号,其第一个负脉冲恰好在CLK的上升沿处,故
2、将5加载于计数器,此后由5到9,出现了第一个进位脉冲。由于LOAD第二个负脉冲未在CLK上升沿处,故没有发生加载操作,而第3,第4个负脉冲都出现了加载操作,这是因为它们都处于CLK上升沿处。实验二 LPM计数器模块使用方法熟悉调用quartusII中的LPM计数器,掌握流程的设置以及时序仿真。掌握LPM计数器的调用方法,流程的测试,同类宏模块的一般使用方法及不同特性的仿真测试方法。三 设计过程(1)LMP_COUNTER计数器模块文本调用(2)生成的计数器文件LIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY lpm;USE lpm.all;ENT
3、ITY CNT4B IS PORT ( aclr : IN STD_LOGIC ; clk_en : clock : data : IN STD_LOGIC_VECTOR (3 DOWNTO 0); sload : updown : cout : OUT STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END CNT4B;ARCHITECTURE SYN OF cnt4b IS SIGNAL sub_wire0 : STD_LOGIC ; SIGNAL sub_wire1 : STD_LOGIC_VECTOR (3 DOWNTO 0);
4、COMPONENT lpm_counter GENERIC ( lpm_direction : STRING; lpm_modulus : NATURAL; lpm_port_updown : lpm_type : lpm_width : NATURAL PORT ( sload : clk_en : aclr : clock : cout : q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); data : updown : IN STD_LOGIC END COMPONENT; cout = sub_wire0; q UNUSED, lpm_modulus = 1
5、2, lpm_port_updown =PORT_USED lpm_type =LPM_COUNTER lpm_width = 4 ) PORT MAP ( sload = sload, clk_en = clk_en, aclr = aclr, clock = clock, data = data, updown = updown, cout = sub_wire0, q = sub_wire1END SYN;四 时序仿真五 原理图输入设计实验三 基于LPM的流水线乘法累加器设计一实验目的通过一个八位流水线乘法累加器的实例介绍顶层原理图工程,VHDL文本描述和宏功能块为原理图元件的输入和设计
6、方法。二实验原理通过TOOLS中的MegaWizard Plug- In Manager命令分别生成LPM加法器模块,乘法模块及寄存器模块。最后有序的将他们连接在一起构成八位乘法累加器顶层文件。三设计过程(1)LPM加法器模块设置调用(2)LPM乘法器模块设置调用(3)各模块的symbolADD16BMULT8BFF8B四8位乘法累加器顶层设计五乘法累加器的时序仿真由上述波形可知:在clk的第四个上升沿后才得到第一个计算数据,之前都是0,这就是流水线结构的计算结果。第四个上升沿得到结果为,而第五个上升沿后得到结果为,第六个上升沿后得到的结果为。实验四 全加器熟悉quartusII的原理图输入设
7、计方法,学会进行底层元件设计和层次化设计的主要步骤。1位全加器可以用两个半加器及一个或门链接而成,而一个半加器是由两个输入端,两个输出端,一个与门及一个异或门。三 实验内容(1)半加器原理图(2)半加器仿真波形(3)半加器元件(4)全加器原理图(5)全加器时序仿真波形实验五 异步清零和同步加载与时钟使能的计数器熟悉quartusII的VHDL文本设计流程全过程,学习计数器的设计,仿真和硬件测试,掌握原理图与文本混合设计方法(1) 程序分析 -4位预置数 -计数值输出-计数进位输出-复位低电平时,计数寄存器清0 THEN -测试时钟上升沿 THEN -计数使能高电平,允许计数 ELSE -预置控
8、制低电平,允许加载-计数小于9,继续累加-否则计数清0-当计数位9时,进位输出1-否则进位输出0-计数寄存器的值输出端口四 编译仿真波形(图一)(图二)五 原理图示意图六原理图时序仿真七分析结果选用CycloneIII系列高速FPGA出现的时序仿真图(如图一),没有出现毛刺现象,而选择Cyclone系列FPGA就会出现毛刺现象(如图二)实验六 4选1多路选择器设计进一步熟悉QuartusII的VHDL文本设计流程,组合电路的设计仿真和测试。数据选择器在实际中得到了广泛的应用,尤其是在通信中为了利用多路信号中的一路,可以采用数据选择器进行选择再对该路信号加以利用。从多路输入信号中选择其中一路进行
9、输出的电路称为数据选择器。或:在地址信号控制下,从多路输入信息中选择其中的某一路信息作为输出的电路称为数据选择器。数据选择器又叫多路选择器,简称MUX。(1)RTL图(2)Symbol图四仿真波形五分析结果当s=0时y=a1;当s=1时当s=2时y=a2;当s=3时y=a3;六程序ENTITY mux21a IS PORT(a,b,c,d : s :IN STD_LOGIC_VECTOR(1 DOWNTO 0); y :OUT STD_LOGIC);END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGIN y=a WHEN s=00 b WHEN
10、 S=01 c WHEN s=10 d;END ARCHITECTURE one;实验六 VHDL有限状态机设计1 进一步熟悉和掌握Quartus软件的各模块功能的使用方法。2加深对VHDL语言的了解,熟悉VHDL语言的语法特点深刻了解Quartus软件仿真中出现的各种问题并能加以解决。3学习使用和查看状态转换图本设计说明部分中使用type语句定义新的数据类型。状态变量(如现态和次态)应定义为信号,便于信息传递,并将状态变量的数据类型定义为含有既定状态元素的新定义的数据类型。其中新定义的数据类型名是FSM_ST,其元素类型分别为s0,s1,s2,s3,s4,使其恰好表述状态机的五个状态。在此设
11、计模块说明部分,定义了五个文字参数符号,代表五个状态。对于此程序,如果异步清零信号reset有过一个复位脉冲,当前状态即可被异步设置为S0;与此同时,启动组合进程,“执行”条件分支语句。三设计结果及分析(1)生成symbol(2)时序波形图通过分析波形,进一步了解状态机的工作特性。需要注意,reset信号是低电平有效的,而clk是上升沿有效的,所以reset有效脉冲后的第一个时钟脉冲是第二个clk脉冲,第三个脉冲的上升沿后,现态c_st即进入状态S1.同时输出8,即“1000”。(3)状态图四程序ENTITY FSM_EXP ISPORT (CLK,reset : state_inputs :
12、IN STD_LOGIC_VECTOR(0 TO 1); comb_outputs :OUT INTEGER RANGE 0 TO 15);END FSM_EXP;ARCHITECTURE behav OF FSM_EXP ISTYPE FSM_ST IS (s0,s1,s2,s3,s4);SIGNAL c_st,next_state:FSM_ST;REG:PROCESS (reset,clk) BEGIN IF reset= THEN c_st=s0; ELSIF CLK= AND CLKEVENT THEN c_st comb_outputs =5; IF state_inputs = T
13、HEN next_state =S0; ELSE next_state =8;=S2; WHEN s2=12;=S3; WHEN s3=14;11=S4; WHEN s4=9;next_state next_state END case;END PROCESS COM;END behav;实验八 ADC采样控制设计及多进程结构状态机1、进一步熟悉和掌握Quartus软件的各模块功能的使用方法。2、加深对VHDL语言的了解,熟悉VHDL语言的语法特点,深刻了解Quartus软件仿真中出现的各种问题并能加以解决。3、学习使用和查看状态转换图本设计中的组合过程可以分为两个组合进程:一个负责状态译码和
14、状态转换,另一个负责对外控制信号输出,从而构成一个三进程结构的有限状态机,其功能与前者一样,但程序结构更加清晰,功能分工更加明确。Moore型状态机的输出仅为当前状态的函数,这类状态机在你输入发生变化时还必须等待时钟的到来,时钟使状态发生变化时才导致输出的变化,所以比Mealy机要多等待一个时钟周期。三 设计程序见附录四 设计结果及分析上图显示了一个完整的采样周期。复位信号后即进入状态s0,第二个时钟上升沿后,状态机进入状态s1(即cs=s1),由start、ale发出启动采样和地址选通的控制信号。之后,eoc由高电平变为低电平,0809的8位数据输出端呈现高阻态“ZZ”。在状态s2,等待cl
15、k数个时钟周期之后,eoc变为高电平,表示转述结束。五附录library ieee;use ieee.std_logic_1164.all;entity ADC0809 is port(d:in std_logic_vector(7 downto 0); clk,rst:in std_logic; eoc : ale :out std_logic; start,oe: adda,lock_t: q :out std_logic_vector(7 downto 0);end ADC0809;architecture behav of ADC0809 istype states is(s0,s1,
16、s2,s3,s4); signal cs,next_state:states: signal regl :std_logic_vector(7 downto 0); signal lock :std_logic;begin adda lock_tale startoelocknext_state=s2; when s2= if (eoc=) then next_state=s3; else next_state=s4; when s4= when others= end case;end process com;reg:process(clk,rst) begin if rst= then c
17、s elsif clkevent and clk=end process reg;latch1:process(lock) begin if lock= and lockevent then regl=d;end process latch1; q=regl;end behav;实验九 序列检测器之状态机设计3、学习使用和查看状态转换图。状态机用于序列检测器的设计比之其他方法更能显示其优越性。序列检测器可用于一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,
18、这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。三设计程序(见附录)四设计过程及结果分析(1)产生的symbol五 附录ENTITY SCHK IS PORT (DIN,CLK,RST: SOUT:END SCHK;ARCHITECTURE behav OF SCHK ISTYPE states IS(s0,s1,s2,s3,s4,s5,s6,s7,s8);SIGNAL ST,NST: states :PROCESS(ST,DIN) BEGINCASE ST IS IF DIN= THEN NST ELSE NST=s6; WHEN s6=s7; EN
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1