VHDL非整数分频器设计实验报告

合集下载

vhdl课程设计实验报告

vhdl课程设计实验报告

湖南科技大学信息与电气工程学院《课程设计报告》题目:电子技术课程设计报告专业:通信工程班级:一班姓名:何家乐学号: 1004040126指导教师:罗朝辉任务书题目《电子技术》课程设计时间安排课程设计时间为10天(2周)。

(1)调研、查资料1天。

(2)总体方案设计2 天。

(3)电路设计2天(画原理图,参数计算)。

(4)实验室完成相应电路的验证。

3天(5)撰写设计说明书 1 天。

(6)验收1 天。

目的:训练学生综合运用学过的电子技术原理的基础知识,独立进行查找资料、选择方案、设计电路、撰写报告,进一步加深对电子电路基本理论的理解,提高运用基本技能的能力,为今后的学习和工作打下坚实的基础。

要求:(1)能正确设计电路,画出线路图,分析电路原理。

(2)按时参加课程设计指导,定期汇报课程设计进展情况。

(3)广泛收集相关技术资料。

(4)独立思考,刻苦钻研,严禁抄袭。

(5)按时完成课程设计任务,认真、正确地书写课程设计报告。

(6)培养实事求是、严谨的工作态度和认真的工作作风。

总体方案实现:(1)明确设计任务,对所要设计的任务进行具体分析,充分了解电路性能、指标内容及要求。

(2)制定设计方案。

(3)迸行具体设计:单元电路的设计;参数计算;器件选择;绘制电路原理图。

(4)撰写课程设计报告(说明书):课程设计报告是对设计全过程的系统总结,也是培养综合科研素质的一个重要环节。

指导教师评语:评分等级:()指导教师签名:课程设计报告1.课题名称:RGB LED Control 原理图及PCB设计2.设计任务及要求⑴任务:完成RGB LED control 的设计,并画出原理图及其PCB设计。

⑵要求:①能正确设计电路,画出线路图,分析电路原理。

②按时参加课程设计指导,定期汇报课程设计进展情况。

③广泛收集相关技术资料。

④独立思考,刻苦钻研,严禁抄袭。

⑤按时完成课程设计任务,认真、正确地书写课程设计报告。

⑥培养实事求是、严谨的工作态度和认真的工作作风。

vhdl实验报告

vhdl实验报告

vhdl实验报告VHDL实验报告引言:VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和仿真。

本篇实验报告将介绍我在VHDL实验中的学习和实践经验,包括实验目的、实验过程、实验结果以及对VHDL的理解和展望。

一、实验目的VHDL实验的主要目的是让我们掌握VHDL语言的基本语法和使用方法,能够利用VHDL描述数字电路,并通过仿真和综合工具进行验证和实现。

通过这些实验,我们可以深入了解数字电路的原理和设计方法,提高我们的逻辑设计能力和工程实践能力。

二、实验过程在实验过程中,我们首先学习了VHDL的基本语法,包括实体声明、端口声明、信号声明等。

然后,我们通过实例学习了VHDL的建模方法,包括组合逻辑电路的建模和时序逻辑电路的建模。

在组合逻辑电路的建模中,我们学习了使用逻辑运算符和条件语句描述电路的功能;在时序逻辑电路的建模中,我们学习了使用过程语句和时钟信号描述电路的状态转换。

在学习了VHDL的基础知识后,我们开始进行实验设计。

我们选择了一个简单的数字电路,如4位加法器,来进行实验验证。

首先,我们通过VHDL语言描述了加法器的功能和结构,包括输入端口、输出端口和中间信号。

然后,我们使用仿真工具进行了功能仿真,验证了加法器的正确性。

接着,我们使用综合工具将VHDL代码综合成门级电路,并进行了时序仿真和时序优化,验证了加法器的时序正确性和性能。

三、实验结果通过实验,我们成功地实现了4位加法器的功能,并验证了其正确性和性能。

在功能仿真中,我们输入了不同的测试数据,观察了输出结果,发现加法器能够正确地进行加法运算,并得到了正确的结果。

在时序仿真中,我们观察了电路的时序行为,包括输入信号的变化、输出信号的响应和中间信号的传播延迟等,发现加法器能够在时序上满足要求,并且具有较好的性能。

vhdl设计实验报告

vhdl设计实验报告

vhdl设计实验报告VHDL设计实验报告引言VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,广泛应用于数字电路设计和验证。

本实验旨在通过设计一个简单的电路来熟悉VHDL语言的基本语法和设计流程。

一、实验背景数字电路是现代电子系统的基础,而VHDL则是描述和设计数字电路的重要工具。

VHDL可以帮助工程师们以一种形式化的语言来描述电路的功能和结构,从而实现电路的模拟和验证。

二、实验目的本实验的目的是通过使用VHDL语言设计一个简单的电路,加深对VHDL语言的理解,并掌握基本的电路设计流程。

三、实验步骤1. 确定电路功能在设计电路之前,首先需要明确电路的功能。

本实验中,我们选择设计一个4位加法器电路。

2. 设计电路结构根据电路功能的要求,设计电路的结构。

在本实验中,我们需要设计一个4位加法器,因此需要使用4个输入端口和一个输出端口。

3. 编写VHDL代码使用VHDL语言编写电路的描述代码。

在代码中,需要定义输入和输出端口的类型和位宽,并实现电路的功能。

4. 进行仿真使用仿真工具对设计的电路进行仿真,以验证电路的功能是否符合预期。

通过输入不同的测试数据,观察输出是否正确。

5. 下载到FPGA开发板将设计好的电路代码下载到FPGA开发板上进行验证。

通过连接输入信号和观察输出信号,验证电路在实际硬件上的运行情况。

四、实验结果与分析经过仿真和实际验证,我们设计的4位加法器电路在功能上符合预期。

输入不同的数据进行加法运算时,输出结果都正确。

五、实验总结通过本次实验,我们深入了解了VHDL语言的基本语法和设计流程。

通过设计一个简单的电路,我们掌握了VHDL的应用方法,并通过仿真和实际验证,加深了对电路设计的理解。

六、实验心得本实验让我对VHDL语言有了更深入的认识。

通过实际操作,我更加熟悉了VHDL的编写和仿真流程。

VHDL实验报告

VHDL实验报告

EDA课程设计项目——数字钟学院:机电工程学院专业年级:07级电子科学与技术学号:学生姓名:指导老师:成绩评定:数字钟设计1、课程设计目的1、熟悉和掌握VHDL模块间的组合设计思路了解数字钟的工作原理2、掌握各芯片的逻辑功能及使用方法。

3、了解数字钟的组成及工作原理。

4、熟悉数字钟的设计与制作。

5、掌握常用仪器、仪表的正确方法,学会电路整机指标的测试6、巩固和加深学生对模拟电子技术,数字逻辑电路等课程基本知识的理解。

2、课程设计内容基本要求:1. 设计一个按HH:MM:SS(六位七段LED)显示的24小时制数字钟。

2.通过三个按键能够实现复位和校对时间的功能。

3、设计条件硬件:利用PC设计软件:MAX+PLUS2实验总原理图4、设计思路:过一个数据选择器和一个3-8译码器分别控制数码管的段选和位选实现数码管的动态扫描。

5、设计步骤:设计步骤:1、24进制计数器的vhdl语言编译、仿真程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY jjsqh ISPORT(rest,clk:IN std_logic;co:OUT std_logic;qh,ql:BUFFER std_logic_vector(3 DOWNTO 0));END jjsqh;ARCHITECTURE one OF jjsqh ISBEGINco<='1'WHEN(ql="1001"AND qh="0101")ELSE'0';PROCESS(clk,rest)BEGINIF(rest='0')THENql<="0000";qh<="0000";ELSIF(clk'EVENT AND clk='1')THEN IF(ql =3)THEN ql<="0000";IF(qh =2)THEN qh<="0000";ELSE qh<=qh+1;END IF;ELSE ql<=ql+1;END IF;END IF;END PROCESS;END one;2、60进制计数器的vhdl语言编译、仿真程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY jsqm ISPORT(rest,clk:IN std_logic;co:OUT std_logic;qh,ql:BUFFER std_logic_vector(3 DOWNTO 0));END jsqm;ARCHITECTURE one OF jsqm ISBEGINco<='1'WHEN(ql="1001"AND qh="0101")ELSE'0';PROCESS(clk,rest)BEGINIF(rest='0')THENql<="0000";qh<="0000";ELSIF(clk'EVENT AND clk='1')THENIF(ql =9)THEN ql<="0000";IF(qh =5)THEN qh<="0000";ELSE qh<=qh+1;END IF;ELSE ql<=ql+1;END IF;END IF;END PROCESS;END one;3、6选1数据选择器(控制LED的段选和位选)的vhdl语言编译、仿真程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ledchoose isport(a,b,c,d,e,f: in std_logic_vector(3 downto 0);s: out std_logic_vector(2 downto 0);z: out std_logic_vector(3 downto 0);cp:in std_logic);end ledchoose;architecture behave of ledchoose isbeginprocess(cp)variable sn :std_logic_vector(2 downto 0);beginif cp'event and cp='1' then if sn="101"thensn:="000";elsesn:=sn+1;end if;case sn iswhen "000"=>z<=a;when "001"=>z<=b;when "010"=>z<=c;when "011"=>z<=d;when "100"=>z<=e;when "101"=>z<=f;when others=>null;end case;end if;s<=sn;end process;end behave;4、3-8译码器的vhdl语言编译、仿真程序如下:library ieee;use ieee.std_logic_1164.all;entity decode isport(iny:in std_logic_vector(2 downto 0);outy:out std_logic_vector(7 downto 0));end decode;architecture behave of decode isbeginprocess(iny)begincase iny iswhen "000"=>outy<="11111110";when "001"=>outy<="11111101";when "010"=>outy<="11111011";when "011"=>outy<="11110111";when "100"=>outy<="11101111";when "101"=>outy<="11011111";when "110"=>outy<="10111111";when "111"=>outy<="01111111";when others=>null;end case;end process;end behave;5、整点报时模块的编译、仿真Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity alarm isPort( a,b,c,d:in std_logic_vector(3 downto 0);q:out std_logic);End alarm;Architecture a of alarm isBeginprocess(a,b,c,d)beginif (a=0 and b=0 and c=0 and d=0) then q<='1' ;else q<='0';end if ;end process;end a;6、LED数码管显示模块的编译、仿真程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY led ISPORT( inp:IN STD_LOGIC_VECTOR(3 DOWNTO 0);outp:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END led;ARCHITECTURE be OF led ISBEGINprocess(inp)BEGINCASE inp isWHEN"0000"=>outp<="1111110";WHEN"0001"=>outp<="0110000";WHEN"0010"=>outp<="1101101";WHEN"0011"=>outp<="1111001";WHEN"0100"=>outp<="0110011";WHEN"0101"=>outp<="1011011";WHEN"0110"=>outp<="1011111";WHEN"0111"=>outp<="1110000";WHEN"1000"=>outp<="1111111";WHEN"1001"=>outp<="1111011";WHEN others=>outp<="0000000";end CASE;END process;END be;7、校时电路:校时、校分由两个或门组成,闲置是,按键开关一端与Vcc连接,当按下时,另一端与或门输入和下拉电阻连接,实现校时功能8、将所有模块合起来就是一个完整的动态扫描时钟之所以这样做是因为从流程图我们可以清晰的看到时钟的各部分组成,能够轻易的对其进行功能模块的拆分,好进行各个模块的vhdl语言的编译、仿真,从而使编译简化,不至于那么复杂,更易于编写vhdl语言程序,而且要是出现在错误的话可以直接到各个模块去找错误,更容易修改和解决错误问题。

VHDL实验报告

VHDL实验报告

实验四————LED数码管显示数字实验内容:在四个七段LED数码管上显示数字“1234”。

实验原理:实现LED数码管数字显示电路的输入和输出端口控制信号如图所示clkLed_bit reset led_seg输入和输出端口信号图中clk信号为50MHz时钟信号。

reset信号为复位按键输入信号,当reset按键按下时,reset信号为低电平。

输出信号led_bit为驱动LED数码管的位码信号,因为有四个LED 数码管,需要四根信号线,控制四个LED数码管中的哪一个LED数码管显示。

输出信号led_seg为驱动LED数码管的段码信号,共有八根信号线,分别是a,b,c,d,e,f,g,dp段,输出信号led_seg能够控制一个LED数码管中的哪一段显示。

四个七段LED数码管的排列如下图所示:四个LED数码管LED数码管采用共阳极发光二极管,如下图所示,需要点亮数码管中的某一段时,应该在对应段的段码信号输出低电平。

共阳极LED数码管由于每个LED数码管有八个发光二极管,八个发光二极管同时导通时需要提供比较大的电流,需要给共阳极加驱动电路,如下图所示,当需要某一LED数码管显示数字时,就给该行的控制信号led_bit(i)提供一个低电平信号。

共阳极LED数码管的阳极驱动电路原理图实验内容:本次实验采用了两个进程:1.scanclk_get:获取扫描时序控制信号2.led_selest_get:选择数码管并显示数字流程图:Clknum scan_cntr reset led_bit<3:0>源代码:library IEEE;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity EXP4_M isport(clk,rst:in std_logic;led_bit:out std_logic_vector(3 downto 0); led_seg:out std_logic_vector(7 downto 0)); end EXP4_M;进程scanclk_get 产生LED 数码管扫描时序控制电路 Led_select_d isplay 进程选择要显示的数据和对应的数码管 七段译码器architecture Behavioral of EXP4_M issignal scanclk:std_logic_vector(17 downto 0);beginscanclk_get:process(clk,rst)beginif rst='0' thenscanclk<=(others=>'0');elsif rising_edge(clk) thenscanclk<=scanclk+1;end if;end process scanclk_get;led_select_display:process(scanclk)begincase scanclk(17 downto 16) iswhen "00" =>led_bit<="1110";led_seg<="10011111" ;when "01"=>led_bit<="1101";led_seg<="00100101" ;when "10"=>led_bit<="1011";led_seg<="00001101" ;when "11"=>led_bit<="0111";led_seg<="10011001" ;when others =>null;end case;end process led_select_display;end Behavioral;UCF文件:net "clk" loc =Y11;net "rst" loc =J3;net "led_bit(0)" loc =M5;net "led_bit(1)" loc =M4;net "led_bit(2)" loc =M3;net "led_bit(3)" loc =M2;net "led_seg(0)" loc =R4;net "led_seg(1)" loc =T3;net "led_seg(2)" loc =T2;net "led_seg(3)" loc =T1;net "led_seg(4)" loc =N4;net "led_seg(5)" loc =N3;net "led_seg(6)" loc =N2;net "led_seg(7)" loc =N1;实验结果:实验箱数码管依次显示“1234”。

VHDL实验报告与代码毕业设计(论文)

VHDL实验报告与代码毕业设计(论文)

实验一. 分频器设计一.实验目的1.熟悉QUARTUSII 软件的使用2.熟悉PLD设计流程3. 学习分频器的设计二.实验内容设计一个最大分频为225的分频器,将50MHz时钟作为输入三.实验框图四.管脚设定CLOCK_50 PIN_N2LEDR[0] PIN_AE23五.实验代码LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_UNSIGNED.all;ENTITY clk1 ISPORT(clk:IN STD_LOGIC;DIGIT:OUT STD_LOGIC);END clk1;ARCHITECTURE clk1 OF clk1 ISBEGINCOUNT: PROCESS(clk)V ARIABLE temp:STD_LOGIC_VECTOR(25 DOWNTO 0);BEGINIF(clk'EVENT AND clk = '1')THENtemp := temp+1;IF(temp(25)='1') THENtemp:=(OTHERS=>'0');END IF;END IF;DIGIT <= temp(24);END PROCESS count;END clk1;六.心得体会通过这次实验,我初步掌握了QUARTUSII 软件的使用,为今后的实验打下基础。

实验二. VHDL描述风格比较一.实验目的1.深入体会VHDL三种描述风格的区别2. 学习3输入表决器,异或门的实现3.设计一个5输入表决器。

二.实验内容以3输入表决器,异或门,通用寄存器等代码为例,深入体会VHDL描述风格。

1.学习已给的3输入表决器代码,完成3输入表决器的三种描述方式的验证比较。

在QUARTUS II中对程序进行编译,下载,验证。

使用拔码开关SW0,SW1,SW2作为三个输入,输出在LEDR0表示,亮表示‘1’,不亮表示‘0’2.学习已给的异或门代码,完成异或门的三种描述方式的验证比较。

VHDL实验报告(1)

VHDL实验报告(1)

VHDL 实验报告******班级:电子0701学号:************实验一组合逻辑电路设计一实验目的:1. 熟悉mux+pluxII软件,可以进行新文件的编辑和文件的修改。

2. 掌握门电路VHDL语言程序设计方法。

3. 掌握选择器VHDL语言程序设计方法。

4. 掌握加法器VHDL语言程序设计方法。

5. 熟悉VHDL编程的基本方法。

二实验设备:1.计算机2.Max+PlusII软件三实验原理及内容:1 二输入与门(1)实验原理二输入与门是我们数字电路中的一个基础逻辑门电路,是最基本的逻辑门电路之一,也是最简单的逻辑门之一。

它能实现两个输入端的相与,一般有三个端口。

二输入与门的表达式是:Y=ab二输入与门的逻辑符号如图(1)所示,真值表如表(1)所示。

图(1)与门逻辑符号表(1)与门真值表(2)实验内容a.在mux+pluxII文本编辑环境下,打开新文本,编写两输入与门VHDL语言源程序,程序设计如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY and2 ISPORT(a,b: IN STD_LOGIC;Y: OUT STD_LOGIC);END and2;ARCHITECTURE behave OF and2 ISBEGINY <= a and b;END behave;b.对源程序进行编译,按照提示进行修改,直至编译通过。

c.对编译程序进行仿真,分析并记录仿真波形,其仿真波形图如图(2)所示。

图(2)二输入与门仿真图d.在自己的目录下保存相应的源文件、波形文件。

2 四选一选择器(1)实验原理四选一选择器如图(3)所示,真值表如表(2)所示。

图(3)mux4管脚图表(2)mux4真值表(2)实验内容a.在mux+plusII文本编辑环境下,打开新文件,编辑四选一VHDL源程序文件,其程序设计如下:LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 ISPORT(A: IN STD_LOGIC_VECTOR (1 DOWNTO 0);D0,D1,D2,D3:IN STD_LOGIC;G:IN STD_LOGIC;Y: OUT STD_LOGIC);END mux4;ARCHITECTURE dataflow OF mux4 ISBEGINPROCESS (A,D0,D1,D2,D3,G)BEGINIF (G ='0') THENIF (A="00")THEN Y <= D0;ELSIF(A="01")THEN Y <= D1;ELSIF(A="10")THEN Y <= D2;ELSE Y <= D3;END IF;ELSE Y <='0';END IF;END PROCESS;END dataflow;b.对源程序进行编译,按照提示进行修改,直到编译通过。

实验六 基于VHDL语言的分频器设计与实现

实验六 基于VHDL语言的分频器设计与实现

实验六基于VHDL语言的分频器设计与实现报告一、实验目的1、进一步掌握VHDL语言的基本结构及设计的输入方法。

2、掌握VHDL基本逻辑电路的综合设计应用。

二、实验原理在数字电路系统中,分频电路应用得十分广泛。

例如,工程人员常常使用分频电路来得到数字通信中的帧头信号、选通信号以及中断信号等。

因此,分频电路在数字电路系统的设计中也应该作为重要的基本电路来掌握,从而给今后的一些设计带来方便。

三、实验内容1、设计并实现一个6分频的分频电路,要求其输出信号的占空比为50%。

请分析分频电路设计原理并编写VHDL语言程序,利用Max+PlusII开发软件对其进行编译和仿真。

6分频电路实现程序代码如下:2、在实际数字电路设计过程中,往往需要得到占空比不是1:1的分频时钟,方法是:首先描述一个计数器电路,然后根据计数器电路的并行输出信号来决定输出时钟的高低电平。

请设计、编写VHDL 语言程序实现分频后时钟信号的占空比为1:15的16分频电路,并利用Max+PlusII开发软件对其进行编译和仿真。

四、实验设计1.程序代码:图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clk_div6 isport(clk:in std_logic;clk_out:out std_logic);end clk_div6;architecture rtl of clk_div6 issignal clk_temp:std_logic;beginprocess(clk)variable counter:integer range 0 to 15;constant md:integer:=2;beginif clk'event and clk='1'thenif counter=md thencounter:=0;clk_temp<=not clk_temp;elsecounter:=counter+1;end if;end if;end process;clk_out<=clk_temp;end rtl;2.仿真结果:五、实验结果分析本实验利用VHDL语言设计分频电路,目的在于进一步掌握VHDL语言的基本结构及设计的输入方法,掌握VHDL基本逻辑电路的综合设计应用。

VHDL实验报告实验八

VHDL实验报告实验八

实验八:10分频器一、实验目的1、熟悉Xilinx ISE/ModelSim软件,掌握软件的VHDL程序输入、程序编译和程序仿真操作;2、学习利用VHDL语言设计10分频器电路程序;3、根据分频的原理设计VHDL程序,使得输出信号为对输入时钟分频后的时钟信号。

二、VHDL源程序:三、●10分频器源代码:library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity div10 isport(clk: in STD_LOGIC;clkout: out STD_LOGIC);end div10;architecture div10_arch of div10 issignal t: STD_LOGIC;beginprocess(clk)variable count: integer range 0 to 10;beginif(clk'event and clk='1') thenif(count=4) thencount:=0;t<=not t;elsecount:=count+1;end if;end if;end process;clkout<=t;end;●三位比较器testbench代码:LIBRARY ieee;USE ieee.std_logic_1164.ALL;-- Uncomment the following library declaration if using-- arithmetic functions with Signed or Unsigned values--USE ieee.numeric_std.ALL;ENTITY tbench1 ISEND tbench1;ARCHITECTURE behavior OF tbench1 IS-- Component Declaration for the Unit Under Test (UUT)COMPONENT compare3PORT(a : IN std_logic_vector(2 downto 0);b : IN std_logic_vector(2 downto 0);c : OUT std_logic);END COMPONENT;--Inputssignal a : std_logic_vector(2 downto 0) := "000";signal b : std_logic_vector(2 downto 0) := "000";--Outputssignal c : std_logic;-- No clocks detected in port list. Replace <clock> below with -- appropriate port nameBEGIN-- Instantiate the Unit Under Test (UUT)uut: compare3 PORT MAP (a => a,b => b,c => c);-- Clock process definitions-- Stimulus processstim_proc: processbegin-- hold reset state for 100 ns.wait for 10 ns;a <= "010";b <= "001";wait for 10 ns;a <= "110";b <= "111";wait for 10 ns;a <= "011";b <= "111";wait for 10 ns;a <= "110";b <= "101";wait for 10 ns;a <= "110";b <= "000";wait for 10 ns;a <= "100";b <= "101";wait for 1000 ns;-- insert stimulus herewait;end process;END;三、实验结果与分析●实验仿真波形图●实验结果分析由波形图观察可得该VHDLd代码实现了比较的功能,在输入a,b值大小不同的情况下,成许进行比较均能的出结果并给C赋值,当a>b,c=1, 反之c=0。

分频器实验报告

分频器实验报告
k1:out std_logic);
end;
architecture bhv ofcnt4is
signal c1:std_logic_vector(2 downto 0);
signal m1:std_logic;
begin
process(clk,c1)
begin
if rising_edge(clk) then
欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习资料等等
打造全网一站式需求
(3)波形文件存盘。选择File→Save As,将以默认名为cnt10.vwf的波形文件存入文件夹d\work\cnt10中。
(4)将工程shift的端口信号节点选入波形编辑器中。
(5)编辑输入波形。
(6)启动仿真器。现在所有的设置进行完毕,选择Processing→Start Simulation命令,直到出现Simulation was successful,仿真结束。
signal c1,c2:std_logic_vector(2 downto 0);
begin
process(clk,c1)
begin
if rising_edge(clk) then
if(c1="100") then c1<="000"; else c1<=c1+1;
end if; end if;
end process;
(4)工具设置。
(5)结束设置。
3:半程编译。
编译前首先选择Processing→Start Complilation命令,启动半程编译。
4:时序仿真。
工程编译通过后

VHDL语言与FPGA设计实验报告

VHDL语言与FPGA设计实验报告

VHDL语言与FPGA设计实验报告一、实验目的本实验的目的是通过学习VHDL语言和FPGA设计,掌握基本的VHDL语法和FPGA设计方法,能够独立完成简单的数字电路系统设计。

二、实验原理和方法1.VHDL语言简介VHDL是Very High Speed Integrated Circuit HardwareDescription Language的缩写,是一种用于数字电路的硬件描述语言。

VHDL语言可以描述电路的行为和结构,通过编写VHDL代码可以实现数字电路的功能。

在本实验中,我们将使用VHDL语言来描述数字电路的功能。

2.FPGA设计FPGA是Field-Programmable Gate Array的缩写,是一种可编程逻辑器件。

通过FPGA芯片上的可编程逻辑资源,我们可以将VHDL代码烧录到FPGA芯片中,实现我们所需的数字电路功能。

在本实验中,我们将使用FPGA来实现我们设计的数字电路。

三、实验步骤1.熟悉VHDL语言的基本语法和常用关键字。

2.使用VHDL语言编写一个简单的数字电路的描述,例如一个全加器。

3. 使用Xilinx ISE软件创建一个新的工程,并将VHDL代码添加到工程中。

4.根据设计要求,在ISE中进行逻辑综合和布线。

6.检验数字电路的功能。

7.编写实验报告,总结实验过程和结果。

四、实验结果和分析五、实验心得通过本实验,我学到了VHDL语言的基本语法和FPGA设计的基本步骤。

我了解到VHDL语言可以描述数字电路的功能,并通过FPGA芯片来实现这些功能。

在实验过程中,我遇到了一些问题,例如VHDL语法的错误和逻辑综合的问题,但通过与同学和老师的讨论,我成功解决了这些问题。

这次实验让我更深入地理解了数字电路的设计过程,并提高了我解决问题的能力。

综上所述,通过本实验,我成功地掌握了VHDL语言和FPGA设计的基本原理和方法,并能够独立完成简单的数字电路系统设计。

这对我今后的学习和工作有很大的帮助。

VHDL非整数分频器设计实验报告.docx

VHDL非整数分频器设计实验报告.docx

非整数分频器设计输入文件输入时钟 CLK: IN STD_LOGIC设计思路1. 方法一:分频比交错(1)确定K 值先根据学号N S 确定M 和 N:为了保证同学们的学号都不相同, 取学号的后四位,即NS=1763 N 二 N S mod 19 20if (N S mod 17)=0 then M =17else M 二 N S mod 17由以上公式,得 N=(1763 mod 19)+20=35M=(1763 mod 17)=12然后根据下式计算分频比K 的值:(2)确定交错规律使在35分频的一个循环内,进行12次9分频和23次8分频, 这样,输出F_OUT 平均为F 」N 的(3)设计框图:要求同步时序设计8(N -M ) 9MN------------------- =8.34285714(4)代码在实体内定义两个进程(PROCESS P和PROCESS P2 一个进程控制输出8/9分频,一个进程控制35分频周期比例输出。

控制器输出FS_CTL言号控制输出是8分频还是9分频,分频器输出C ENB 言号来控制35分频计数器计数。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DIV IS-- 定义实体,实体名DIVPORT(F_IN: IN STD_LOGIC;--输入时钟信号F_OUT: OUT STD_LOGIC-- 输出时钟信号);END DIV;ARCHITECTURE A OF DIV ISSIGNAL CN1: INTEGER RANGE 0 TO 7;--8分频计数器SIGNAL CN2: INTEGER RANGE 0 TO 8;--9分频计数器SIGNAL CN: INTEGER RANGE0 TO 34;--整体计数器SIGNAL C_ENB: STD_LOGIC;--整体计数器时钟驱动信号SIGNAL FS_CTL: STD_LOGIC;--控制8、9分频比例信号,高电平8分频,低电平9 分频BEGINP1:PROCESS(F_IN)--8 、9 分频计数进程BEGINIF (F_IN'EVENT ANDF_IN='1') THENIF(FS_CTL='0') THEN--9 分频IF CN2=8 THEN-- 计数CN2<=0;ELSECN2<=CN2+1;END IF;IF CN2>4 THEN-- 控制输出,占空比0.5F_OUT<='1';ELSEF_OUT<='0';END IF;IF CN2=8THEN--控制整体计数器驱动信号C ENB<='1';ELSEC_ENB<='0';END IF;ELSEIF CN1=7THEN--8 分频计数,同上CN1<=0;ELSECN1<=CN1+1;END IF;IF CN1>3 THENF_OUT<='1';ELSEF_OUT<='0';END IF;IF CN1=7 THENC_ENB<='1';ELSEC_ENB<='0';END IF;END IF;END IF;END PROCESS P1;P2:PROCESS(C_ENB)--整体计数进程BEGINIF (C_ENB'EVENTANDC_ENB='1') THEN--由驱动信号驱动IF CN=34 THEN-- 计数CN<=0;ELSECN<=CN+1;END IF;IF (CN=34 ORCN=2ORCN=5ORCN=8ORCN=11 ORCN=14ORCN=17ORCN=20 ORCN=23ORCN=26ORCN=29ORCN=32) THENFS_CTL<='0';ELSEFS_CTL<='1';END IF;--8 、9分频比例分配ELSE CN<=CN;END IF;2. 方法二:累加器分频(1)设计思路假设累加器位数为8,则累加器的模值M为28= 256。

VHDL实验报告

VHDL实验报告

VHDL实验报告专⽤集成电路实验报告13050Z011305024237刘德⽂实验⼀开发平台软件安装与认知实验实验内容1、本实验以三线⼋线译码器(LS74138)为例,在Xilinx ISE 9、2软件平台上完成设计电路得VHDL⽂本输⼊、语法检查、编译、仿真、管脚分配与编程下载等操作。

下载芯⽚选择Xilinx公司得CoolRunner II系列XC2C256-7PQ208作为⽬标仿真芯⽚。

2、⽤1中所设计得得三线⼋线译码器(LS74138)⽣成⼀个LS74138元件,在XilinxISE 9。

2软件原理图设计平台上完成LS74138元件得调⽤,⽤原理图得⽅法设计三线⼋线译码器(LS74138),实现编译,仿真,管脚分配与编程下载等操作。

源程序:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE。

STD_LOGIC_ARITH。

ALL;use IEEE、STD_LOGIC_UNSIGNED。

ALL;-- Unment the following lines to usethedeclarations that are-—provided for instantiatingXilinx primitive ponents、——library UNISIM;-—use UNISIM。

VComponents。

all;entity ls74138 isPort ( g1 : in std_logic;g2 : in std_logic;inp: in std_logic_vector(2 downto0);y : out std_logic_vector(7 downto 0));end ls74138;architecture Behavioral of ls74138 isbeginprocess(g1,g2,inp)beginif((g1 and g2)=’1’) thencase inp iswhen "000"=>y〈=”00000001";when ”001"=〉y〈="00000010";when"010"=>y〈="00000100";when "011”=〉y〈="00001000";when ”100”=>y〈="00010000”;when”101”=〉y<=”00100000";when "110"=〉y<="01000000";when "111”=>y<="10000000";when others=>y〈=”";endcase;elsey<="";end if;end process;end Behavioral;波形⽂件:⽣成元器件及连接电路思考:有程序可以瞧出,定义了三个输⼊端,⼀个输出端。

使用VHDL进行分频器设计

使用VHDL进行分频器设计

使用VHDL 进行分频器设计作者:ChongyangLee摘要使用VHDL 进行分频器设计作者:ChongyangLee本文使用实例描述了在FPGA/CPLD 上使用VHDL 进行分频器设计,包括偶数分频、非50%占空比和50%占空比的奇数分频、半整数(N+0.5)分频、小数分频、分数分频以及积分分频。

所有实现均可通过Synplify Pro 或FPGA 生产厂商的综合器进行综合,形成可使用的电路,并在ModelSim 上进行验证。

目录概述 (1)计数器 (1)普通计数器 (1)约翰逊计数器 (3)分频器 (4)偶数分频器 (4)奇数分频器 (6)半整数分频器 (9)小数分频器 (11)分数分频器 (15)积分分频器 (18)概述分频器是数字电路中最常用的电路之一,在FPGA 的设计中也是使用效率非常高的基本设计。

基于FPGA 实现的分频电路一般有两种方法:一是使用FPGA 芯片内部提供的锁相环电路,如ALTERA 提供的PLL (Phase Locked Loop),Xilinx 提供的DLL(Delay Locked Loop);二是使用硬件描述语言,如VHDL、Verilog HDL 等。

使用锁相环电路有许多优点,如可以实现倍频;相位偏移;占空比可调等。

但FPGA 提供的锁相环个数极为有限,不能满足使用要求。

因此使用硬件描述语言实现分频电路经常使用在数字电路设计中,消耗不多的逻辑单元就可以实现对时钟的操作,具有成本低、可编程等优点。

计数器计数器是实现分频电路的基础,计数器有普通计数器和约翰逊计数器两种。

这两种计数器均可应用在分频电路中。

普通计数器最普通的计数器是加法(或减法)计数器。

下面是加法计数器的VHDL实现,其Synplify Pro下的RTL View如图1所示。

--file Name: ripple.vhd--Description: 带复位功能的加法计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ripple isgeneric (width: integer := 4);port(clk, rst: in std_logic;cnt: out std_logic_vector(width - 1 downto 0));end ripple;architecture a of ripple issignal cntQ: std_logic_vector(width - 1 downto 0);beginprocess(clk, rst)beginif (rst = '1') thencntQ <= (others => '0');elsif (clk'event and clk = '1') thencntQ <= cntQ + 1;end if ; end process ;cnt <= cntQ;end a;代码 1 加法计数器 VHDL 代码图 1 加法计数器 RTL 视图加法计数器的Test Bench 代码如下所示,在ModelSim 下进行功能仿真,仿真 波形结果如图 2所示。

VHDL实验报告

VHDL实验报告

VHDL练习一1、七段译码管设计流程:七段译码管的实现不需要什么运算,和逻辑,只需要设定对应关系就可以。

首先调用ieee库,调用std_logic_1164.all,然后定义实体dec7,包含输入端口clk、data_in,输出端口dec,其中clk是std_logic类型,data_in根据要求是一个整型,输出端口对应到译码管的7段器件,所以是std_logic_vector类型。

接着定义结构体实现功能,进程敏感表为clk,使用case语句分情况输出,默认共阴极译码管,0为亮灯,当输出不在0~9范围时输出中间横线。

备注:一开始使用三位二进制数作为输入,后验证可以使用整型作为输入数据。

验证模块:声明空实体dec7_tb进行测试,将参数定义,并赋初值。

对被测试原件映射,定义时钟周期20ns,时钟进程自循环进行。

主进程验证时随意选取3组数据进行测试结果:结果与设计一致,认为设计成功。

2、十进制计数器设计流程:实体counter10,输入信号reset,up_enable,clk,输出信号bcd(4位),count。

结构体设计,定义信号变量temp(4位),作为可读数,记录当前数字。

当reset有效(当1有效),计数清零,否则当up_enable有效并获得clk上升沿时,计数加1,当计数达到9,count输出一个脉冲并将计数器归零。

完成后将计数器数字输出给bcd。

后来发现可以定义bcd为inout类型,就不需要temp作为中间变量。

验证模块:分别验证计数正确性、count输出、reset功能、up_enable功能。

结果:符合设计目标,计数器到9输出脉冲,up_enable为零时不计数,reset重置。

3、序列检测器设计流程:采用5位移位寄存器实现序列检测,当reset有效,重置寄存器;否则时钟上升沿到来时进行寄存器内容左移并在最低位读入数据,检测当前寄存器内容是否满足要求,是的话输出匹配信号脉冲。

验证模块:验证模块中增加constant std_logic_vector类型的data作为输入码流,预设为16位。

分频器设计 VHDL

分频器设计 VHDL

实验报告课程名称电子设计自动化实验(基于FPGA)实验项目分频器设计(计数器设计)实验仪器计算机+ Quartus Ⅱ9.1系别信息与通信工程学院专业通信工程班级/学号学生姓名实验日期2012、5成绩_______________________ 指导教师_______________________分频器设计(计数器设计)利用VHDL语言,设计一个输入1MHz脉冲,分频后能产生100kHz、10kHz、1kHz、100Hz、10Hz、1Hz时钟脉冲产生电路。

(1)实验要求①利用VHDL语言编程;②利用仿真软件进行功能仿真;③编程下载到EP1C6Q240C8器件中,利用EDA/SOPC实验装置进行验证。

(2)实验设计注意事项实验要求每相差十倍频率都有脉冲输出,故采用十进制计数器对信号分频设计方法较为简单。

将十进制计数器做成COMPONENT,利用元件例化语句实现调用。

电路采用异步工作方式。

(3)VHDL代码LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_unsigned.all;ENTITY fenpin10 ISPORT(i:in std_logic;o:inout std_logic);END ENTITY;ARCHITECTURE func OF fenpin10 ISSIGNAL count:std_logic_vector(3 downto 0);SIGNAL tmp:std_logic;BEGINPROCESS(i)BEGINIF(i'EVENT AND i = '1') THENIF(count = "1001") THEN --当计数满9时进位count <= (OTHERS => '0');tmp <= NOT tmp;ELSEcount <= count + 1;END IF;END IF;END PROCESS;o <= tmp;END ARCHITECTURE;LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;USE IEEE.std_logic_unsigned.all;ENTITY fenpin ISPORT(clk:in std_logic;div_10:buffer std_logic;div_100:buffer std_logic;div_1000:buffer std_logic;div_10000:buffer std_logic;div_100000:buffer std_logic;div_1000000:buffer std_logic);END ENTITY;ARCHITECTURE func OF fenpin ISCOMPONENT fenpin10 --元件例化PORT(i:in std_logic;o:inout std_logic);END COMPONENT;SIGNAL x0,x1,x2,x3,x4,x5:std_logic;BEGINu1:fenpin10 PORT MAP(i => clk, o => x0);u2:fenpin10 PORT MAP(x0, x1);u3:fenpin10 PORT MAP(x1, x2);u4:fenpin10 PORT MAP(x2, x3);u5:fenpin10 PORT MAP(x3, x4);u6:fenpin10 PORT MAP(x4, x5);div_10 <= x0;div_100 <= x1;div_1000 <= x2;div_10000 <= x3;div_100000 <= x4;div_1000000 <= x5;END ARCHITECTURE;(4)仿真结果未下载验证、调试,如发现错误,见谅!——Higashi Q83831295。

(最新版)vhdl实验报告

(最新版)vhdl实验报告

福建农林大学计算机与信息学院信息工程类实验报告2013年11 月13 日实验项目列表福建农林大学计算机与信息学院信息工程类实验报告系:电子信息工程系专业:电子信息工程年级: 2010级姓名:学号:实验课程: VHDL数字系统设计实验室号:__ 田C407 实验设备号: 07 实验时间: 11.12 指导教师签字:成绩:实验一数控分频器的设计1.实验目的和要求学习数控分频器的设计、分析和测试方法。

2.实验原理信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例1所示。

数控分频器的仿真波形如图1所示:输入不同的CLK频率和预置值D,给出如图1的时序波形。

100.0μs200.0μs300.0μs400.0μs图1 当给出不同输入值D时,FOUT输出不同频率(CLK周期=50ns)3.主要仪器设备(实验用的软硬件环境)实验的硬件环境是:微机一台GW48 EDA实验开发系统一套电源线一根十芯JTAG口线一根USB下载线一根USB下载器一个示波器实验的软件环境是:Quartus II 9.0软件4.操作方法与实验步骤(1)创建工程,并命名位test。

(2)打开QuartusII,建立VHDL文件,并输入设计程序。

保存为DVF.(3)选择目标器件。

Acex1k—EP1K100QC208-3。

(4)启动编译。

(5)建立仿真波形图。

(6)仿真测试和波形分析。

(7)引脚锁定编译。

(8)编程下载。

(9)硬件测试5.实验内容及实验数据记录在实验系统上硬件验证例5-20的功能。

可选实验电路模式1(第一章图4);键2/键1负责输入8位预置数D(PIO7-PIO0);CLK由clock0输入,频率选65536Hz 或更高(确保分频后落在音频范围);输出FOUT接扬声器(SPKER)。

编译下载后进行硬件测试:改变键2/键1的输入值,可听到不同音调的声音。

【实验】VHDL实验报告

【实验】VHDL实验报告

【关键字】实验项目一数据选择器一、实验与设计要求1.熟悉MAX+PLUS II的编译环境,掌握该集成环境各个菜单项的使用;2.了解MAX+PLUSII的VHDL程序设计输入方法,初步了解该软件的仿真环境;3.初步运用VHDL编程,体会硬件描述语言的先进性;4.理解VHDL语言的并发执行的特点;5.熟悉VHDL语法6. 按照如下图示,设计一个四路的数据选择器,该电路能将四组不同的数据有选择的输出,每一组数据的宽度为4,输出那一组数据由选择开关决定,如下表:AB QCDS0S1二、实验与设计方法1.加入MAX+PLUSII软件之前,在E盘上新建一个工作目录\lyung。

2.加入MAX+PLUSII文本编辑器,编写VHDL程序,并保存文件至\lyung\mux41.vhd:3. 将工程指向当前文件并编译当前文件。

4. 建立波形仿真文件,设置输入、输出端口及输入端口的信号波形,保存波形仿真文件。

5. 加入仿真器工作环境,查看波形仿真结果。

6. 选择器件, 为电路端口分配FPGA器件引脚。

7. 进行第二次编译(包括逻辑综合和器件工艺映射),生成目标文件(*.sof等)。

8.将目标文件下载至FPGA器件。

9.在实验台上进行实际操作,验证设计的正确性。

三、实验与设计结果通过实验,初步熟悉了MAX+PLUS II的编译环境,并掌握该集成环境各个菜单项的使用。

实验过程中,了解了MAX+PLUSII的VHDL程序设计输入方法,初步运用VHDL编程,成功的按照实验要求设计了程序的VHDL源码(见附件1),熟悉了VHDL语法,理解了VHDL语言的并发执行的特点;并进行了仿真实验(仿真实验截图见图4-1),初步了解该软件的仿真环境,并成功的将文件烧入实验平台,成功通过了测试(实验平台截图见图4-2)。

四、程序源码及实验截图4-0、VHDL源码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41 ISPORT (a,b,c,d: IN STD_LOGIC_VECTOR (3 DOWNTO 0);s1,s0: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END mux41;ARCHITECTURE behave OF mux41 ISSIGNAL sel: STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINsel <= s1 & s0;q<= a WHEN sel="00" ELSEb WHEN sel="01" ELSEc WHEN sel="10" ELSEd WHEN sel="11" ELSE"XXXX";END behave ;图 4-2 实验平台实验项目二三—八译码器一、实验与设计要求1.掌握组合逻辑电路的设计的一般步骤和方法;2.掌握一般电路设计要求及其设计知识;3. 设计一个3-8译码器,此电路有三个输入端(A,B,C),八个输出端D[7··0];当输入为为不同的值(0~7)时,只有对应的输出端才有输出;如下图所示:Y7二、实验与设计方法1.建立真值表2. 编写VHDL语言程序3. 将工程指向当前文件并编译当前文件。

半整数分频器的VHDL设计

半整数分频器的VHDL设计

© 1995-2005 Tsinghua Tongfang Optical Disc Co., Ltd. All rights reserved.
林海波 :半整数分频器的 VHDL 设计
61
在 VHDL 中 ,对某个数字系统的硬件抽象称为 实体 ( ENTITY) 。实体既可以单独存在 ,也可以作为 另一个更大实体的一部分 。实体声明定义了一个设 计模块的输入和输出端口 ,即模块对外的特性 。也 就是说 ,实体声明给出了设计模块与外部的接口 ,如 果是顶层模块的话 ,就给出了芯片外部引脚定义 。 一个设计可以包括多个实体 ,描述一个实体的对外 特性及其功能 ,是设计的主要任务 。然而 ,实体只描 述了模块对外的特性 ,并没有给出模块的具体实现 。 模块的具体实现或内部具体描述由结构体 (Archi2 tecture) 来完成 ,每个实体都有与其对应的结构体语 句 ,它既可以是一个算法 ,也可以是一个结构网表 。 具体一个实体的 VHDL 程序设计的基本语法结构 如下 :
除脉冲的时间 ,使输出为一个稳定的脉冲频率 ,而不
是一次 N 分频 ,一次 N - 1 分频 。 3. 2 电路组成
分频系数为 N - 0. 5 的分频器 ,其电路可由一 个异或门 、一个模 N 计数器和二分频器组成 。在实 现时 ,模 N 计数器可设计成带预置的计数器 ,这样 可以实现任意分频系数为 N - 0. 5 的分频器 。图 1 给出了通用半整数分频器电路组成 。
表 1 半整数分频器适配分析结果
选用器件
I/ O 延迟时间 使用引脚数 工作频率
/ ns
/ MHz
EPF10 K10LC84 - 4
14. 6 6/ 84 (7. 2 %) 52. 63MHz
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

非整数分频器设计一、 输入文件输入时钟CLK: IN STD_LOGIC二、 设计思路1. 方法一:分频比交错(1) 确定K 值先根据学号S N 确定M 和N :为了保证同学们的学号都不相同,取学号的后四位,即N S =1763()mod 1920(mod 17)017mod 17S SSN N ifN then M else M N =+===由以上公式,得N=(1763 mod 19)+20=35 M=(1763 mod 17)=12 然后根据下式计算分频比K 的值:8()9N M MK N-+===8.34285714(2) 确定交错规律使在35分频的一个循环内,进行12次9分频和23次8分频,这样,输出F_OUT 平均为F_IN 的8.34285714分频。

为使分频输出信号的占空比尽可能均匀,8分频和9分频应‘交替’进(3) 设计框图:要求同步时序设计(4)代码在实体内定义两个进程(PROCESS P1和PROCESS P2),一个进程控制输出8/9分频,一个进程控制35分频周期比例输出。

控制器输出FS_CTL信号控制输出是8分频还是9分频,分频器输出C_ENB信号来控制35分频计数器计数。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DIV IS--定义实体,实体名DIVPORT(F_IN: IN STD_LOGIC;--输入时钟信号F_OUT: OUT STD_LOGIC--输出时钟信号);END DIV;ARCHITECTURE A OF DIV ISSIGNAL CN1: INTEGER RANGE 0 TO 7;--8分频计数器SIGNAL CN2: INTEGER RANGE 0 TO 8;--9分频计数器SIGNAL CN: INTEGER RANGE 0 TO 34;--整体计数器SIGNAL C_ENB: STD_LOGIC;--整体计数器时钟驱动信号SIGNAL FS_CTL: STD_LOGIC;--控制8、9分频比例信号,高电平8分频,低电平9分频BEGINP1:PROCESS(F_IN)--8、9分频计数进程BEGINIF (F_IN'EVENT AND F_IN='1') THENIF(FS_CTL='0') THEN--9分频IF CN2=8 THEN--计数CN2<=0;ELSECN2<=CN2+1;END IF;IF CN2>4 THEN--控制输出,占空比0.5F_OUT<='1';ELSEF_OUT<='0';END IF;IF CN2=8 THEN--控制整体计数器驱动信号C_ENB<='1';ELSEC_ENB<='0';END IF;ELSEIF CN1=7 THEN--8分频计数,同上CN1<=0;ELSECN1<=CN1+1;END IF;IF CN1>3 THENF_OUT<='1';ELSEF_OUT<='0';END IF;IF CN1=7 THENC_ENB<='1';ELSEC_ENB<='0';END IF;END IF;END IF;END PROCESS P1;P2:PROCESS(C_ENB)--整体计数进程BEGINIF (C_ENB'EVENT AND C_ENB='1') THEN--由驱动信号驱动IF CN=34 THEN--计数CN<=0;ELSECN<=CN+1;END IF;IF (CN=34 OR CN=2 OR CN=5 OR CN=8 OR CN=11 OR CN=14 OR CN=17 OR CN=20 OR CN=23 OR CN=26 OR CN=29 OR CN=32) THEN FS_CTL<='0';ELSEFS_CTL<='1';END IF;--8、9分频比例分配ELSE CN<=CN;END IF;END PROCESS P2;END A;2. 方法二:累加器分频(1) 设计思路假设累加器位数为8,则累加器的模值N M 为28=256。

若STEP =27,则分频比为:2569.8414814827M N K STEP ===类似地,通过改变模值N M 和步长STEP 就可以以任意精度逼近要求地分频比。

确定累加器位数M 和STEP ,K=8.34285714,得M=30,230=1073741824,STEP=128701931,此时分频比为8.342857140193180162930……,分频比精度高于10-8 (2) 原理图F-OUT(3) 代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY DIV2 IS--定义实体,实体名DIV2PORT(F_IN: IN STD_LOGIC;--输入时钟 F_OUT: OUT STD_LOGIC--输出时钟); END DIV2;ARCHITECTURE A OF DIV2 ISSIGNAL CNT: STD_LOGIC_VECTOR(29 DOWNTO 0):="000000000000000000000000000000";--30位CONSTANT STEP : INTEGER := 128701931; BEGINP1: PROCESS(F_IN) BEGINIF F_IN'EVENT AND F_IN='1' THEN CNT<=CNT+STEP;--步长相加 END IF;END PROCESS P1;F_OUT<=CNT(29);--溢出位输出 END A;3.方法一和方法二合并LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DIV3 IS--定义实体,实体名DIV3PORT(CLK: IN STD_LOGIC;--输入时钟OUT1,OUT2: OUT STD_LOGIC--两个输出时钟比较输出); END DIV3;ARCHITECTURE A OF DIV3 ISCOMPONENT DIV--方法一模块PORT(F_IN: IN STD_LOGIC;F_OUT: OUT STD_LOGIC);END COMPONENT;COMPONENT DIV2--方法二模块PORT(F_IN: IN STD_LOGIC;F_OUT: OUT STD_LOGIC);END COMPONENT;BEGINU1: DIV PORT MAP(CLK,OUT1);U2: DIV2 PORT MAP(CLK,OUT2);END A;三、仿真结果1.方法一:分频比交错(1)波形图a.一个周期b.两个周期c.放大观察分频2.方法二:累加器分频(1)波形图3.方法一和方法二合并两种方法波形比较:第一种方法产生的分频器为8分频和9分频按照一定得比例交错得到,所以在一个周期内分频比平均为8.34285714,而第二种方法是利用累加器分频,所以分频比也是呈现交替变化,但是两种方法的周期不同,所得到的分频也有一定的时序差异。

如果截取的部分小于一个周期,第一种交错方法的带哦的分频比将不等于8.34285714,存在误差。

而第二种方法在截取部分短时精确度高于第一个周期,因为分频比较为平均。

结论:第一种方法在截取部分短时没有第二种方法精确,而第二种方法分频比较为平均。

四、 实验心得在数字电路与逻辑设计实验课中,我们学习了用VHDL 语言编写了整数分频器的方法。

而在本次实验中,使用了两种方法得到分频比为小数的分频器。

两种方法都不是很困难,但是在实验的过程中,第一种方法要去同步时序设计方法,所以在编写VHDL 代码的过程中总是出现信号时序的问题,比如不能重复复制,来源过多,逻辑过于复杂等等。

不过最后都一一解决。

所以本次实验不仅仅是巩固知识的过程,也是自我提高的过程。

原来以为在设计了交通灯程序后自己对VHDL 语言的掌握已经不错,看来还有很大的程度要提高。

五、 思考题1. 在你的实验中,分频比交错的规律是怎样的?在35分频的一个循环内,进行12次9分频和23次8分频,这样,输出F_OUT 平均为F_IN 的8.34285714分频。

为使分频输出信号的占空比尽可2. 你的STEP 值是怎么确定的?为什么这样确定?假设累加器位数为8,则累加器的模值NM 为28=256。

若STEP =27,则分频比为:2569.8414814827M N K STEP ===类似地,通过改变模值N M (2的M 次幂)和步长STEP 就可以以任意精度逼近要求地分频比。

确定累加器位数M 和STEP , K=8.34285714,得M=30,STEP=128701931,精度高于10-8。

相关文档
最新文档