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