EDA实验报告5分频器

合集下载

EDA实验五数控分频器的设计(程序)

EDA实验五数控分频器的设计(程序)

三、实验效果分析(包过仪器设备等使用效果)三、实验效果分析:①八分频,十一分频器的程序主要包括两部分,一是先设定好计数的位数,让计数器计数,当计数满时产生溢出,使溢出标志位为高电平;二是当溢出标志位为1时,D 触发器的D状态发生翻转,从而产生高低电平的变化,而达到分频的目的,计数初值的不同,计数满所要的时钟个数也就不同,D触发器电平翻转所用的时间也就不同,频率也就不同。

②循环计数器是给定时器赋不同的初值,不同初值溢出所用的时间也就不同,状态翻转所用时间也就不同,从而达到实现不同音频循环输出的目的。

③硬件测试:写好程序连接好电路后电路能够很好的实验16种不同音频之间的循环输出,说明实验程序正确,对应的RTL仿真图形也正确。

④实验例序中的P_DIV进程的作用是当计数满产生溢出时让D触发器的状态发生翻转,D触发器状态的翻转的频率就是分频器输出的频率。

也就是做分频器的频率输出作用。

教师评语指导教师年月日江西师范大学物理与通信电子学院教学实验报告专业:电子信息工程2011年月日实验名称数控分频器的设计指导老师姓名年级学号成绩一、预习部分1、实验目的2、实验基本原理3、主要仪器设备(包含必要的元器件、工具)一、实验目的:1.了解数控分频器的设计原理以及分析和测试方法。

2.学会构造使用不同功能的数控分频器械。

二、实验基本原理:给定时器设定好初值,当计数满时溢出,产生溢出后溢出标志位D触发器取反,这样当设定不同的初值时产生一次溢出所用的时间也就不同,频率也就随之改变。

通过设定不同的初值从而产生不同的分频。

三、主要仪器设备电脑,实验箱二、实验操作步骤1.实验数据、表格及数据处理2.实验操作过程(可以用图表示)3.结论1.实验数据、表格及数据处理如下:十一分频器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sy52 isport(clk:in std_logic;d:in std_logic_vector(10 downto 0);fout:out std_logic);end ;architecture one of sy52 issignal full :std_logic;beginp_reg:process(clk)variable cnt8:std_logic_vector(10 downto 0);beginif clk'event and clk='1' thenif cnt8="11111111111"thencnt8:=d;full<='1';elsecnt8:=cnt8+1;full<='0';end if;end if;end process p_reg;p_div:process(full)variable cnt2:std_logic;beginif full'event and full='1'thencnt2:=not cnt2;if cnt2='1'thenfout<='1';elsefout<='0';end if ;end if ;end process p_div;end 2、实验操作过程如下:八分频器:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sy51 isport(clk:in std_logic;d:in std_logic_vector(7 downto 0);fout:out std_logic);end ;architecture one of sy51 issignal full :std_logic;beginp_reg:process(clk)variable cnt8:std_logic_vector(7 downto 0);beginif clk'event and clk='1' thenif cnt8="11111111"thencnt8:=d;full<='1';elsecnt8:=cnt8+1;full<='0';end if;end if;end process p_reg;p_div:process(full)variable cnt2:std_logic;beginif full'event and full='1'thencnt2:=not cnt2;if cnt2='1'thenfout<='1';elsefout<='0';end if ;end if ;end process p_div;end ;。

EDA实验报告

EDA实验报告

实验一:QUARTUS II 软件使用及组合电路设计仿真页脚内容1实验目的:学习QUARTUS II 软件的使用,掌握软件工程的建立,VHDL源文件的设计和波形仿真等基本内容。

实验内容:1.四选一多路选择器的设计基本功能及原理:选择器常用于信号的切换,四选一选择器常用于信号的切换,四选一选择器可以用于4路信号的切换。

四选一选择器有四个输入端a,b,c,d,两个信号选择端s(0)和s(1)及一个信号输出端y。

当s输入不同的选择信号时,就可以使a,b,c,d中某一个相应的输入信号与输出y端接通。

逻辑符号如下:页脚内容2程序设计:软件编译:在编辑器中输入并保存了以上四选一选择器的VHDL源程序后就可以对它进行编译了,编译的最终目的是为了生成可以进行仿真、定时分析及下载到可编程器件的相关文件。

仿真分析:仿真结果如下图所示页脚内容3分析:由仿真图可以得到以下结论:当s=0(00)时y=a;当s=1(01)时y=b;当s=2(10)时y=c;当s=3(11)时y=d。

符合我们最开始设想的功能设计,这说明源程序正确。

2.七段译码器程序设计基本功能及原理:七段译码器是用来显示数字的,7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用VHDL译码程序在FPGA或CPLD 中实现。

本项实验很容易实现这一目的。

输出信号的7位分别接到数码管的7个段,本实验中用的数码管为共阳极的,接有低电平的段发亮。

数码管的图形如下页脚内容4七段译码器的逻辑符号:程序设计:页脚内容5软件编译:在编辑器中输入并保存了以上七段译码器的VHDL源程序后就可以对它进行编译了,编译的最终目的是为了生成可以进行仿真、定时分析及下载到可编程器件的相关文件。

仿真分析:仿真结果如下图所示:页脚内容6分析:由仿真的结果可以得到以下结论:当a=0(0000)时led7=1000000 此时数码管显示0;当a=1(0001)时led7=1111001 此时数码管显示1;当a=2(0010)时led7=0100100 此时数码管显示2;当a=3(0011)时led7=0110000 此时数码管显示3;当a=4(0100)时led7=0011001 此时数码管显示4;当a=5(0101)时led7=0010010 此时数码管显示5;当a=6(0110)时led7=0000010 此时数码管显示6;当a=7(0111)时led7=1111000 此时数码管显示7;当a=8(1000)时led7=0000000 此时数码管显示8;页脚内容7当a=9(1001)时led7=0010000 此时数码管显示9;当a=10(1010)时led7=0001000 此时数码管显示A;当a=11(1011)时led7=0000011 此时数码管显示B;当a=12(1100)时led7=1000110 此时数码管显示C;当a=13(1101)时led7=0100001 此时数码管显示D;当a=14(1110)时led7=0000110 此时数码管显示E;当a=15(1111)时led7=0001110 此时数码管显示F;这完全符合我们最开始的功能设计,所以可以说明源VHDL程序是正确的。

EDA分频器的设计

EDA分频器的设计

EDA实验报告学院:班级:学号:指导老师:姓名:一、实验目的:学习数控分频器的设计,分析和测试方法。

二、实验原理:不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有计时器溢出位与预置数加载输入信号相接即可。

三、实验内容1、将4096HZ的时钟信号分频为1HZ的时钟信号。

实验原理图:实验源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dvf isport(clk_in:in std_logic;fout:out std_logic);end;architecture one of dvf issignal cnt: integer range 0 to 2048;signal clk_out:std_logic;beginprocess(clk_in)beginif clk_in'event and clk_in = '1' thenif cnt=2048 thencnt <=0;clk_out <=not clk_out;elsecnt<=cnt+1;end if;end if;end process;fout<=clk_out;end one;功能仿真波形图:实验引脚图:实验箱上工作情况:当CLOCK5接4096HZ的时钟信号时,扬声器每秒钟响一次。

2、如实验内容1将4096HZ的时钟信号分频为2HZ、8HZ、16HZ的时钟信号。

3、编写四选一MUX,可用按键控制选择分频后的某时钟。

实验原理图:实验源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dvf isport(clk:in std_logic;s: in std_logic_vector(1 downto 0);clk_out:out std_logic);end;architecture one of dvf issignal clk1_out:std_logic;signal clk2_out:std_logic;signal clk3_out:std_logic;signal clk4_out:std_logic;signal cnt2048:integer range 0 to 2048; signal cnt1024:integer range 0 to 1024; signal cnt256:integer range 0 to 256; signal cnt128:integer range 0 to 128;beginfen1: process(clk)beginif clk'event and clk = '1' thenif cnt2048=2048 thencnt2048 <=0;clk1_out <=not clk1_out;elsecnt2048<=cnt2048+1;end if;end if;end process;fen2: process(clk)beginif clk'event and clk = '1' thenif cnt1024=1024 thencnt1024 <=0;clk2_out <=not clk2_out;elsecnt1024<=cnt1024+1;end if;end if;end process;fen8: process(clk)beginif clk'event and clk = '1' thenif cnt256=256 thencnt256 <=0;clk3_out <=not clk3_out;elsecnt256<=cnt256+1;end if;end if;end process;fen16: process(clk)beginif clk'event and clk = '1' thenif cnt128=128 thencnt128 <=0;clk4_out <=not clk4_out;elsecnt128<=cnt128+1;end if;end if;end process;xuan: PROCESS(s)BEGINCASE s ISWHEN "00" => clk_out<=clk1_out;WHEN "01" => clk_out<=clk2_out;WHEN "10" => clk_out<=clk3_out;WHEN "11" => clk_out<=clk4_out;WHEN OTHERS => NULL;END CASE;END PROCESS;END;功能仿真波形:实验引脚图:实验箱上工作情况:CLOCK5接4096HZ的时钟信号,按键1、键2使输入分别为00、01、10、11,扬声器输出声音频率分别为1HZ、2HZ、8HZ、16HZ。

分频器实验报告

分频器实验报告

分频器实验报告分频器实验报告引言:分频器是电子电路中常见的一种器件,它可以将输入信号的频率降低或提高到所需的频率范围内。

在本次实验中,我们将通过搭建一个简单的分频器电路来研究其工作原理和性能。

实验目的:1. 了解分频器的基本原理和工作方式;2. 掌握分频器的搭建方法;3. 研究不同参数对分频器性能的影响。

实验器材:1. 信号发生器;2. 电阻、电容、电感等被动元件;3. 示波器;4. 电源。

实验步骤:1. 搭建分频器电路:根据实验要求,选择合适的被动元件和电路拓扑,搭建分频器电路。

2. 连接信号发生器:将信号发生器的输出端与分频器电路的输入端相连。

3. 连接示波器:将示波器的探头分别连接到分频器电路的输入端和输出端。

4. 设置信号发生器:根据实验要求,设置信号发生器的频率和幅度。

5. 测试分频器性能:通过示波器观察分频器输入信号和输出信号的波形,并记录相关数据。

6. 改变参数:根据实验要求,逐步改变分频器电路中的参数,如电阻、电容、电感等,观察其对分频器性能的影响。

7. 分析实验结果:根据实验数据和观察结果,分析分频器的工作原理和性能特点。

实验结果:通过实验观察和数据记录,我们得到了以下实验结果:1. 分频器的工作频率范围:根据实验所用的被动元件和电路拓扑,我们确定了分频器的工作频率范围。

2. 分频比的变化:通过改变分频器电路中的参数,我们观察到了分频比的变化情况,并记录了相应的数据。

3. 分频器的输出波形:通过示波器观察,我们得到了分频器输出信号的波形,并分析了其特点。

讨论与分析:根据实验结果,我们可以得出以下结论:1. 分频器的工作原理:分频器通过改变输入信号的频率来实现频率的降低或提高。

2. 分频器的性能特点:分频器的性能受到电路拓扑和被动元件参数的影响,不同的参数设置会导致不同的分频比和输出波形。

结论:通过本次实验,我们深入了解了分频器的工作原理和性能特点。

分频器作为一种常见的电子电路器件,在通信、计算机等领域有着广泛的应用。

EDA原理及应用 实验报告

EDA原理及应用 实验报告

一.基础部分1.整体框架采用自顶向下的层次化设计思路,将实现功能的各模块放入单独的文件内完成,最后通过top文件例化各个模块实现整体功能,再根据引脚约束与硬件对应。

在本例的基础部分主要分为计数频率5hz的分频,七段数码管的驱动,七段数码管扫描的频率,计数模块,16进制到10进制转换模块。

下面逐项介绍:2.计数频率5HZ分频a.设计思路由上一个实验,我们知道1HZ的分频需要计数到49999999,因此本例的5HZ应该计数到上次计数值的五分之一:9999999,也就是十六进制下的98967f,将分频后的时钟div_clk_098作为输出。

为了最终的顶层设计具有清零功能,因此对每一个子模块也加入清零引脚。

b.源代码module divclk_2_098(input clk_098,input rst_098,output reg div_clk_098);reg[31:0]counter_098;always@(posedge clk_098 or posedge rst_098)beginif(rst_098)counter_098<=32'h00000000;elseif(counter_098==32'h0098967f)//5hz分频begincounter_098<=32'h00000000;div_clk_098<=~div_clk_098;endelsecounter_098<=counter_098+1;endendmodule3.数码管刷新频率分频a.设计思路根据人眼的视觉暂留效应,当数码管的刷新频率很快的时候,看上去会像多个数码管通识导通。

但原有100MHZ的主频太快,以此刷新并不能实现效果,查阅资料并实际测试,让其计数到60000左右可以完成任务,最终选取了61567,即16进制下的f07f,将输出scan_clk_098作为顶层文件中的七段数码管的时钟进行驱动刷新。

EDA数控分频器设计的实验报告

EDA数控分频器设计的实验报告
青岛理工大学
实验报告
专业班级:电子092姓名:林明辉学号:200901122
实验课程:EDA技术实用教材
项目名称:
一.实验目的:1.了解并掌握QuartusⅡ使用方法
2.学Байду номын сангаас8位数码扫描器显示电路设计
3.实验箱的运用
实验原理:其中每个数码管的8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。被选通的数码管显示数据,其余关闭。如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
二.实验步骤:1.先编好底层文件—数控分频器程序
2.编好8位数码扫描显示电路程序
3.把两个底层文件设置成符号文件
4.调用以上两个符号文件连成以下电路图
三.实验仪器:电脑一台
实验箱一个
四.数据记录及处理:

EDA实验报告5_乐曲硬件演奏电路设计

EDA实验报告5_乐曲硬件演奏电路设计

EDA技术与应用实验报告姓名学号专业年级电子信息工程实验题目乐曲硬件演奏电路设计实验目的1.学习利用数控分频器设计硬件乐曲演奏电路2.掌握模块化和层次化的设计方法以及音符编码的设计思想实验原理1.一定频率的矩形波通过扬声器可以发出相应频率的声音,乐曲是由一系列的音符组成的。

所以,如果我们通过控制每个音符的发音频率值及其持续的时间,就可以以纯硬件的手段,利用这些数值来实现所希望演奏的乐曲。

2.该硬件演奏电路由三个模块构成<1>音符数据ROM的地址发生器模块NoteTabs.vhdl内置8位二进制计数器,作为ROM的地址发生器,计数频率4Hz,即每一计数值的停留时间为0.25s,恰为全音符设为1s时,四四拍的4音符持续时间。

随着NoteTabs中的计数器按4Hz的时钟速率作加法计数即地址值递增时,ROM中的音符数据将通过ToneIndex[3..0]输向ToneTaba模块,乐曲即开始演奏起来。

<2>乐曲简谱码对应的分频预置数查表电路模块ToneTaba.vhdlToneTaba为Speakera提供决定所发音符的分频预置数,此数在Speakera输入口停留的时间即为此音符的节拍值。

输入Index[3..0]可确定乐曲全部音符所对应的分频预置数(13个)每一音符的停留时间由NoteTabs模块的clk决定(4Hz)。

<3>决定每一个音符音调的数控分频器模块Speakera.vhdl输入端clk输入一较高频率(12MHz)的信号,经Speakera分频,再经2分频以展宽脉冲后,由SpkOut输出。

11位预置数Tone[10..0]决定由clk输入信号的分频比,SpkOut输出的频率决定每一音符的音调。

实验内容1.定制存放LPM-ROM模块Music,在连续地址上存放乐曲的音符数据,2.用vhdl文本输入法和元件例化语句完成NoteTabs.vhdl的设计,该模块包含音符数据ROM模块Music.vhdl3.完成ToneTaba.vhdl的设计,此模块给数控分频模块提供每个音符所对应的分频预置数,即计数初值4.完成Speakera.vhdl的设计,该模块是一个初值可变的加法计数器。

数字逻辑实验报告(5分频器)

数字逻辑实验报告(5分频器)

课程名称:数字逻辑实验实验项目:5分频器的原理及实现姓名:专业:计算机科学与技术班级:计算机14-8班学号:计算机科学与技术学院实验教学中心2015年12月15日实验项目名称: 5分频器的原理及实现一、实验要求设计一个5分频器,使输出信号的频率是时钟脉冲信号频率的1/5。

二、实验目的掌握分频器的逻辑功能及应用方法,利用分频器设计实际电路。

三、实验内容5分频器功能分析:我们采用同步加法计数器的方法设计分频器。

由于分频器在每个时钟脉冲的作用下,状态都会发生变化,我们可以设置前两个脉冲计数状态下的外部信号输出为1,后3个脉冲计数脉冲状态下,输出信号为0。

这样保证完整周期的时钟信号,该时钟周期是时钟脉冲信号周期的5倍,实现了5分频的目的。

由功能分析,5分频器真值表如下:由上表可以得到同步计数器函数表达式: +由以上4式可以画出逻辑电路图,如下:四、实验步骤 建立一个新的文件夹打开Quartus Ⅱ后,新建工程,输入工程名。

2131)1(3321)1(2321)1(1)(Q Q Z Q Q Q Q Q Q Q Q Q Q Q n n n ==⊕==+++选择仿真器件,器件选择FLEX10K,芯片选择EPF10K10TC144-4 。

新建“Block Diagram/Schematic File”文件画逻辑图并编译。

新建“Vector Waveform File”波形文件,设置好输入的波形,保存文件并分析仿真波形。

选择“Assignments”->“Pins”,绑定管脚并编译。

选择“Tools”->“Programmer”点击“Start”下载到芯片并进行逻辑验证。

五、实验设备LP-2900逻辑设计实验平台,计算机,QuartusⅡ六、实验结果仿真波形如下:经过验证,仿真波形符合设计要求。

EDA实验报告

EDA实验报告

批次序号: 5
桂林电子科技大学电子工程与自动化学院
EDA 实验报告
辅导员意见:
实验名称:数控分频设计专业:测控技术与仪器
学号:1600810530 姓名:姚鸿林
实验日期:2018.11.8 成绩辅导员签名:
一、实验目的
学习数控分频器的设计、分析和测试方法
二、实验任务
用Verilog语言设计一个4位的数控分频器。

当输入不同的CLK时钟频率和预置值D时,FOUT输出不同频率的信号
三、实验内容及结果
1、用verilog 设计一个分频器。

程序如下所示。

2、时序波形仿真如下。

3、计数器是分频器的基础,如果有一个预置数data[3..0],从data开始计数,计数至“1111”时产生进位,那么分频值为:
分频值=“1111”-data[3..0]+1
在时序波形仿真中,fen即为分频值。

4、设计原理图模块。

利用数目管显示data计数到15。

一个数码管显示A~F。

5、锁定引脚。

打开硬件系统,连接到电脑,选择正确的芯片类型,然后进行引脚锁定。

根据硬件系统上的标号,认真锁定引脚。

6、软件下载,硬件调试。

将程序下载到硬件系统,正常计数,波动拨码开关控制清零使能端等。

四、实验总结
数控分频计的设计,相当于设计一个可预置的加法器,首先设计一个0-15的加法器,然后再添加一个可预置值data,输出信号的一个周期包含了N个时钟信号的周期,就相当于N分频,分频值=“1111”-预置值+1。

顶层文件的文件名应该跟模块名一样,而底层文件则不能跟顶层文件名字相同。

EDA实验五报告

EDA实验五报告

实验五按键消抖和分频器电路设计一、实验目的学习和掌握使用Verilog语言设计按键去抖动电路和分频器的方法二、实验原理分频器就是简单的加法计数器,对于偶数分频和奇数分频应注意其占空比的问题。

当按一次按健时,由于按健有反应时间、有大量的毛刺产生(抖动),可能按一次机器感应到几次。

消抖就是让在按键正常反应时间内机器只感应一次按键效果,防止误操作。

消抖的原理是:当检测到有键按下时,并不认为有键按下,而是等待20ms后,再次判断是否有键按下,若有则认为确实有键按下;若没有则认为上次的按键是误操作。

三、实验内容1.分频器设计:使用实验箱左下角的时钟频率源,编写一段Verilog程序,使led发光管,每隔1S闪烁一次。

程序设计:module clk5M_1s(clk5M,clk1s);input clk5M;output clk1s;parameter i1=4999;parameter i2=999;reg [12:0]t1,t2;reg k;reg clk1s;always @(posedge clk5M)begin //进行5000分频if(t1<=i1) t1<=t1+1'b1; else t1<=1'b0;if(t1==i1) k<=k+1'b1;endalways @(posedge k)begin //进行1000分频if(t2<=i2) t2<=t2+1'b1; else t2<=1'b0;if(t2==i2) clk1s<=clk1s+1'b1;endendmodule分析:选用的时钟频率源为5M,如果产生频率为1Hz的脉冲使led发光管每隔1s亮一次,则共需分频5000000次,因此分频次数超过内部芯片1个计数器所能承受的范围,故需用两个计数器进行两次分频,即程序中所指出的第一次5000分频,第二次1000分频。

河南工业大学EDA技术 实验报告实验五 用LPM设计8位数控分频器和4位乘法器

河南工业大学EDA技术 实验报告实验五  用LPM设计8位数控分频器和4位乘法器

河南工业大学EDA技术实验报告专业电科班级姓名学号 2 实验地点6526+ 6215 实验日期-11-4 成绩评定一、实验项目实验五用LPM设计8位数控分频器和4位乘法器二、实验目的掌握LPM模块的参数设置方法以及设计和应用方法。

三、实验原理对于高速测控系统,影响测控速度最大的因素可能是,在测得必要的数据并经过复杂的运算后,才能发出控制指令。

因此数据的运算速度决定了此系统的工作速度。

为了提高运算速度,可以用多种方法来解决,如高速计算机、纯硬件电路、ROM查表式运算器等。

用高速计算机属于软件解决方案,用纯硬件运算器属于硬件解决方案,而ROM属于查表式运算解决方案。

数控分频器的功能要求为:若在其输入端给定不同的数据,其输出脉冲具有相应的对输入时钟的分频比。

设计流程是首先按照原理图输入的设计步骤,通过元件输入窗在原理图编辑窗中调入兆功能块,并按图连接起来,其中计数器LPM-COUNTER模块的参数设置可按照以下介绍的方法进行。

硬件乘法器有多种实现方法,相比之下,由高速RAM构成乘法表方式的乘法表方式的乘法器的运算速度最快。

8位数控分频器电路原理图用LPM_ROM设计的4位乘法器原理图DFF的VHDL代码:(1)8位数控分频器数控分频器的功能要求为:若在其输入端给定不同的数据,其输出脉冲具有相应的对输入时钟的分频比。

(2)4位乘法器硬件乘法器有多种实现方法,相比之下,由高速RAM构成乘法表方式的乘法表方式的乘法器的运算速度最快。

一个4×4bit查表式乘法器乘法表文件如下图所示;四、仿真结果及分析下图即为8位数控分频器的仿真结果,仿真参数设置时具体设置界面如下图所示,波形图如图;下图即为乘法器的仿真结果,仿真参数设置时具体设置界面如下图所示;五、硬件验证过程及结果分析数控分频器的硬件验证时通过数码管来观察分频器的数据变化情况。

4位乘法器的硬件测试引脚并连接至插槽,通过数码管来观察数据相乘后的结果。

分频器实验报告

分频器实验报告

分频器实验报告
《分频器实验报告》
实验目的:通过实验分频器的工作原理,了解其在电子电路中的应用。

实验器材:信号发生器、示波器、分频器、电压表、电流表、导线等。

实验原理:分频器是一种能够将输入信号按照一定的频率分成不同频率的输出
信号的电路。

在实验中,我们将使用信号发生器产生一个特定频率的信号,然
后通过分频器将其分成不同频率的输出信号,最后通过示波器观察输出信号的
波形。

实验步骤:
1. 将信号发生器的输出端连接到分频器的输入端,将分频器的输出端连接到示
波器。

2. 调节信号发生器的频率,观察示波器上的波形变化。

3. 记录不同频率下的输出波形,并测量输出信号的电压和电流。

实验结果:通过实验我们观察到,在不同频率下,分频器的输出波形呈现出不
同的频率特性,符合分频器的工作原理。

同时,我们还测量了输出信号的电压
和电流,验证了分频器的输出特性。

实验结论:分频器是一种广泛应用于电子电路中的重要器件,通过实验我们深
入了解了分频器的工作原理和特性。

在实际应用中,分频器可以用于信号处理、通信系统、音频设备等领域,具有重要的应用价值。

通过本次实验,我们不仅对分频器有了更深入的了解,同时也提高了对电子电
路原理的理解和应用能力。

希望通过今后的实验和学习,能够更加深入地掌握
电子电路的知识,为未来的科研和工程实践打下坚实的基础。

实验五 EDA 数控分频器的设计

实验五  EDA 数控分频器的设计

实验五数控分频器的设计一、实验目的1、学习数控分频器的设计、分析和测试方法。

2、了解和掌握分频电路实现的方法。

3、掌握EDA技术的层次化设计方法。

二、实验原理数控分频器的功能就是当输入端给定不同的输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器来设计完成的,方法是将计数溢出位与预置数加载输入信号相接得到。

三、实验内容本实验要求完成的任务是在时钟信号的作用下,通过输入八位的按键开关输入不同的数据,改变分频比,使输出端口输出不同频率的时钟信号,过到数控分频的效果。

在实验中时,数字时钟选择2HZ作为输入的时钟信号,用八个按键开关做为数据的输入,当八个按键开关置为一个二进制数时,在输出端口输出对应频率的时钟信号,用输出端口接LED灯来观察频率的变化。

四、实验步骤1、打开QUARTUSII软件,新建一个工程。

2、建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。

3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序.4、 编写完VHDL 程序后,保存起来。

方法同实验一。

5、 对自己编写的VHDL 程序进行编译并仿真,对程序的错误进行修改。

6、 编译仿真无误后,依照按键开关、LED 与FPGA 的管脚连接表(表1-1、表1-2)或参照附录进行管脚分配。

表5-1是示例程序的管脚分配表。

分配完成后,再进行全编译一次,以使管脚分配生效。

端口名 使用模块信号 对应FPGA 管脚说 明 INCLK CLOCK2 17 时钟为10KHZDATA0 键1 1 分频比数据 DATA 1 键2 2 DATA 2 键3 3 DATA 3 键4 4 DATA4 键5 5 DATA 5 键6 6 DATA 6 键7 7 DATA 7 键8 10 FOUTLED 灯 D111分频输出 表5-1 端口管脚分配表7、 “模式选择键”:按动该键能使实验板产生12种不同的实验电路结构。

EDA原理及应用 实验报告

EDA原理及应用 实验报告

一.基础部分1.整体框架采用自顶向下的层次化设计思路,将实现功能的各模块放入单独的文件内完成,最后通过top文件例化各个模块实现整体功能,再根据引脚约束与硬件对应。

在本例的基础部分主要分为计数频率5hz的分频,七段数码管的驱动,七段数码管扫描的频率,计数模块,16进制到10进制转换模块。

下面逐项介绍:2.计数频率5HZ分频a.设计思路由上一个实验,我们知道1HZ的分频需要计数到49999999,因此本例的5HZ应该计数到上次计数值的五分之一:9999999,也就是十六进制下的98967f,将分频后的时钟div_clk_098作为输出。

为了最终的顶层设计具有清零功能,因此对每一个子模块也加入清零引脚。

b.源代码module divclk_2_098(input clk_098,input rst_098,output reg div_clk_098);reg[31:0]counter_098;always@(posedge clk_098 or posedge rst_098)beginif(rst_098)counter_098<=32'h00000000;elseif(counter_098==32'h0098967f)//5hz分频begincounter_098<=32'h00000000;div_clk_098<=~div_clk_098;endelsecounter_098<=counter_098+1;endendmodule3.数码管刷新频率分频a.设计思路根据人眼的视觉暂留效应,当数码管的刷新频率很快的时候,看上去会像多个数码管通识导通。

但原有100MHZ的主频太快,以此刷新并不能实现效果,查阅资料并实际测试,让其计数到60000左右可以完成任务,最终选取了61567,即16进制下的f07f,将输出scan_clk_098作为顶层文件中的七段数码管的时钟进行驱动刷新。

EDA实验报告

EDA实验报告

实验一:QUARTUS II 软件使用及组合电路设计仿真实验目的:学习QUARTUS II 软件的使用,掌握软件工程的建立,VHDL 源文件的设计和波形仿真等基本内容。

实验内容:1.四选一多路选择器的设计基本功能及原理:选择器常用于信号的切换,四选一选择器常用于信号的切换,四选一选择器可以用于4路信号的切换。

四选一选择器有四个输入端a,b,c,d,两个信号选择端s(0)和s(1)及一个信号输出端y。

当s输入不同的选择信号时,就可以使a,b,c,d中某一个相应的输入信号与输出y端接通。

逻辑符号如下:程序设计:软件编译:在编辑器中输入并保存了以上四选一选择器的VHDL源程序后就可以对它进行编译了,编译的最终目的是为了生成可以进行仿真、定时分析及下载到可编程器件的相关文件。

仿真分析:仿真结果如下图所示分析:由仿真图可以得到以下结论:当s=0(00)时y=a;当s=1(01)时y=b;当 s=2(10)时y=c;当s=3(11)时y=d。

符合我们最开始设想的功能设计,这说明源程序正确。

2.七段译码器程序设计基本功能及原理:七段译码器是用来显示数字的,7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用VHDL译码程序在FPGA或CPLD中实现。

本项实验很容易实现这一目的。

输出信号的7位分别接到数码管的7个段,本实验中用的数码管为共阳极的,接有低电平的段发亮。

数码管的图形如下七段译码器的逻辑符号:程序设计:软件编译:在编辑器中输入并保存了以上七段译码器的VHDL源程序后就可以对它进行编译了,编译的最终目的是为了生成可以进行仿真、定时分析及下载到可编程器件的相关文件。

仿真分析:仿真结果如下图所示:分析:由仿真的结果可以得到以下结论:当a=0(0000)时led7=1000000 此时数码管显示0;当a=1(0001)时led7=1111001 此时数码管显示1;当a=2(0010)时led7=0100100 此时数码管显示2;当a=3(0011)时led7=0110000 此时数码管显示3;当a=4(0100)时led7=0011001 此时数码管显示4;当a=5(0101)时led7=0010010 此时数码管显示5;当a=6(0110)时led7=0000010 此时数码管显示6;当a=7(0111)时led7=1111000 此时数码管显示7;当a=8(1000)时led7=0000000 此时数码管显示8;当a=9(1001)时led7=0010000 此时数码管显示9;当a=10(1010)时led7=0001000 此时数码管显示A;当a=11(1011)时led7=0000011 此时数码管显示B;当a=12(1100)时led7=1000110 此时数码管显示C;当a=13(1101)时led7=0100001 此时数码管显示D;当a=14(1110)时led7=0000110 此时数码管显示E;当a=15(1111)时led7=0001110 此时数码管显示F;这完全符合我们最开始的功能设计,所以可以说明源VHDL程序是正确的。

eda实验数控分频器

eda实验数控分频器

数控分频器一实验目的:学习数控分频器的设计,分析和测试方法。

二实验原理:数控分频器的功能就是当在输入端给定不同输入数值时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数器溢出位与预置数加载输入信号相接即可。

三实验内容:(1)打开quartus,在菜单中点击new,选择vhdl,在出现的窗口中输入vhdl代码并保存。

其中代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY EX9 ISPORT (clk : IN STD_LOGIC; -- IO30(P125)d : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- IO47..IO40 (P133, P132, P131, P130, P121, P120, P119, P118)pfull: OUT STD_LOGIC; -- IO01(P38)fout : OUT STD_LOGIC -- IO00(P37));END EX9;ARCHITECTURE behv OF EX9 ISSIGNAL full: STD_LOGIC;BEGINp_reg:PROCESS(clk)V ARIABLE cnt8: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF clk'EVENT AND clk = '1' THENIF cnt8 = "11111111" THENcnt8 := D; -- 计数满后置入初值重新计数full <= '1'; -- 置计数满信号ELSEcnt8 := cnt8 + 1;full <= '0';END IF;END IF;pfull <= full; -- 输出full用于观察END PROCESS p_reg;p_div: -- 将full信号除2,生成方波信号PROCESS(full)V ARIABLE cnt: STD_LOGIC;BEGINIF full'EVENT AND full = '1' THENcnt := NOT cnt;END IF;fout <= cnt;END PROCESS p_div;END behv;(2)创建工程之后对编译之前的参数进行设置,启动start compilation项,其编译结果如下:(3)时序仿真:对仿真前参数设置后启动start simulation,直到出现simulation was successful,仿真结束。

分频器实验报告

分频器实验报告

实验二:分频器`timescale 1ns / 1psmodule Timer(CLKin,RST,CLK1); //分频模块输出2Hz信号input CLKin,RST; //系统时钟信号50MHz和复位信号output CLK1; //分频后的脉冲信号reg [26:0]counter; //计数器reg tmp;always @(negedge RST,posedge CLKin)if(!RST)begincounter<=0;tmp<=0;endelse if(counter==12500000-1)begincounter<=0;tmp<=~tmp;endelse counter<=counter+1;assign CLK1=tmp; //状态输出endmodule//先验证分频模块是否好用module Div_freg1(CLK1,CLK2);//将2Hz信号二分频变为1Hz input CLK1;output CLK2;reg[1:0] count;reg clk_tmp;parameter SET_K=2'd2;assign CLK2=clk_tmp;always@(posedge CLK1)beginif(count==SET_K)begincount<=0;clk_tmp<=~clk_tmp;endelse count<=count+1;endendmodulemodule Div_freg2(CLK1,CLK3);//将2Hz信号四分频变为0.5Hz input CLK1;output CLK3;reg[2:0] count;reg clk_tmp;parameter SET_K=3'd4;assign CLK3=clk_tmp;always@(posedge CLK1)beginif(count==SET_K)begincount<=0;clk_tmp<=~clk_tmp;endelse count<=count+1;endendmodulemodule Div_freg3(CLK1,CLK4);//将2Hz信号八分频变为0.25Hz input CLK1;output CLK4;reg[3:0] count;reg clk_tmp;parameter SET_K=4'd8;assign CLK4=clk_tmp;always@(posedge CLK1)beginif(count==SET_K)begincount<=0;clk_tmp<=~clk_tmp;endelse count<=count+1;endendmodulemodule Div_freg4(CLK1,CLK5);//将2Hz信号十六分频变为0.125Hz input CLK1;output CLK5;reg[4:0] count;reg clk_tmp;parameter SET_K=5'd16;assign CLK5=clk_tmp;always@(posedge CLK1)beginif(count==SET_K)begincount<=0;clk_tmp<=~clk_tmp;endelse count<=count+1;endendmodulemodule KEY_select(KEY,CLK2,CLK3,CLK4,CLK5,CLK);//信号选择模块input [1:0] KEY;input CLK2,CLK3,CLK4,CLK5;output reg CLK;always@(KEY)begincase(KEY)2'b00:CLK<=CLK2;2'b01:CLK<=CLK3;2'b10:CLK<=CLK4;2'b11:CLK<=CLK5;endcaseendendmodulemodule top_v(CLKin,RST,CLK,KEY);input CLKin,RST;input [1:0]KEY;output CLK;wire w0,w1,w2,w3,w4;Timer U1(.CLKin(CLKin),.RST(RST),.CLK1(w0));Div_freg1 U2(.CLK1(w0),.CLK2(w1));Div_freg2 U3(.CLK1(w0),.CLK3(w2));Div_freg3 U4(.CLK1(w0),.CLK4(w3));Div_freg4 U5(.CLK1(w0),.CLK5(w4));KEY_select U6(.KEY(KEY),.CLK2(w1),.CLK3(w2),.CLK4(w3),.CLK5(w4),.CLK(CLK)); endmodule实验三:12小时模式`timescale 1ns / 1psmodule second(clk,clr,en,sech,secl,enmin);//秒钟计数模块input clr,clk,en;output [3:0]sech,secl;output enmin;reg [7:0]count;assign sech=count[7:4];assign secl=count[3:0];assign enmin=((count==8'h59)&&(en==1'b1))?1:0;always@(posedge clk,negedge clr)beginif(!clr) count<=8'h00;else if(en)beginif(count==8'h59)count<=8'h00;else if(count[3:0]==9)count<=count+7;else count<=count+1;endendendmodulemodule minute (clk,clr,en,minh,minl,enhr); //分钟计数模块input clr,clk,en;output[3:0]minh,minl;output enhr ;reg [7:0] count ;assign minh=count [7:4];//分钟十位assign minl=count [3:0];//分钟个位assign enhr=(count==8'h59&&en==1'b1)?1:0;//产生进位信号always@(posedge clk,negedge clr )beginif(!clr) count<=8'h00;//低电平复位,异步复位else if(en)beginif ( count==8'h59) count <=8'h00;//计满60清零else if ( count [3:0]==9) count <= count +7;// BCD 码调整else count <=count +1;endendendmodulemodule hour(clk,clr,en,hrh,hrl,judge);//时钟计数模块input clr,clk,en;output reg judge;//十二小时判断output [3:0] hrh,hrl;reg [7:0] count;assign hrh=count [7:4];//时钟十位assign hrl=count [3:0];//时钟个位always@(posedge clk,negedge clr)beginif(!clr)count<=8'h00;//低电平复位,异步复位else if(en )beginif (count==8'h12)beginif(judge==0)begin judge<=~judge;count<=8'h01;end//记满12点之后变为下午一点else if(judge==1)begin judge<=~judge;count<=8'h01;end//记满下午12点之后变为凌晨1点end//计满12清零else if (count [3:0]==9)count<=count+7;// BCD 码调整else count <=count +1;endendendmodulemodule div_freg(clk,clk1hz,clk_scan); //分频模块input clk;//系统时钟50MHzoutput clk1hz, clk_scan;//clk1hz为1Hz, clk _ scan 为数码管扫描时钟reg[24:0]count;//计数器,最大计数值为25000000-1reg clk_tmp ;parameter SET_K =25000-1;//设置分频系数SET_Kassign clk1hz=clk_tmp;assign clk_scan=count[14];//分频比为2^15//逻辑功能实现always@(posedge clk)beginif(count==SET_K)//判断计数值begincount<=0;//到达计数值,计数器将会被清零clk_tmp<=~clk_tmp ;//同时改变计数寄存器的状态endelse count<=count+1;//计数器加1endendmodulemodule seg_select(clk,sech,secl,minh,minl,hrh,hrl,seg_sel,q,judge); //数码管选通模块input [3:0] sech,secl,minh,minl,hrh,hrl;//待显示的字符input judge;input clk;//数码管扫描时钟output reg [3:0] q;//当前显示的字符output reg [2:0] seg_sel;//数码管位选信号reg [2:0]cnt;always @( posedge clk )beginif(cnt==3'd7)cnt<=0;else cnt<=cnt+1;case(cnt)3'd0: begin q<= secl;seg_sel<=3'b000; end //扫描秒钟个位3'd1: begin q<= sech;seg_sel<=3'b001; end //扫描秒钟十位3'd2: begin q<= minl;seg_sel<=3'b010; end //扫描分钟个位3'd3: begin q<= minh;seg_sel<=3'b011; end //扫描分钟十位3'd4: begin q<= hrl;seg_sel<=3'b100; end //扫描时钟个位3'd5: begin q<= hrh;seg_sel<=3'b101; end //扫描时钟十位3'd6: begin q<= 4'b1010;seg_sel<=3'b110; end //分隔符3'd7:beginif(judge==0)begin q<=4'b1011;seg_sel<=3'b111;endelse if(judge==1)begin q<=4'b1100;seg_sel<=3'b111;endend //上下午default: q<= 4'b1111;//数码管共阳,不显示endcaseendendmodulemodule decoder (q,seg);//数码管显示模块input [3:0] q;//当前显示的字符output reg[7:0] seg;//数码管段选信号输出always@(q)begincase(q)4'b0000:seg<=8'b11000000;//数码管共阳,显示数据"0"4'b0001:seg<=8'b11111001;//数码管共阳,显示数据"1"4'b0010:seg<=8'b10100100;//数码管共阳,显示数据"2"4'b0011:seg<=8'b10110000;//数码管共阳,显示数据"3"4'b0100:seg<=8'b10011001;//数码管共阳,显示数据"4"4'b0101:seg<=8'b10010010;//数码管共阳,显示数据"5"4'b0110:seg<=8'b10000010;//数码管共阳,显示数据"6"4'b0111:seg<=8'b11111000;//数码管共阳,显示数据"7"4'b1000:seg<=8'b10000000;//数码管共阳,显示数据"8"4'b1001:seg<=8'b10010000;//数码管共阳,显示数据"9"4'b1010:seg<=8'b10111111;//数码管共阳,显示数据"-"4'b1011:seg<=8'b10001000;//数码管共阳,显示数据"A"4'b1100:seg<=8'b10001100;//数码管共阳,显示数据"P"default:seg<=8'b11111111;//数码管共阳,不显示endcaseendendmodulemodule top_v(clk,clrn,seg,seg_sel);//顶层模块input clk,clrn;//clk为系统时钟输入,clrn 为异步清零端号output [7:0] seg ; //数码管段选信号输出output [2:0] seg_sel ;//数码管位选信号输出wire w0,w1,w2,w3,w5,w12;wire[3:0] w4,w6,w7,w8,w9,w10,w11;assign w2=1;//秒钟模块计数使能端设置为高电平,允许计数minute U1(.clk(w0),.clr(clrn),.en(w1),.enhr(w3),.minh(w8),.minl(w9));second U2(.clk(w0),.clr(clrn),.en(w2),.enmin(w1),.sech(w10),.secl(w11));hour U3(.clk(w0),.clr(clrn),.en(w3),.hrh(w6),.hrl(w7),.judge(w12));div_freg U4(.clk(clk),.clk1hz(w0),.clk_scan(w5));decoder U5(.q(w4),.seg(seg));seg_selectU6(.clk(w5),.hrh(w6),.hrl(w7),.minh(w8),.minl(w9),.sech(w10),.secl(w11),.q(w4),.seg_sel(seg_sel ),.judge(w12));endmodule实验三:24小时模式`timescale 1ns / 1psmodule second(clk,clr,en,sech,secl,enmin);//秒钟计数模块input clr,clk,en;output [3:0]sech,secl;output enmin;reg [7:0]count;assign sech=count[7:4];assign secl=count[3:0];assign enmin=((count==8'h59)&&(en==1'b1))?1:0;always@(posedge clk,negedge clr)beginif(!clr) count<=8'h00;else if(en)beginif(count==8'h59)count<=8'h00;else if(count[3:0]==9)count<=count+7;else count<=count+1;endendendmodulemodule minute (clk,clr,en,minh,minl,enhr); //分钟计数模块input clr,clk,en;output[3:0]minh,minl;output enhr ;reg [7:0] count ;assign minh=count [7:4];//分钟十位assign minl=count [3:0];//分钟个位assign enhr=(count==8'h59&&en==1'b1)?1:0;//产生进位信号always@(posedge clk,negedge clr )beginif(!clr) count<=8'h00;//低电平复位,异步复位else if(en)beginif ( count==8'h59) count <=8'h00;//计满60清零else if ( count [3:0]==9) count <= count +7;// BCD 码调整else count <=count +1;endendendmodulemodule hour(clk,clr,en,hrh,hrl);//时钟计数模块input clr,clk,en;output [3:0] hrh,hrl;reg [7:0] count;assign hrh=count [7:4];//时钟十位assign hrl=count [3:0];//时钟个位always@(posedge clk,negedge clr)beginif(!clr)count<=8'h00;//低电平复位,异步复位else if(en )beginif(count==8'h23)count<=8'h00;//计满24清零else if (count [3:0]==9)count<=count+7;// BCD 码调整else count <=count +1;endendendmodulemodule div_freg(clk,clk1hz,clk_scan); //分频模块input clk;//系统时钟50MHzoutput clk1hz, clk_scan;//clk1hz为1Hz, clk _ scan 为数码管扫描时钟reg[24:0]count;//计数器,最大计数值为25000000-1reg clk_tmp ;parameter SET_K =25000000-1;//设置分频系数SET_Kassign clk1hz=clk_tmp;assign clk_scan=count[14];//分频比为2^15//逻辑功能实现always@(posedge clk)beginif(count==SET_K)//判断计数值begincount<=0;//到达计数值,计数器将会被清零clk_tmp<=~clk_tmp ;//同时改变计数寄存器的状态endelse count<=count+1;//计数器加1endendmodulemodule seg_select(clk,sech,secl,minh,minl,hrh,hrl,seg_sel,q); //数码管选通模块input [3:0] sech,secl,minh,minl,hrh,hrl;//待显示的字符input clk;//数码管扫描时钟output reg [3:0] q;//当前显示的字符output reg [2:0] seg_sel;//数码管位选信号reg [2:0]cnt;always @( posedge clk )beginif(cnt==3'd7)cnt<=0;else cnt<=cnt+1;case(cnt)3'd0: begin q<= secl;seg_sel<=3'b000; end //扫描秒钟个位3'd1: begin q<= sech;seg_sel<=3'b001; end //扫描秒钟十位3'd2: begin q<= 4'b1010;seg_sel<=3'b010; end //分隔符3'd3: begin q<= minl;seg_sel<=3'b011; end //扫描分钟个位3'd4: begin q<= minh;seg_sel<=3'b100; end //扫描分钟十位3'd5: begin q<= 4'b1010;seg_sel<=3'b101; end //分隔符3'd6: begin q<= hrl;seg_sel<=3'b110; end //扫描时钟个位3'd7: begin q<= hrh;seg_sel<=3'b111; end //扫描时钟十位default: q<= 4'b1111;//数码管共阳,不显示endcaseendendmodulemodule decoder (q,seg);//数码管显示模块input [3:0] q;//当前显示的字符output reg[7:0] seg;//数码管段选信号输出always@(q)begincase(q)4'b0000:seg<=8'b11000000;//数码管共阳,显示数据"0"4'b0001:seg<=8'b11111001;//数码管共阳,显示数据"1"4'b0010:seg<=8'b10100100;//数码管共阳,显示数据"2"4'b0011:seg<=8'b10110000;//数码管共阳,显示数据"3"4'b0100:seg<=8'b10011001;//数码管共阳,显示数据"4"4'b0101:seg<=8'b10010010;//数码管共阳,显示数据"5"4'b0110:seg<=8'b10000010;//数码管共阳,显示数据"6"4'b0111:seg<=8'b11111000;//数码管共阳,显示数据"7"4'b1000:seg<=8'b10000000;//数码管共阳,显示数据"8"4'b1001:seg<=8'b10010000;//数码管共阳,显示数据"9"4'b1010:seg<=8'b10111111;//数码管共阳,显示数据"-"default:seg<=8'b11111111;//数码管共阳,不显示endcaseendendmodulemodule top_v(clk,clrn,seg,seg_sel);//顶层模块input clk,clrn;//clk为系统时钟输入,clrn 为异步清零端号output [7:0] seg ; //数码管段选信号输出output [2:0] seg_sel ;//数码管位选信号输出wire w0,w1,w2,w3,w5;wire[3:0] w4,w6,w7,w8,w9,w10,w11;assign w2=1;//秒钟模块计数使能端设置为高电平,允许计数minute U1(.clk(w0),.clr(clrn),.en(w1),.enhr(w3),.minh(w8),.minl(w9));second U2(.clk(w0),.clr(clrn),.en(w2),.enmin(w1),.sech(w10),.secl(w11));hour U3(.clk(w0),.clr(clrn),.en(w3),.hrh(w6),.hrl(w7));div_freg U4(.clk(clk),.clk1hz(w0),.clk_scan(w5));decoder U5(.q(w4),.seg(seg));seg_selectU6(.clk(w5),.hrh(w6),.hrl(w7),.minh(w8),.minl(w9),.sech(w10),.secl(w11),.q(w4),.seg_sel(seg_sel ));endmodule实验四:红外传感器控制步进电机//---------------------------------------------------------------------------//--描述:红外驱动模块//---------------------------------------------------------------------------/*Timing control.`define HEAD_HIGH 24'h6_DDD0 // 9.000ms @ 50MHz, standard is 24'h6_DDD0.`define HEAD_LOW24'h3_6EE8 // 4.500ms @ 50MHz, standard is 24'h3_6EE8`define BIT_0_HIGH24'h6D60 // 0.560ms @ 50MHz, standard is 24'h6D60`define BIT_0_LOW24'h6E5A // 0.565ms @ 50MHz, standard is 24'h6E5A`define BIT_1_HIGH24'h6D60 // 0.560ms @ 50MHz, standard is 24'h6D60`define BIT_1_LOW24'h1_4A14 // 1.685ms @ 50MHz, standard is 24'h1_4A14`define REP_HEAD_HIGH 24'h6_DDD0 // 9.000ms @ 50MHz, standard is 24'h6_DDD0.`define REP_HEAD_LOW24'h1_B774 // 2.250ms @ 50MHz, standard is 24'h1_B774`define REP_BIT_HIGH24'h6D60 // 0.560ms @ 50MHz, standard is 24'h6D60`define REP_BIT_LOW24'hF4240 // 20.00ms @ 50MHz, standard is 24'hF4240 *///high_time 为红外引导码9ms低电平,(high_time[23:14] == `HEAD_HIGH)//24'h6_DDD0 = (0110_11)01_1101_1101_0000 的[23:14]是(01_1011) = 10'h1B//1B+14个0=6C000 X 20ns = 8.85ms`define HEAD_HIGH 10'h1B//(0110_11)01_1101_1101_0000 约8.85ms`define HEAD_LOW10'hD//(0011_01)10_1110_1110_1000 约4.26ms`define BIT_0_HIGH10'h1//(0000_01)10_1101_0110_0000 约0.33ms`define BIT_0_LOW10'h1//(0000_01)10_1110_0101_1010 约0.33ms`define BIT_0_LOW210'h2//(0000_10)00_0000_0000_0000 约0.66ms`define BIT_1_HIGH10'h1//(0000_01)10_1101_0110_0000 约0.33ms`define BIT_1_LOW10'h5//(0001_01)00_1010_0001_0100 约1.64ms`define BIT_1_LOW210'h4//(0001_00)00_0000_0000_0000 约1.31ms`define REP_HEAD_HIGH 10'h1B//(0110_11)01_1101_1101_0000 约8.85ms`define REP_HEAD_LOW10'h6//(0001_10)11_0111_0111_0100 约1.97ms`define REP_BIT_HIGH10'h1//(0000_01)10_1101_0110_0000 约0.33ms`define REP_BIT_LOW10'h3D//(1111_01)00_0010_0100_0000 约19.99msmodule Ir_Module(//输入端口CLK_50M,RST_N,IR_DATA,//输出端口o_ir_data);//---------------------------------------------------------------------------//--外部端口声明//---------------------------------------------------------------------------input CLK_50M;//系统时钟input RST_N;//系统复位input IR_DATA;//红外输入管脚output [ 7:0]o_ir_data;//从红外读出的数据//---------------------------------------------------------------------------//--内部端口声明//---------------------------------------------------------------------------reg[ 3:0]ir_fsm_cs;//状态机的当前状态reg[ 3:0]ir_fsm_ns;//状态机的下一个状态reg[23:0]time_cnt;//计时器reg[23:0]time_cnt_n;//time_cnt的下一个状态reg[23:0]low_time;//低电平计时器(实际是高电平)reg[23:0]low_time_n;//low_time的下一个状态reg[23:0]high_time;//高电平计时器(实际是低电平)reg[23:0]high_time_n; //high_time的下一个状态reg[ 7:0]bit_cnt;//用来记录8位串行红外数据组成一个字节reg[ 7:0]bit_cnt_n;//bit_cnt的下一个状态reg[ 1:0]detect_edge;//检测边沿寄存器wire[ 1:0]detect_edge_n;//detect_edge的下一个状态reg[31:0]ir_data;//从红外读出的数据reg[31:0]ir_data_n;//ir_data的下一个状态reg[31:0]ir_data_reg;//红外数据的缓存寄存器reg[31:0]ir_data_reg_n;//ir_data_reg的下一个状态reg posedge_reg;//检测上升沿wire posedge_reg_n;//posedge_reg的下一个状态wire head_code;//红外引导码wire bit_0_code;//逻辑0(实际逻辑1)wire bit_1_code;//逻辑1(实际逻辑0)wire rep_head_code;//重复引导码wire rep_bit_code; //重复码parameter FSM_IDLE = 4'h0;//空闲状态parameter FSM_DATA = 4'h1;//串行数据接收状态parameter FSM_DATA_END= 4'h2;//数据接收完成状态parameter FSM_REP_BIT = 4'h3;//处理重复码状态parameter FSM_REP_BIT_END= 4'h4;//重复码处理完成状态//时序电路,用来给detect_edge寄存器赋值always @ (posedge CLK_50M or negedge RST_N)beginif(!RST_N)//判断复位detect_edge <= 2'h0;//初始化detect_edge值elsedetect_edge <= detect_edge_n;//用来给detect_edge赋值end//组合电路,检测上升沿assign detect_edge_n = {detect_edge[0] , {~IR_DA TA}};//将红外信号取反并接收//时序电路,用来给posedge_reg寄存器赋值always @ (posedge CLK_50M or negedge RST_N)beginif(!RST_N)//判断复位posedge_reg <= 1'h0;//初始化posedge_reg值elseposedge_reg<= posedge_reg_n;//用来给posedge_reg赋值end//组合电路,判断上升沿,如果detect_edge等于01,posedge_reg_n就置1assign posedge_reg_n = (detect_edge == 2'b01) ? 1'b1 : 1'b0;//时序电路,用来给time_cnt寄存器赋值always @ (posedge CLK_50M or negedge RST_N)beginif(!RST_N)//判断复位time_cnt<= 24'h0;//初始化time_cnt值elsetime_cnt<= time_cnt_n;//用来给time_cnt赋值end//组合电路,计数器用于记录高电平或者低电平的脉冲宽度always @ (*)beginif(detect_edge[0] != detect_edge[1])//判断电平变化time_cnt_n = 24'h0;//如果红外信号发生变化,time_cnt_n就从0开始计数elsetime_cnt_n = time_cnt + 24'h1;//否则,time_cnt就加1end//时序电路,用来给high_time寄存器赋值always @ (posedge CLK_50M or negedge RST_N)beginif(!RST_N)//判断复位high_time <= 24'h0;//初始化high_time值elsehigh_time <= high_time_n;//用来给high_time赋值end//组合电路,实际记录的是IR_DA TA上的低电平宽度,因为上面对IR_DATA做了一次取反操作always @ (*)beginif(detect_edge == 2'b10)//判断下降沿high_time_n = time_cnt;//如果判断为下降沿,则开始计数elsehigh_time_n = high_time;//否则保持不变end//时序电路,用来给low_time寄存器赋值always @ (posedge CLK_50M or negedge RST_N)beginif(!RST_N)//判断复位low_time <= 24'h0;//初始化low_time值elselow_time <= low_time_n;//用来给low_time赋值end//组合电路,实际记录的是IR_DA TA上的高电平宽度,因为上面对IR_DATA做了一次取反操作always @ (*)beginif(IR_DATA)//判断高电平low_time_n= time_cnt;//如果判断为高电平,则开始计数elselow_time_n= low_time;//当IR_DATA变成0时就保持不变end//低电平至少8.85ms,高电平至少4.26ms,就被认为是引导码,head_code就为1assign head_code = (high_time[23:14] == `HEAD_HIGH) && (low_time[23:14] == `HEAD_LOW) && posedge_reg;//低电平至少0.33ms,高电平至少0.33ms或者0.66ms,被认为是逻辑"0",bit_0_code就为1 assign bit_0_code = (high_time[23:14] == `BIT_0_HIGH) && ((low_time[23:14] == `BIT_0_LOW) || (low_time[23:14] == `BIT_0_LOW2)) && posedge_reg;//低电平至少0.33ms,高电平至少1.31ms或者1.66ms,被认为是逻辑"1",bit_1_code就为0 assign bit_1_code = (high_time[23:14] == `BIT_1_HIGH) && ((low_time[23:14] == `BIT_1_LOW) || (low_time[23:14] == `BIT_1_LOW2)) && posedge_reg;//重复引导码assign rep_head_code = (high_time[23:14] == `REP_HEAD_HIGH) && (low_time[23:14] == `REP_HEAD_LOW) && posedge_reg;//重复码assign rep_bit_code = (high_time[23:14] == `REP_BIT_HIGH) && (low_time[23:14] == `REP_BIT_LOW) && posedge_reg;//时序电路,用来给bit_cnt赋值的always @ (posedge CLK_50M or negedge RST_N)beginif(!RST_N)//判断复位bit_cnt<= 8'h0;//初始化bit_cntelsebit_cnt<= bit_cnt_n;//用来给bit_cnt赋值end//组合电路,用来记录8位串行红外数据组成一个字节always @ (*)beginif(ir_fsm_cs != FSM_DA TA)//判断状态机当前状态是否在接收数据状态bit_cnt_n= 8'h0;//如果不等于,bit_cnt_n则清零else if((ir_fsm_cs == FSM_DATA) && posedge_reg)//判断状态机当前状态是否在接收数据状态以及是否在上升沿bit_cnt_n= bit_cnt + 8'h1;//如果条件成立,则记录8位串行红外数据elsebit_cnt_n= bit_cnt;//否则保持不变end//时序电路,用来给ir_fsm_cs赋值的always @ (posedge CLK_50M or negedge RST_N)beginif(!RST_N)//判断复位ir_fsm_cs<= FSM_IDLE;//初始化ir_fsm_cs的值elseir_fsm_cs<= ir_fsm_ns;//用来给ir_fsm_cs赋值end//组合电路,状态机的控制核心always @ (*)begincase(ir_fsm_cs)//判断当前的状态FSM_IDLE:if(head_code)//收到引导码后ir_fsm_ns = FSM_DA TA;//进入串行接收状态else if(rep_head_code)//收到重复码后ir_fsm_ns = FSM_REP_BIT;//进入处理重复码状态elseir_fsm_ns = ir_fsm_cs; //否则保持不变FSM_DATA:if(bit_cnt == 8'h20)//接收4个字节(地址码,地址反码,命令码,命令反码)ir_fsm_ns = FSM_DA TA_END;//接收完毕后,进入数据完成状态else if(rep_head_code || head_code || rep_bit_code)//判断重复码ir_fsm_ns = FSM_IDLE;//进入空闲状态elseir_fsm_ns = ir_fsm_cs;//否则保持不变FSM_DATA_END:ir_fsm_ns = FSM_IDLE;//进入空闲状态FSM_REP_BIT:if(rep_bit_code)//判断重复码ir_fsm_ns = FSM_REP_BIT_END;//进入重复码处理完成状态else if(rep_head_code || head_code || bit_0_code || bit_1_code) //判断重复码ir_fsm_ns = FSM_IDLE;//进入空闲状态elseir_fsm_ns = ir_fsm_cs; //否则保持不变FSM_REP_BIT_END:ir_fsm_ns = FSM_IDLE;//进入空闲状态default:ir_fsm_ns = FSM_IDLE; //进入空闲状态endcaseend//时序电路,用来给ir_data_reg赋值的always @ (posedge CLK_50M or negedge RST_N)beginif(!RST_N)//判断复位ir_data_reg<= 32'h0;//初始化ir_data_reg elseir_data_reg<= ir_data_reg_n;//用来给ir_data_reg赋值的end//组合电路,记录接收到的串行码32bit,每接收一位,判断是0还是1后移位保存。

实训五分频器电路的设计

实训五分频器电路的设计

实训五分频器电路的设计实训五分频器电路的设计一、实训目的1.掌握整数分频器的设计。

2.掌握一种非倍频分频器的设计。

3.掌握任意脉冲宽度分频器的设计。

4.掌握任意分频器的设计。

二、实训器材1.EDA实验箱1台2.微型计算机1台3.MAX+PLUSII10.2软件1套4.下载电缆1条三、实训原理(略)四、设计程序(参考程序)在数字电路中,常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号。

我们知道,在硬件电路设计中时钟信号是最重要的信号之一。

下面我们介绍分频器的VHDL 描述,在源代码中完成对时钟信号CLK 的 2 分频,4 分频,8 分频,16 分频。

这也是最简单的分频电路,只需要一个计数器即可。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clkdiv ISPORT(clk : IN STD_LOGIC;clk_div2 : OUT STD_LOGIC;clk_div4 : OUT STD_LOGIC;clk_div8 : OUT STD_LOGIC;clk_div16 : OUT STD_LOGIC);END clk_div;ARCHITECTURE rtl OF clk_div ISSIGNAL count : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk)BEGINIF (clk'event AND clk=' 1' ) THENIF(count=” 1111” ) THENCount <= (OTHERS =>' 0' );ELSECount <= count +1;END IF ;END IF ;END PROCESS;clk_div2 <= count(0);clk_div4 <= count(1);clk_div8 <= count(2);clk_div16 <= count(3);END rtl;对于分频倍数不是2的整数次幂的情况,我们只需要对源代码中的计数器进行一下计数控制就可以了,如下面源代码描述一个对时钟信号进行 6 分频的分频器。

分频器实验报告

分频器实验报告
如何设计分频器
1 摘要
时 序 电 路 第 一 个 应 用 是 拿 来 做 计 数 器 , 有 了 计 数 器 的 基 础 后, 就 可 以 拿 计 数 器 来 设 计 分 频 器, 最后希望能做出任意整数分频器和小数 分 频 器 。 使 用 环 境 为 ModelSim-Altera 6.5e (Quartus II 10.0) Starter Edition 。
图 10
1/3 占空比 4.5 分频 testbench 程序

4.5 分频仿真波形如下:
图 11 1/3 占空比 4.5 分频仿真波形
5 总结
本次实验的程序编写是参考实验指导和网络资料来进行, 在编译时出现过很 多的小错误, 对于 verilogHDL 语言熟练程度也仅仅是在一些基本的语言规范上。 对于 EDA 技术所知道的也是很基本的一些常识。此次实验可以让课本的知识结 合实际操作,对提高动手能力有一定的帮助作用。
2 偶数分频
偶 数 分 频 器 的 实 现 非 常 简 单 , 通 过 计 数 器 计 数 就 完 全 可 以 实 现。 如 进 行 N 倍 偶 数 分 频 ,就 可 以 通 过 由 待 分 频 的 时 钟 触 发 计 数 器 计 数, 当 计 数 器 从 0 计 数 到 N/2-1 时 ,输 出 时 钟 进 行 翻 转 ,并 给 计 数 器 一 个 复 位 信 号 ,以 使 下 一 个 时 钟 从 零 开 始 计 数 。以 此 循 环 ,就 可 以 实 现 任 意的偶数分频。 � 这里以二分频为例,程序如下:
开始
上升或下 降沿
count=9
yes
count=0
count=3
yes
o_clk 翻转
count= count +1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA实验报告
奇数分频器
通信1401
滕桃梅201431003102
徐淌洋201431003127
一:实验要求
要求完成一个占空比为50%的任意奇数次7分频的电路。

对于实现占空比为50%的N倍奇数分频,首先要进行上升沿触发以进行模N计数,计数选定到某一个值再进行输出时钟翻转,然后过(N-1)/2再次进行翻转,就可得到一个占空比为50%的奇数n分频时钟。

再同时进行下降沿触发的模N计数,当其到达与上升沿触发输出时钟翻转选定值相同时,再进行输出时钟翻转,同样,经过(N-1)/2时,输出时钟再次翻转以生成占空比为50,的奇数n分频时钟。

将这两个占空比为50,的n分频时钟相或运算,就可以得到占空比为50%的奇数n分频时钟。

二:实验器材:quartus 2软件
三:实验程序
四:实验仿真图
五:实验心得
通过本次实验掌握了奇数分频的几种方法,进一步掌握了分频电路的原理。

相关文档
最新文档