1、EDA实验报告EDA实验报告实验一:组合电路的设计Mux21a实体Mux21a结构体实验内容是对2选1多路选择器VHDL设计,它的程序如下:ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d = a AND (NOT S) ; e = b AND s ; y = d OR e ; END ARCHITECTURE one ;Mux21a仿真波形图以上便是2选1多路选择
2、器的VHDL完整描述,即可以看成一个元件mux21a。mux21a实体是描述对应的逻辑图或者器件图,图中a和b分别是两个数据输入端的端口名,s为通道选择控制信号输入端的端口名,y为输出端的端口名。Mux21a结构体可以看成是元件的内部电路图。最后是对仿真得出的mux21a仿真波形图。实验二:时序电路的设计实验内容D触发器的VHDL语言描述,它的程序如下:LIBRARY IEEE ;D触发器USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_L
3、OGIC ); END ; ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q 0); -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN=1THEN -检测是否允许计算(同步使能) IF CQI0); -大于9,计数值清零 END IF; END IF; END IF; IF CQI=9 THEN COUT=1; -计数大于9,输出进位信号 ELSE COUT=0; END IF; CQ LED7S LED7S LED7
4、S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S LED7S NULL ; END CASE ; END PROCESS ; END ; 7段译码器仿真波形实验七:数控分频器的设计实验目的:学习数控分频器的设计、分析和测试方法实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。当输入输入不同的CLK时钟频率和预置值D时得不同FOUT电平它的程序如下:LI
5、BRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF IS PORT ( CLK : IN STD_LOGIC; D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT : OUT STD_LOGIC );END;ARCHITECTURE one OF DVF IS SIGNAL FULL : STD_LOGIC;BEGIN P_REG: PROCESS(CLK) VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0); B
6、EGIN IF CLKEVENT AND CLK = 1 THEN IF CNT8 = 11111111 THEN CNT8 := D; -当CNT8计数计满时,D被同步预置给计数器CNT8 FULL = 1; -同时使溢出标志信号FULL输出为高电平 ELSE CNT8 := CNT8 + 1; -否则继续作加1计数 FULL = 0; -且输出溢出标志信号FULL为低电平 END IF; END IF; END PROCESS P_REG ; P_DIV: PROCESS(FULL) VARIABLE CNT2 : STD_LOGIC; BEGIN IF FULLEVENT AND FUL
7、L = 1 THEN CNT2 := NOT CNT2; - -如果溢出标志信号FULL为高电平,D触发器输出取反 IF CNT2 = 1 THEN FOUT = 1; ELSE FOUT = 0; END IF; END IF; END PROCESS P_DIV ;END;上例的时序波形如下:当给出不同输入值D时,FOUT输出不同频率(CLK周期=50ns)数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,本设计中的数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。实验八:正弦信号发生器设计实验目的:进
8、一步熟悉Max+plusII及其LPM_ROM与FPGA硬件资源的使用方法。实验内容:设计一个正弦波发生器,并进行仿真测试,给出仿真波形。实验原理图:时序波形仿真图:信号发生器结构包含两个部分:ROM的地址信号发生器,由6位计数器担任;一个正弦数据ROM,由LPM_ROM模块构成。实验九:8位十六进制频率计设计实验目的:学习较复杂的数字系统设计方法。实验内容:设计一个8位十六进制频率计,并进行仿真测试,给出仿真波形。LIBRARY IEEE; -测频控制USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ftct
9、rl IS PORT ( CLKK : IN STD_LOGIC; - 1Hz CNT_EN,RST_CNT,LOAD : OUT STD_LOGIC); END ftctrl;ARCHITECTURE behav OF ftctrl IS SIGNAL DIV2CLK : STD_LOGIC;BEGIN PROCESS( CLKK ) BEGIN IF CLKKEVENT AND CLKK = 1 THEN DIV2CLK = NOT DIV2CLK; END IF; END PROCESS; PROCESS (CLKK, DIV2CLK) BEGIN IF CLKK=0 AND Div2C
10、LK=0 THEN RST_CNT = 1; ELSE RST_CNT = 0; END IF; END PROCESS; LOAD = NOT DIV2CLK ; CNT_EN = DIV2CLK;END behav;LIBRARY IEEE; -32位锁存器USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B IS PORT ( LK : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );END REG32B;ARCH
11、ITECTURE behav OF REG32B ISBEGIN PROCESS(LK, DIN) BEGIN IF LKEVENT AND LK = 1 THEN DOUT = DIN; -时钟到来时,锁存输入数据 END IF; END PROCESS;END behav;LIBRARY IEEE; -32位计数器USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter32b IS PORT ( ENABL,CLR,FIN : IN STD_LOGIC; DOUT: OUT STD_LOGIC_VE
12、CTOR(31 DOWNTO 0); END counter32b;ARCHITECTURE behav OF counter32b IS SIGNAL CQI : STD_LOGIC_VECTOR(31 DOWNTO 0);BEGIN PROCESS( ENABL,CLR,FIN ) BEGIN IF CLR=1 THEN CQI 0); -清零 ELSIF FINEVENT AND FIN=1 THEN IF ENABL=1 THEN CQI= CQI + 1; END IF; END IF; END PROCESS; DOUT clk1hz,cnt_en=tsten1, rst_cnt=
13、clr_cnt1,load=load1); u2:reg32b port map(lk=load1,din=dto1,dout=dout); u3:counter32b port map(fin=fsin,clr=clr_cnt1, enabl=tsten1,dout=dt01);end struc;时序波形仿真图:实验十:序列检测器设计实验目的:用状态机实现序列检测器的设计,了解一般状态机的设计与应用。实验原理:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则相同,则输出1,否则输出0。实验内容:描述
14、的电路完成对序列数“11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。它的程序如下:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SCHK IS PORT( DIN,CLK,CLR : IN STD_LOGIC ; -串行输入数据位/工作时钟/复位信号 AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -检测结果输出END SCHK;ARCHITECTURE behav OF SCHK IS SIGNAL Q : INTEGER R
15、ANGE 0 TO 8 ; SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0); -8位待检测预置数BEGIN D = 11100101 ; -8位待检测预置数 PROCESS( CLK, CLR ) BEGIN IF CLR = 1 THEN Q IF DIN = D(7) THEN Q = 1 ; ELSE Q IF DIN = D(6) THEN Q = 2 ; ELSE Q IF DIN = D(5) THEN Q = 3 ; ELSE Q IF DIN = D(4) THEN Q = 4 ; ELSE Q IF DIN = D(3) THEN Q = 5
16、; ELSE Q IF DIN = D(2) THEN Q = 6 ; ELSE Q IF DIN = D(1) THEN Q = 7 ; ELSE Q IF DIN = D(0) THEN Q = 8 ; ELSE Q Q = 0 ; END CASE ; END IF ; END PROCESS ; PROCESS( Q ) -检测结果判断输出 BEGIN IF Q = 8 THEN AB = 1010 ; -序列数检测正确,输出 A ELSE AB = 1011 ; -序列数检测错误,输出 B END IF ; END PROCESS ;END behav ;时序波形仿真图:实验分析:当
17、序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出A,否则输出B。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。本实验描述的电路完成对序列数11100101的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。实验十一:乐曲硬件演奏电路设计实验目的:学习设计硬件乐曲演奏电路。实验内容:主系统由三个模块组成,由顶层设计文件,其内部有三个功能
18、模块:tonetaba.vhd、notetabs.vhd和speakera.vhd。实验程序:硬件演奏电路顶层设计:library ieee;use ieee.std_logic_1164.all;entity songer is port( clk12mhz : in std_logic; clk8hz : in std_logic; code1 : out std_logic_vector (3 downto 0); high1 : out std_logic; spkout : out std_logic );end;architecture one of songer is component notetabs port( clk : in std_logic; toneindex : out std_logic_vector (3 downto 0) ); end component; component tonetaba port ( index : in std_logic_vector (3 downto 0); code : out std_logic_vector (3 downto 0);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1