




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电子技术综合试验实验报告班级:测控一班学号:2907101002:大帅指导老师:颖基于FPGA的数字频率计设计报告一、 系统整体设计设计要求: 1、被测输入信号:方波 2、测试频率围为:10Hz100MHz 3、量程分为三档:第一档:闸门时间为1S时,最大读数为999.999KHz 第二档:闸门时间为0.1S时,最大读数为9999.99KHz 第三档:闸门时间为0.01S时,最大读数为99999.9KHz。4、显示工作方式:a、用六位BCD七段数码管显示读数。 b、采用记忆显示方法 c、实现对高位无意义零的消隐。系统设计原理: 所谓“频率”,就是周期性信号在单位时间(1秒)变化的次数。若在一定
2、的时间间隔T计数,计得某周期性信号的重复变化次数为N,则该信号的频率可表达为:f = N / T .基于这一原理我们可以使用单位时间对被测信号进行计数的方法求得对该信号的频率测量,具体实现过程简述如下:首先,将被测信号(方波)加到闸门的输入端。由一个高稳定的石英振荡器和一系列数字分频器组成了时基信号发生器,它输出时间基准(或频率基准)信号去控制门控电路形成门控信号,门控信号的作用时间T是非常准确的(由石英振荡器决定)。门控信号控制闸门的开与闭,只有在闸门开通的时间,方波脉冲才能通过闸门成为被计数的脉冲由计数器计数。闸门开通的时间称为闸门时间,其长度等于门控信号作用时间T。比如,时间基准信号的重
3、复周期为1S,加到闸门的门控信号作用时间T亦准确地等于1S,即闸门的开通时间“闸门时间”为1S。在这一段时间,若计数器计得N=100000个数,根据公式f = N / T,那么被测频率就是100000Hz。如果计数式频率计的显示器单位为“KHz”,则显示100.000KHz,即小数点定位在第三位。不难设想,若将闸门时间设为T=0.1S,则计数值为10000,这时,显示器的小数点只要根据闸门时间T的改变也随之自动往右移动一位(自动定位),那么,显示的结果为100.00Khz。在计数式数字频率计中,通过选择不同的闸门时间,可以改变频率计的测量围和测量精度。系统单元模块划分:1)分频器,将产生用于计
4、数控制的时钟分别为1HZ,10HZ,100HZ脉冲和1KHZ的用于七段显示数码管扫描显示的扫描信号。2)闸门选择器,用于选择不同的闸门时间以与产生后续的小数点的显示位置。3)门控电路,产生用于计数的使能控制信号,清零信号以与锁存器锁存信号。4)计数器,用于对输入的待测信号进行脉冲计数,计数输出。5)锁存器,用于对计数器输出数据的锁存,便于后续译码显示电路的对数据进行记忆显示,同时避免计数器清零信号对数据产生影响。6)译码显示,用于产生使七段显示数码管的扫描数字显示,小数点显示的输出信号,同时对高位的无意义零进行消隐。二、 单元电路设计1、 分频器:该电路将产生四个不同频率的信号输出,因为电路板
5、上给出了一个48MHZ的晶振,所以我们只需要对48MHZ的信号进行适当分频即可得到我们所需的四个不同频率的信号输出,我们设计一个输入为48MHZ,有四个输出端分别为1HZ,10HZ和100HZ,1KHZ的分频器,原程序如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity fenpinqi is Port ( clk : in STD_LOGIC; clkout1 : out STD_LOGIC; clkout10 : out
6、STD_LOGIC; clkout100 : out STD_LOGIC;clkout1K : out STD_LOGIC);end fenpinqi;architecture Behavioral of fenpinqi issignalt1:integer range 1 to 24000000;signalt10:integer range 1 to 2400000;signalt100:integer range 1 to 240000;signalt1K:integer range 1 to 24000;signal c1:std_logic;signal c2:std_logic;
7、signal c3:std_logic;signal c4:std_logic;beginprocess(clk)isbegin if clk'event and clk='1' then ift1<24000000 then-对cnt1进行计数,当cnt1未计满后对其进行加1 t1<=cnt1+1; elsift1=24000000 then-cnt1计满后对其进行赋一,并且令c1进行翻转,然后将c1的值赋给clkout1 c1<=not c1;-由于48MHZ的的信号,前一半的时候c1为0,则后一半是为1,就完成了对信号进行分频,产生了1HZ的信号
8、t1<=1; end if; end if;end process;process(clk)is begin if clk'event and clk='1' then-方法同上 ift10<2400000 then t10<=cnt10+1; elsift10=2400000 then c2<=not c2;t10<=1; end if; end if;end process;process(clk)is begin if clk'event and clk='1' then-方法同上 ift100<2400
9、00 then t100<=cnt100+1; elsift100=240000 then c3<=not c3;t100<=1; end if;end if;end process;process(clk)isbegin if clk'event and clk='1' then-方法同上 ift1K<24000000 then t1K<=cnt1K+1; elsift1=24000 then c4<=not c4;t1K<=1; end if; end if;end process;clkout1<=c1;clkout
10、10<=c2;clkout100<=c3;clkout1K<=c4;end Behavioral;源文件编写成功后编译并生成图形文件符号如图:仿真文件编写如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;ENTITY tbb_vhd ISEND tbb_vhd;ARCHITECTURE behavior OF tbb_vhd IS COMPONENT fenpinqiPORT(clk : IN std_logic; clkou
11、t1 : OUT std_logic;clkout10 : OUT std_logic;clkout100 : OUT std_logic;clkout1K : OUT std_logic);END COMPONENT;SIGNAL clk : std_logic := '0'SIGNAL clkout1 : std_logic;SIGNAL clkout10 : std_logic;SIGNAL clkout100 : std_logic;SIGNAL clkout1K : std_logic;BEGINuut: fenpinqi PORT MAP(clk => clk
12、,clkout1 => clkout1,clkout10 => clkout10,clkout100 => clkout100,clkout1K => clkout1K);tb : PROCESSBEGIN clk<='0'wait for 10 ps;clk<='1'wait for 10 ps;END PROCESS;END;对该模块进行仿真结果如下:有上图可知分频器工作正常,产生的个信号也没有毛刺,结果十分理想。2、闸门选择器:在这个模块中我们有四个输出端和六个输入端,其中四个输出端中有一个是频率输出端,是通过三个闸门选
13、择开关输入和三个输入频率决定的,另外三个输出端则是用来后面的小数点控制的,而六个输入端中的三个是上面分频器的三个输出1HZ,10HZ和100HZ,另外三个是电路板上的拨动开关,用来选择闸门,控制输出。其原程序和分析如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity SELE is Port ( SE1 : in STD_LOGIC; SE10 : in STD_LOGIC; SE100 : in STD_LOGIC;F1HZ
14、 : IN STD_LOGIC; F10HZ : IN STD_LOGIC; F100HZ :IN STD_LOGIC; FREF : out STD_LOGIC; DP1 : out STD_LOGIC; DP2 : out STD_LOGIC; DP3 : out STD_LOGIC);end SELE;architecture Behavioral of SELE isbeginPROCESS(SE1,SE10,SE100) IS BEGINIF SE1='1' AND SE10='0' AND SE100='0' THENFREF<
15、=F1HZ;-当闸门控制在第一档的时候,令输出端输出1HZ输入端的输入,小数点控制dp1有效,dp2,dp3无效DP1<='0'DP2<='1'DP3<='1'END IF;IF SE1='0' AND SE10='1' AND SE100='0' THENFREF<=F10HZ;-第二档,输出为10HZ,dp2有效DP1<='1'DP2<='0'DP3<='1'END IF;IF SE1='0'
16、; AND SE10='0' AND SE100='1' THENFREF<=F100HZ;-第三档,输出为100HZ,dp3有效DP1<='1'DP2<='1'DP3<='0'END IF; END PROCESS;end Behavioral;源代码编写完成后保存并生成图形文件符号如图:仿真文件编写如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std
17、.ALL;ENTITY TTB_vhd ISEND TTB_vhd;ARCHITECTURE behavior OF TTB_vhd IS COMPONENT SELEPORT(SE1 : IN std_logic;SE10 : IN std_logic;SE100 : IN std_logic;F1HZ : IN std_logic;F10HZ : IN std_logic;F100HZ : IN std_logic; FREF : OUT std_logic;DP1 : OUT std_logic;DP2 : OUT std_logic;DP3 : OUT std_logic);END C
18、OMPONENT;SIGNAL SE1 : std_logic := '1'SIGNAL SE10 : std_logic := '0'SIGNAL SE100 : std_logic := '0'SIGNAL F1HZ : std_logic := '0'SIGNAL F10HZ : std_logic := '0'SIGNAL F100HZ : std_logic := '0'SIGNAL FREF : std_logic;SIGNAL DP1 : std_logic;SIGNAL DP2 :
19、std_logic;SIGNAL DP3 : std_logic;BEGINuut: SELE PORT MAP(SE1 => SE1,SE10 => SE10,SE100 => SE100,F1HZ => F1HZ,F10HZ => F10HZ,F100HZ => F100HZ,FREF => FREF,DP1 => DP1,DP2 => DP2,DP3 => DP3);tb : PROCESSBEGINF1HZ<='0'FREF<='0'wait for 100 ns;F1HZ<=
20、'1'FREF<='1'WAIT FOR 100 NS;END PROCESS;END;仿真结果如图:有仿真结果可知闸门选择器工作正常,能够准确输出我们所需的信号。3、门控信号:在此模块中有一个输入端和两个输出端,输入端为上面的闸门选择器输出的频率,两个输出端分别为计数器是能控制信号(锁存器控制信号),和计数器清零信号。具体源程序即分析如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity
21、CONTROLS is Port ( FREF : in STD_LOGIC; GAT : out STD_LOGIC; CLR : out STD_LOGIC);end CONTROLS;architecture Behavioral of CONTROLS isSIGNAL G1: STD_LOGIC:='0'beginPROCESS(FREF) ISBEGIN IF FREF'EVENT AND FREF='1' THEN G1<=NOT G1; -该过程对时钟信号又一次进行分频,产生出半个周期时间为1的控制信号,作为计数使能,保证了时间的准
22、确性 END IF;END PROCESS;PROCESS(FREF,G1) ISBEGIN IF FREF='0' AND G1='0' THEN CLR<='1' -该过程产生清零信号,即当使能信号为无效0同时时钟为0时,即在技术始终无效半个时钟时间后,对计数器清零 ELSE CLR<='0'-清零信号高电平有效 END IF;END PROCESS;GAT<=G1; -将G1赋给gat输出端,它是计数器的使能信号同时也是锁存器的锁存信号end Behavioral;源文件编写完成后保存编译并生成图形文件符号
23、如图:仿真文件代码如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;ENTITY TBCON_vhd ISEND TBCON_vhd;ARCHITECTURE behavior OF TBCON_vhd IS COMPONENT CONTROLSPORT(FREF : IN std_logic; GAT : OUT std_logic;CLR : OUT std_logic);END COMPONENT;SIGNAL FREF : std_lo
24、gic := '0'SIGNAL GAT : std_logic;SIGNAL CLR : std_logic;BEGINuut: CONTROLS PORT MAP(FREF => FREF,GAT => GAT,CLR => CLR);tb : PROCESSBEGINFREF<='0'WAIT FOR 100 NS;FREF<='1'WAIT FOR 100 NS;END PROCESS;END;对上面的文件进行仿真,结果如下:由上图的仿真结果可知,控制电路工作正常,输出信号稳定,很理想。同时我们也可以看出来该
25、模块对分频器的时钟输出的稳定性依赖十分严重,一旦分频器输出时钟有毛刺,该控制信号将会完全的无效,这也是为什么我知道上面的分频器设计不是最优的方案,却还是采用了上述方法的原因。4、计数器:该模块实现的功能是对输入信号脉冲的计数,并正确的输出结果和溢出。使用上面的门控信号产生的gat信号控制计数器的使能端,以实现计数器的定时计数。该模块是使用六个十进制计数器同步并联而成的,首先我们设计用于并联的十进制计数器,原程序如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_U
26、NSIGNED.ALL;entity CNT10 is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; ENA : in STD_LOGIC; CQ : out STD_LOGIC_VECTOR (3 downto 0); CO : out STD_LOGIC);end CNT10;architecture Behavioral of CNT10 isSIGNAL CQI: STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"-定义中间信号CQI,用于数据输出的循环计数beginPROCESS(CLK,CLR
27、) ISBEGINIF CLR='1' THEN CQI<="0000"-当CLR清零信号有效时使输出为0000,无效时进行下述操作ELSIF CLK'EVENT AND CLK='1' THEN-对时钟进行计数IF ENA='1' THEN-判断使能信号,有效则进行计数,否则不作处理IF CQI="1001" THEN CQI<="0000"-数据09循环,计满后重新回到0ELSE CQI<=CQI+'1'END IF;END IF;END I
28、F;END PROCESS;CO <= '1' when ena = '1' and cqi = 9 else '0'-进位信号,最高位的仅为信号作为计数的溢出信号CQ<=CQI;-当且仅当使能有效且计数为9时产生进位信号,进位信号1有效,同步并联时连高位的使能端end Behavioral;文件编写完成后保存编译生成图形文件符号,如上图:创建图形文件cnt6并按照下图进行连接,保存后编译生成图形文件符号如图:仿真文件代码如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_
29、logic_unsigned.all;USE ieee.numeric_std.ALL;ENTITY TBCNT10_vhd ISEND TBCNT10_vhd;ARCHITECTURE behavior OF TBCNT10_vhd IS COMPONENT CNT10PORT(CLK : IN std_logic;CLR : IN std_logic;ENA : IN std_logic; CQ : OUT std_logic_vector(3 downto 0);CO : OUT std_logic);END COMPONENT;SIGNAL CLK : std_logic :=
30、9;0'SIGNAL CLR : std_logic := '0'SIGNAL ENA : std_logic := '1'SIGNAL CQ : std_logic_vector(3 downto 0);SIGNALCO : std_logic;BEGINuut: CNT10 PORT MAP(CLK => CLK,CLR => CLR,ENA => ENA,CQ => CQ,CO => CO);tb : PROCESSBEGINCLK<='0'wait for 100 ns;CLK<='
31、;1'WAIT FOR 100 NS;END PROCESS;END;仿真结果如图:如仿真结果我们可以看出,该模块运行正常,计数稳定,结果十分理想。5、锁存器:由于前面的计数器的输出为六组四位二进制数和一个溢出信号,所以我们使用的锁存器也使用六个四位锁存器和一个一位锁存器。锁存器使用下降沿锁存,即当计数器的使能信号变为无效的一瞬间我们令锁存器将数据锁存。四位锁存器的原代码如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;enti
32、ty LATCH4 is Port ( CLK : in STD_LOGIC; DIN : in STD_LOGIC_VECTOR (3 downto 0); QOU : out STD_LOGIC_VECTOR (3 downto 0);end LATCH4;architecture Behavioral of LATCH4 isbeginPROCESS(CLK,DIN) ISBEGINIF CLK'EVENT AND CLK='0' THEN-当时钟信号下降沿时,实现锁存QOU<=DIN;END IF;END PROCESS;end Behavioral;上述
33、文件编写完成后保存编译生成图形文件符号如图:再编写一位锁存器,源程序代码如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity LATCH1 is Port ( CLK : in STD_LOGIC; DIN : in STD_LOGIC_VECTOR; QOU : out STD_LOGIC_VECTOR);end LATCH1;architecture Behavioral of LATCH1 isbeginPROCESS(
34、CLK,DIN) ISBEGINIF CLK'EVENT AND CLK='0' THEN-当时钟信号下降沿时,实现锁存QOU<=DIN;END IF;END PROCESS;end Behavioral;文件编写完成后保存编译生成图形文件符号,如图:锁存完成后有六组四位二进制数和一个一位二进制数,所以我们队总线进行了合并,即将六组四位数合并成一个二十四位数,合并程序如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED
35、.ALL;entity ADVOCATES is Port ( S0 : in STD_LOGIC_VECTOR (3 downto 0);S1 : in STD_LOGIC_VECTOR (3 downto 0); S2 : in STD_LOGIC_VECTOR (3 downto 0); S3 : in STD_LOGIC_VECTOR (3 downto 0); S4 : in STD_LOGIC_VECTOR (3 downto 0); S5 : in STD_LOGIC_VECTOR (3 downto 0); S6 : out STD_LOGIC_VECTOR (23 downt
36、o 0);end ADVOCATES;architecture Behavioral of ADVOCATES isbeginS6(23 DOWNTO 20)<=S0;-将总线的对应位进行连接S6(19 DOWNTO 16)<=S1;S6(15 DOWNTO 12)<=S2;S6(11 DOWNTO 8)<=S3;S6(7 DOWNTO 4)<=S4;S6(3 DOWNTO 0)<=S5;end Behavioral;文件编写完成后保存编译生成图形文件符号,如图:创建该模块的顶层图形文件LAT.sch将上述个文件按照如图所示连接,保存编译生成图形文件符号如图
37、:该模块的输入输出简单,无需仿真。6、译码显示:该模块实现的是对锁存器锁存的数据进行处理并显示输出,以与小数点的不同闸门的输出显示,以与电路板上七段显示译码管的扫描信号输出。其中对锁存数据的处理包括溢出有效时的数据消除,和对高位无意义零的自动消隐。首先我们编写小数点控制的源文件代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity POINTCON is Port ( SE1 : in STD_LOGIC; SE10 : in
38、STD_LOGIC; SE100 : in STD_LOGIC; SEL : in STD_LOGIC_VECTOR (2 downto 0); DP : out STD_LOGIC);end POINTCON;architecture Behavioral of POINTCON isbeginPROCESS(SE1,SE10,SE100,SEL) ISBEGINIF SE1='1' AND SE10='0' AND SE100='0' AND SEL="011" THENDP<='0'-当为第一档时,
39、令第四位的数码管的小数点点亮,其他的不亮ELSIF SE1='0' AND SE10='1' AND SE100='0' AND SEL="010" THENDP<='0'-第二档时,第三位的数码管小数点点亮ELSIF SE1='0' AND SE10='0' AND SE100='1' AND SEL="001" THENDP<='0'-第三档时,第二位的小数点点亮ELSE DP<='1'-不
40、符合上述三档时,小数点全部消隐END IF;END PROCESS;end Behavioral;编写完成后保存编译生成图形文件符号如图:再编写用于数码管扫描显示的的位选信号生成文件,其代码如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity CTRLS is Port ( CLK : in STD_LOGIC; SEL : out STD_LOGIC_VECTOR (2 downto 0);end CTRLS;archite
41、cture Behavioral of CTRLS isSIGNAL CNT: STD_LOGIC_VECTOR(2 DOWNTO 0):="000"beginPROCESS(CLK) ISBEGINIF CLK'EVENT AND CLK='1' THEN-接入1KHZ的时钟信号,使CNT进行循环计数,从000到101 IF CNT=”101” THEN CNT<=”000”;-计满则清零,不满则加一 ELSE CNT<=CNT+1; END IF; END IF;END PROCESS;SEL<=CNT;-将CNT信号赋给SEL
42、输出end Behavioral;文件编写完成后保存编译生成图形文件符号如图:再编写使高位无意义零自动消隐功能的的文件,源程序代码如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity DSELE is Port ( DP1: IN STD_LOGIC;DP2: IN STD_LOGIC; DIN : in STD_LOGIC_VECTOR (23 downto 0); QOU : out STD_LOGIC_VECTOR (2
43、3 downto 0);end DSELE;architecture Behavioral of DSELE isbeginPROCESS(DP1,DP2,DIN) ISBEGINIF DP1='0' AND DP2='1' THENIF DIN(23 DOWNTO 20)="0000" THENQOU(23 DOWNTO 20)<="1111"QOU(19 DOWNTO 0)<=DIN(19 DOWNTO 0);END IF;IF DIN(23 DOWNTO 20)="0000" AND
44、DIN(19 DOWNTO 16)="0000" THENQOU(23 DOWNTO 20)<="1111"QOU(19 DOWNTO 16)<="1111"QOU(15 DOWNTO 0)<=DIN(15 DOWNTO 0);END IF;END IF;IF DP1='1' AND DP2='0' THENIF DIN(23 DOWNTO 20)="0000" THENQOU(23 DOWNTO 20)<="1111"QOU(19 DOW
45、NTO 0)<=DIN(19 DOWNTO 0);END IF;IF DIN(23 DOWNTO 20)="0000" AND DIN(19 DOWNTO 16)="0000" THENQOU(23 DOWNTO 20)<="1111"QOU(19 DOWNTO 16)<="1111"QOU(15 DOWNTO 0)<=DIN(15 DOWNTO 0);END IF;IF DIN(23 DOWNTO 20)="0000" AND DIN(19 DOWNTO 16)=&qu
46、ot;0000" AND DIN(15 DOWNTO 12)="0000" THENQOU(23 DOWNTO 20)<="1111"QOU(19 DOWNTO 16)<="1111"QOU(15 DOWNTO 12)<="1111"QOU(11 DOWNTO 0)<=DIN(11 DOWNTO 0);END IF;END IF;IF DP1='1' AND DP2='1' THENIF DIN(23 DOWNTO 20)="0000&qu
47、ot; THENQOU(23 DOWNTO 20)<="1111"QOU(19 DOWNTO 0)<=DIN(19 DOWNTO 0);END IF;IF DIN(23 DOWNTO 20)="0000" AND DIN(19 DOWNTO 16)="0000" THENQOU(23 DOWNTO 20)<="1111"QOU(19 DOWNTO 16)<="1111"QOU(15 DOWNTO 0)<=DIN(15 DOWNTO 0);END IF;IF DIN(
48、23 DOWNTO 20)="0000" AND DIN(19 DOWNTO 16)="0000" AND DIN(15 DOWNTO 12)="0000" THENQOU(23 DOWNTO 20)<="1111"QOU(19 DOWNTO 16)<="1111"QOU(15 DOWNTO 12)<="1111"QOU(11 DOWNTO 0)<=DIN(11 DOWNTO 0);END IF;IF DIN(23 DOWNTO 20)="0
49、000" AND DIN(19 DOWNTO 16)="0000" AND DIN(15 DOWNTO 12)="0000" AND DIN(11 DOWNTO 8)="0000" THENQOU(23 DOWNTO 20)<="1111"QOU(19 DOWNTO 16)<="1111"QOU(15 DOWNTO 12)<="1111"QOU(11 DOWNTO 8)<="1111"QOU(7 DOWNTO 0)<
50、=DIN(7 DOWNTO 0);END IF;END IF;END PROCESS;end Behavioral;该段代码的编写的主要原理是首先判断小数点的位置,然后对小数点前的高位数从高到低依次进行判断,如果高位为零则将数据取反,在后续译码中将不再显示,从而实现高位无意义零的自动消隐。代码编写完成后保存编译生成图形文件符号如上图:然后我们编写数据显示输出文件,代码如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity DIS
51、PLAY1 is Port ( SEL : in STD_LOGIC_VECTOR (2 downto 0);OVERIN : IN STD_LOGIC;DATAIN : in STD_LOGIC_VECTOR (23 downto 0);SEG : OUT STD_LOGIC_VECTOR (6 DOWNTO 0);END DISPLAY1;architecture Behavioral of DISPLAY1 isSIGNAL DATA: STD_LOGIC_VECTOR (3 DOWNTO 0):="0000"BEGIN PROCESS(SEL,OVERIN) ISB
52、EGINCASE SEL IS-对位选信号进行判断,对应每一位分别提取数据中的不同位置的数据赋给中间信号DATAWHEN "000"=>DATA<=DATAIN(3 DOWNTO 0);WHEN "001"=>DATA<=DATAIN(7 DOWNTO 4);WHEN "010"=>DATA<=DATAIN(11 DOWNTO 8);WHEN "011"=>DATA<=DATAIN(15 DOWNTO 12);WHEN "100"=>DATA
53、<=DATAIN(19 DOWNTO 16);WHEN "101"=>DATA<=DATAIN(23 DOWNTO 20);WHEN OTHERS=>DATA<="0000"END CASE;CASE DATA IS-对中间信号DATA进行译码,SEG为数码管的数据显示输出,从而使不同位置上有不同的数字显示WHEN "0000"=>SEG<="1000000"WHEN "0001"=>SEG<="1111001"WHEN
54、"0010"=>SEG<="0100100"WHEN "0011"=>SEG<="0110000"WHEN "0100"=>SEG<="0011001"WHEN "0101"=>SEG<="0010010"WHEN "0110"=>SEG<="0000010"WHEN "0111"=>SEG<="
55、1111000"WHEN "1000"=>SEG<="0000000"WHEN "1001"=>SEG<="0010000"WHEN OTHERS=>SEG<="1111111"END CASE;if OVERIN='1' THEN -判断溢出,若溢出则令输出全部不显示SEG<="1111111"END IF;END PROCESS;end Behavioral;代码编写完成后保存编译生成图形文件符号如图:建立该模块的顶层图形文件DISPLAY.sch,按照下图连接各元件,保存编译生成图形文件符号如下图:该模块的输入数据量太大难以仿真,故这里只对其中的扫描信号生成文件进行仿真,仿真文件代码如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;ENTITY TBCTRLS_vhd ISEND TBCTRLS_vhd;ARCHITECTURE behavior OF TBCTRL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供热应急抢险管理办法
- 便民流动摊位管理办法
- 急性创伤骨折患者的康复干预方案研究
- 共同体理论下的社区安全韧性建设路径探索与实践进路
- 矿山节能技术-洞察及研究
- 煤矿机电管理绩效评价与改进策略
- 历史焦点人物康熙帝研究
- 自动控制技术的应用与发展故事
- 机场商业投诉管理办法
- 煤矿突发事故应急预案
- 2023年医技类-康复医学(副高)考试历年真题荟萃带答案
- 改进维持性血液透析患者贫血状况PDCA
- 公司岗位职级管理制度
- 漏肩风(肩周炎)中医临床路径及入院标准2020版
- 光面爆破知识讲座课件
- 高铁站装饰装修方案
- DB4401-T 112.1-2021 城市道路占道施工交通组织和安全措施设置+第1部分:交通安全设施设置-(高清现行)
- 质量整改通知单(样板)
- 杭州市高级中学2022年高一新生素质测试(分班考)模拟试卷
- 《碳纤维片材加固混凝土结构技术规程》(2022年版)
- 智能建筑项目设计方案(模板)
评论
0/150
提交评论