分频器设计实验报告

合集下载

EDA分频器实验报告 含有实验程序、仿真图像 三分频 八分频

EDA分频器实验报告  含有实验程序、仿真图像  三分频  八分频
always @(negedge clk_in) begin
if(!rst_n) begin
t2<=0;
k2<=0;
end
else begin
if(t2==2'b10) begin
t2<=0;
k2<=k2;
end
else begin
t2<=t2+1;
k2<=!k2;
end
end
end
assign clk_out=k1|k2;
endmodule
2、八分频器程序:
moduleba(inclk,tick);
output tick;
input inclk;
reg [1:0] t;
reg tick;
always @ (posedge inclk)
begin
if(t==3)
begin
tick =~tick;
t=0;
end
else t=t+1;
end
endmodule
五、实验仿真波形
六、实验总结和感想
通过这次实验我对PLD的设计流程有了更深的感触,明白了其设计的一般步骤及方法,为以后的Quartus Ⅱ的综合设计奠定了基础。同时,对于分频器程序的编写有了更深的认识,这能更好的促进我们以后的理论学习。实验过程中也必须本着不骄不躁、耐心严谨,否则容易出错而达不到实验要求。
三、实验内容
1、根据要求设计三分频器、八分频器。
2、对设计的分频器进行波形仿真分析。
四、三位、八位简易频率计程序
1、三分频器程序
modulesan(clk_in,rst_n,clk_out);
input clk_in;

分频器设计实验报告

分频器设计实验报告

分频器设计实验报告竭诚为您提供优质文档/双击可除分频器设计实验报告篇一:n分频器分析与设计一、实验目的掌握74190/74191计数器的功能,设计可编程计数器和n分频器,设计(n-1/2)计数器、分频器。

二、实验原理分频是对输入信号频率分频。

1、cD4017逻辑功能2、74190/74191逻辑功能3、集成计数器级联当所需计数器模数超过所选计数器最大计数状态时,需要采取多片计数器级联。

方法分为异步级联和同步级联。

4、集成计数器的编程在集成计数器的时序基础上,外加逻辑门电路等,反馈集成计数器的附加功能端,达到改变计数器时序的目的。

可采用复位编程和置数编程两种。

5、多片74190/74191计数器级联可根据具体计数需求和增减需求,选用74190或74191,选择不同功能、同步或异步设计等。

6、74190/74191计数器编程由于没有复位端,因此只能使用置数编程,置数端置为0即可异步置数。

可根据需求设计n进制加法或减法计数器。

n与译码逻辑功能如下。

7、74191组成(n-1/2)分频器电路如下图:u3计数器的两个循环中,一个循环在cp的上升沿翻转;另一个是在cp的下降沿翻转,使计数器的进制减少1/2,达到(n-1/2)分频。

三、实验仪器1、直流稳压电源1台2、信号发生器1台3、数字万用表1台4、实验箱1台5、示波器1台四、仿真过程1、按照cD4017和74191功能表验证其功能。

2、74191组成可编程计数器(1)构成8421bcD十进制加法计数器,通过实验验证正确性,列出时序表。

设计图如下仿真波形如下(2)构成8421bcD十进制减法计数器,通过实验验证正确性,列出时序表。

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

分频器设计实验报告

分频器设计实验报告

分频器设计实验报告一、实验目的本次实验的主要目的是设计并实现一个分频器,以深入理解数字电路中频率分频的原理和实现方法,掌握相关的电路设计和调试技能。

二、实验原理分频器是一种数字电路,用于将输入的时钟信号的频率降低为原来的 1/N,其中 N 为分频系数。

常见的分频器有偶数分频器和奇数分频器。

偶数分频器的实现相对简单,可以通过计数器来实现。

当计数器计数值达到分频系数的一半时,输出信号翻转,从而实现偶数分频。

奇数分频器的实现则较为复杂,通常需要使用多个触发器和组合逻辑电路来实现。

在本次实验中,我们将分别设计一个偶数分频器(以 4 分频为例)和一个奇数分频器(以 3 分频为例)。

三、实验器材1、数字电路实验箱2、示波器3、逻辑分析仪4、集成电路芯片(如 74LS 系列芯片)四、实验步骤(一)4 分频器的设计与实现1、原理图设计使用 74LS161 四位二进制同步计数器作为核心器件。

将计数器的时钟输入端连接到输入时钟信号。

将计数器的输出端 Q2 和 Q0 通过与门连接到一个 D 触发器的时钟输入端。

将 D 触发器的输出端作为 4 分频器的输出。

2、硬件连接按照原理图在数字电路实验箱上进行芯片的插装和连线。

3、调试与测试输入一个频率稳定的时钟信号。

使用示波器观察输入时钟信号和输出分频信号的波形,验证是否实现了 4 分频。

(二)3 分频器的设计与实现1、原理图设计使用两个 D 触发器和一些组合逻辑门(如与门、或门等)来实现 3 分频。

第一个 D 触发器的输出作为第二个 D 触发器的输入。

通过组合逻辑门对两个 D 触发器的输出进行处理,得到 3 分频的输出信号。

2、硬件连接按照原理图在数字电路实验箱上进行芯片的插装和连线。

3、调试与测试输入一个频率稳定的时钟信号。

使用示波器观察输入时钟信号和输出分频信号的波形,验证是否实现了 3 分频。

五、实验结果(一)4 分频器实验结果通过示波器观察输入时钟信号和输出分频信号的波形,发现输出信号的频率为输入信号频率的 1/4,成功实现了 4 分频功能。

分频器实验报告

分频器实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

课程设计—分频器的制作

课程设计—分频器的制作

电子技术课程设计报告学院:专业班级:学生姓名:学号:指导教师:完成时间:成绩:分频器的制作设计报告一. 设计要求把1000HZ的信号分成500Hz,100Hz的信号,用拨动开关控制。

发挥部分:1、200Hz信号的产生 2、倍频信号的产生。

二. 设计的作用、目的1、掌握运用中规模集成芯片设计分频器的方法。

2、掌握使用与非门、555单稳态产生倍频信号的方法。

三.设计的具体实现1、单元电路设计(或仿真)与分析1、分频信号的产生:电路图如下74ls192是同步十进制可逆计数器,具有双时钟输入,并具有异步清零等功能。

在此电路中,计数器处于加计数状态,输入脉冲1000Hz由5脚输入,用清零法组成进制可变的计数器,并通过单刀双掷开关控制。

仿真结果图如下:①当开关拨到1档时,上面频率计数器计输入信号频率为1000Hz,下面频率计数器计数频率为500Hz信号。

②当开关拨到2档时,上面频率计数器计输入信号频率为1000Hz,下面输出频率计数器显示100Hz信号。

2、200Hz信号的产生:电路图如下74ls192是同步十进制可逆计数器,具有双时钟输入,并具有异步清零等功能。

仿真结果图如下:在此电路中,计数器处于加计数状态,输入脉冲1000Hz由5脚输入,用清零法组成进制可变的计数器,2脚即输出200Hz信号。

2、倍频信号的产生:倍频信号原理图如下,输入信号由最左端输入方波(频率大于1000Hz并且峰峰值大于3v小于5v效果好)其中第一个与非门连接成非门使用,起着对输入信号倒相的作用。

这样,当有一个方波脉冲信号输入时,由C1、R1组成的微分电路将在脉冲信号的前沿产生一个正向微分脉冲信号,同时在方波下降沿处产生负向脉冲,另一路经过反相后,C2、R2微分电路产生负向脉冲(另一路产生正向脉冲同时)和负向脉冲,经过二极管滤除正向脉冲作为555单稳态的2脚触发端输入信号,而555单稳态3脚输出倍频后的方波。

仿真结果图如下:左端频率计数器显示的是输入的1000Hz的信号,右端频率计数器显示的是倍频后输出的2000Hz的信号示波器显示:号2000Hz。

实验四 数控分频器的设计

实验四 数控分频器的设计

实验四、数控分频器的设计
(1)实验目的:学习数控分频器的设计、分析和Modelsim仿真方法。

(2)实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,参考代码中的数控分频器是用可并行预置的加法计数器设计完成的,当加法计数器溢出时进行并行预置。

(3)实验内容1:分析参考代码中的各语句功能、设计原理、逻辑功能,根据图1的波形提示,编写相应的Testbench文件代码,并用Modelsim进行仿真(仿真可以跳过时钟分频到100hz进程)。

(4)实验内容2:在此基础上进行硬件验证。

实验方法为:将clk接20Mhz 时钟信号,rst_n接核心板开关S1,fout接发光二极管SD0,预置值d从DKA0-DKA7输入,改变d的输入,从发光二极管SD0判断输出信号的频率。

(5)实验附加内容:将参考代码扩展成16位分频器,并提出此项设计的实用示例,如PWM的设计等。

(6)思考题:怎样利用2个参考代码中给出的模块设计一个电路,使其输出方波的正负脉宽的宽度分别由两个8位输入数据控制?
(7)附加题:从实验中你可以得到设计硬件电子琴的方法吗?
图1 当给出不同输入值d时,fout输出不同频率(clk周期=50ns)
参考代码。

分频器设计报告

分频器设计报告

数控分频器设计报告一、设计目的学习数控分频器的设计、分析和测试方法。

以quartusⅡ为开发平台,用VHDL语言和原理图结合的方法设计占空比为50%的5分频电路、6分频电路和5.5分频电路,通过功能选择键选择需要的分频比。

二、功能描述CLK输入为待分频的信号。

当S1S0输入为时,该数控分频器输出分频比为;当S1S0输入为时,该数控分频器输出分频比为;当S1S0输入为时,该数控分频器输出分频比为;三、设计原理数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。

用VHDL语言设计占空比为50%的任意奇数次、偶数次分频电路,用原理图输入法设计5.5分频电路,通过3选一数据选择器选择需要的分频电路,从而达到实验目的。

四、设计流程(1)占空比为50%的5分频电路1、新建文件夹d:\fenpin52、打开quartusⅡ创建工程fenpin53、新建vhdl文本,输入设计程序(见附1),保存为fenpin5.vhd4、启动编译,建立仿真波形图(见附2)5、将该5分频电路封装设置成可调用的元件。

附图1:附图2:(2)占空比为50%的6分频电路1、新建文件夹d:\fenpin62、打开quartusⅡ创建工程enpin63、新建vhdl文本,输入设计程序(见附3),保存为fenpin6.vhd4、启动编译,建立仿真波形图(见附4)5、将该6分频电路封装设置成可调用的元件。

附图3:附图4:(3)5.5分频电路1、用VHDL输入法设计模为6的计数器M6并设置为可调用元件(VHDL文件见附5)。

2、设计D触发器DFF,实现其clk上升沿到来时Q输出取反(附6)。

3、新建文件夹d:\fenpin3,将计数器M6和触发器DFF的vhd文件和bsf文件复制到fenpin3文件夹下,打开quartusⅡ创建工程fenpin34、设计5,5分频电路的顶层文件(附7),保存为fenpin3.bdf5、启动编译,建立仿真波形图(见附8)6、将该5.5分频电路封装设置成可调用的元件。

分频器实验报告

分频器实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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设计。

二、实验原理
在数字电路中,常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号。

下面讲讲对各种分频系数进行分频的方法:
第一,偶数倍分频:偶数倍分频是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。

如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并使计数器复位,使得下一个时钟从零开始计数。

以此循环下去。

这种方法可以实现任意的偶数分频。

第二,奇数倍分频:奇数倍分频有两种实现方法:首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。

即是在计数值在邻近的1和2进行了两次翻转。

这样实现的三分频占空比为1/3或者2/3。

如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。

这种方法可以实现任意的奇数分频。

三、实验内容
1.设计分频器,可以对输入时钟信号CLK进行2分频、4分频、8分频、16分频
2.设计分频器,可以对输入时钟信号CLK进行3分频,且要求输出时钟占空比为50%(选做)
四、实验报告要求
根据实验内容,在quartusⅡ中编写出VHDL实验程序,完成程序编译,建立起波形文件,设置将要分频的源信号clk时钟信号为1KHZ,将仿真的结果附在实验报告中。

分频器实验报告

分频器实验报告

实验二:分频器`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 摘要
时 序 电 路 第 一 个 应 用 是 拿 来 做 计 数 器 , 有 了 计 数 器 的 基 础 后, 就 可 以 拿 计 数 器 来 设 计 分 频 器, 最后希望能做出任意整数分频器和小数 分 频 器 。 使 用 环 境 为 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. 背景奇数分频器是一种电子电路模块,主要用于将输入的时钟信号进行分频,并输出比输入频率低的信号。

奇数分频器的主要应用场景包括计数器、时钟频率降低等。

2. 分析2.1 奇数分频器的工作原理奇数分频器通常采用了三角波类型的振荡器来产生输入时钟信号,并通过相应的逻辑门电路对时钟信号进行分频。

常见的奇数分频器包括模2、模4和模8等。

以模8奇数分频器为例,其工作原理如下:1.奇数分频器接收输入时钟信号,并通过一个振荡器产生三角波类型的输入信号。

2.输入信号经过逻辑门电路进行分频,产生分频后的信号。

3.输出信号经过滤波电路以去除杂散信号。

4.输出信号即为输入信号的1/8。

2.2 奇数分频器的主要特点奇数分频器的主要特点包括:•输入输出频率比例为奇数,如1/2、1/4、1/8等;•分频系数固定,无法调节;•输出信号的相位与输入信号相同;•输出信号的波形稳定,幅值与输入信号相同。

2.3 奇数分频器的设计要求为了设计一个稳定可靠的奇数分频器,需要满足以下要求:•选用合适的逻辑门电路,以实现所需的分频倍数;•设计合适的滤波电路,以去除杂散信号;•保证输入输出电路的匹配性,以确保信号的传输稳定性;•选择合适的元器件,以满足设计要求,并考虑成本和可获得性。

3. 实验步骤及结果3.1 实验步骤本实验以模8奇数分频器为例,设计了以下实验步骤:1.准备实验所需的元器件和设备。

2.搭建电路原型。

3.设计逻辑门电路,实现1/8分频。

4.测试电路,检查信号传输和波形稳定性。

5.调整滤波电路,优化输出信号质量。

6.记录实验数据。

3.2 实验结果在实验中,成功搭建了模8奇数分频器电路,并进行了测试。

实验结果表明,输入信号的频率为100kHz,输出信号的频率为12.5kHz,且波形稳定。

4. 结论在本次实验中,我们成功设计了一个模8奇数分频器,实现了1/8分频。

实验结果表明,输入信号经过分频后,输出信号的频率比例为奇数,并且波形稳定,符合设计要求。

(预习要求)实验六任意进制分频器

(预习要求)实验六任意进制分频器

实验六任意进制分频器实验
1、实验内容:
《实验4.4任意进制分频器实验》――Page 90.
2、主要任务:
(1)、预习时:
熟悉实验步骤中任务,预习报告中画出电路连接原理图,并在每
个原理图上标注使用管脚,方便实验时连线!
(2)、实验时:
提供:74LS10或00一片、74LS161芯片两片!
3、实验预习要求:
实验课前检查预习报告、发给实验芯片、开始实验;
4 实验内容及步骤:
(1)利用74LS161的清零端CR设计一个12分频器。

当时钟频率为1Hz时,用发光二极管显示74LS161的Q A~Q D的输出状态,并填入表3-4-6中。

预习时画出电路图
(2)利用74LS161的置数端(LD)设计一个12分频器。

当时钟频率为1Hz时,用发光二极管显示74LS161Q A~Q D的输出状态,并填入表3-4-6中。

当时钟频率为10kHz时,观察并记录CO与CP的波形。

(3)用两片74LS161和74LS10设计33和23分频器
输入时钟频率为10kHz时,观察CP脉冲、第一个161芯片的CO1和第二个161芯片的CO2的波形。

(4)当分频器为23时,把第2号74LS161芯片的CT
和CT T对调,
P
观察并记录CP脉冲、CO1和CO2的波形。

分频器设计

分频器设计

10K,30k,50k分频器设计报告学院:电子信息学院班级:10918T姓名:张涛学号:26任课教师:李玲10K,30k,50k分频器设计报告一、设计要求:由方波振荡器产生的方波信号经分频处理,产生频率为10kHz、30kHz和50kHz 的方波分频信号,占空比为50%。

二、方案设计:在现代数字逻辑电路设计中,分频器是一种基本电路。

通常用来对某个给定频率进行分频,以得到所需的频率。

整数分频器的实现非常简单,可采用标准的计数器(分频器),也可以采用可编程逻辑器件设计实现。

本次采用的设计输入是Max+plus2中的文本编辑器。

三、设计过程本次设计采用的是VHDL语言的设计输入,程序如下:architecture a of fenpinqi issignal count10:integer range 0 to 920;signal count30:integer range 0 to 320;signal count50:integer range 0 to 192;begin----------10kprocess(sysclk,rst)beginif rst='1' thencount10<=0;clk10k<='0';elsif sysclk'event and sysclk='1' thenif count10=960 thenclk10k<= not clk10k;count10<=0;end if;end if;end process;-----------30kprocess(sysclk,rst)beginif rst='1' thencount30<=0;clk30k<='0';elsif sysclk'event and sysclk='1' then if count30=320 thenclk30k<= not clk30k;count30<=0;else count30<=count30+1;end if;end if;end process;-----------50kprocess(sysclk,rst)beginif rst='1' thencount50<=0;clk50k<='0';elsif sysclk'event and sysclk='1' then if count50=192 thenclk50k<= not clk50k;count50<=0;end if;end if;end process;end a;图1 10K仿真波形图图2 30K仿真波形图图3 50K仿真波形图图4 分频器仿真波形图三、结论与体会本次设计是用VHDL语言的设计输入,进一步加深了我对VHDL语言的认识,由于采用的是软件电路的设计输入,故不能了解其底层的一些误差和产生这些误差的原因!理论知识是在实践中得到升华的,把课堂知识运用到实际的工程项目中才能发挥出其作用。

非整数分频器---课程设计实验报告2

非整数分频器---课程设计实验报告2

设计二 非整数分频器设计一、实验目的1、掌握非整数分频器设计的两种方法;2、仿真比较两种方法的优缺点;3、进一步熟练掌握VHDL 语言特点及其数字系统设计方法;二、实验内容与设计思路(1)确定K 值,设计一个K 值分频器先根据自己学号S N 确定M 和N :这里为了保证学号都不相同,取学号后四位,故取N s =0707;然后根据以下公式:()mod 1920(mod 17)017mod 17SS S N N ifN thenM else M N =+===得N=(707 mod 19)=4+20=24,M=(707 mod 17)=10; 然后根据下式计算分频比K 的值:...41666666.82410*9)1024(89)(8=+-=+-=N M M N K (2)实现方法一:分频比交错1、确定交错规律。

根据上面计算K 值过程可得出:使在24分频的一个循环内,进行10次9分频和14次8分频,这样,输出F_OUT 平均为F_IN 的8.41666666…分频。

为使分频输出(3)实现方法二:累加器分频1、设计原理图如下F-OUT2、方法二算法为:累加器位数是M ,则累加器模值为N M ,分频比为,STEPN K M 通过改变模值N M 和步长STEP 就可以以任意精度逼近要求地分频比。

由于实验要求分频比精度高于10-8,因此在这里选取累加器位数M=30,则N M =230=1073741824,STEP=127573286,则根据方法二算法得出K=8.146666667...,显然分频比精度高于10-8,满足要求。

三、输入原文件(VHDL 源程序)1、方法一模块VHDL 源程序为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY div_89_control IS --定义分频比交错法实体,实体名为div_89_control PORT(F_IN: IN STD_LOGIC; --输入时钟信号F_OUT1: OUT STD_LOGIC --输出时钟信号);END div_89_control;ARCHITECTURE a OF div_89_control IS --定义结构体,结构体名为A SIGNAL cnt1: INTEGER RANGE 0 TO 8; --9分频计数器SIGNAL cnt2: INTEGER RANGE 0 TO 7; --8分频计数器SIGNAL cnt: INTEGER RANGE 0 TO 23; --23分频控制器状态信号SIGNAL C_ENB: STD_LOGIC; --23分频控制器时钟驱动信号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 cnt1=8 THEN --计数cnt1<=0;ELSEcnt1<=cnt1+1;END IF;IF cnt1>4 THEN --控制输出,占空比0.5 F_OUT1<='1';ELSEF_OUT1<='0';END IF;IF cnt1=8 THENC_ENB<='1';ELSEC_ENB<='0';END IF;ELSEIF cnt2=7 THEN --8分频计数cnt2<=0;ELSEcnt2<=cnt2+1;END IF;IF cnt2>3 THENF_OUT1<='1';ELSEF_OUT1<='0';END IF;IF cnt2=7 THENC_ENB<='1';ELSEC_ENB<='0';END IF;END IF;END IF;END PROCESS P1;P2:PROCESS(F_IN,C_ENB) --23分频器进程BEGINIF(F_IN'event and F_IN='0') thenIF (C_ENB='1') THEN --由驱动信号驱动IF cnt=23 THEN --计数cnt<=0;ELSEcnt<=cnt+1;END IF;ELSEcnt<=cnt;END IF;END IF;END PROCESS P2;p3:process(F_IN)begincase(cnt)is --23分频器状态输出选择when 0=>FS_CTL<='0';when 1=>FS_CTL<='1';when 2=>FS_CTL<='0';when 3=>FS_CTL<='1';when 4=>FS_CTL<='1';when 5=>FS_CTL<='0';when 6=>FS_CTL<='1';when 7=>FS_CTL<='0';when 8=>FS_CTL<='1';when 9=>FS_CTL<='1';when 10=>FS_CTL<='0';when 11=>FS_CTL<='1';when 12=>FS_CTL<='0';when 13=>FS_CTL<='1';when 14=>FS_CTL<='1';when 15=>FS_CTL<='0';when 16=>FS_CTL<='1';when 17=>FS_CTL<='0';when 18=>FS_CTL<='1';when 19=>FS_CTL<='1';when 20=>FS_CTL<='0';when 21=>FS_CTL<='1';when 22=>FS_CTL<='0';when 23=>FS_CTL<='1';when others=>FS_CTL<='0';end case;end process p3;END a;2、方法二模块VHDL源程序为:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity div_accumulater is -- 定义累加器分频实体,实体名为div_accumulaterport(F_IN: in std_logic; --输入时钟信号F_OUT2: out std_logic); --输出时钟信号end div_accumulater;architecture b of div_accumulater is --定义结构体,结构体名为bconstant step :integer :=127573286; --定义步长signal counter :std_logic_vector(29 downto 0):="000000000000000000000000000000"; --定--义累加器位数为30 beginp1:process(F_IN)beginif(F_IN'event and F_IN='1')thencounter<=counter+step; --步长相加end if;end process p1;F_OUT2<=counter(29); --溢出位输出end b;3、由于实验要求将两个分频器放在同一个电路中仿真实现,因此合并后的总模块VHDL源程序为:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;entity div_fs is --定义分频器实体,实体名为div_fsport(Clk: in std_logic;F_out1: out std_logic; --两种方法时钟输出F_out2: out std_logic);end div_fs;architecture behave of div_fs iscomponent div_89_control --方法一模块port(F_IN:in std_logic;F_OUT1:out std_logic);end component;component div_accumulater --方法二模块port(F_IN: in std_logic;F_OUT2: out std_logic);end component;beginu1:div_89_control port map(Clk,F_out1);u2:div_accumulater port map(Clk,F_out2);end behave;整个仿真只需要输入时钟Clk : in std_logic;四、仿真结果及分析1、方法一模块仿真波形图,如下图1:2、方法二模块仿真波形图,如下图2:3、合并后总模块仿真波形图,如下图3:(图中蓝线是分频比调整过程第二个周期结束点)由于实验要求仿真波形至少要反映分频比调整过程的两个周期,因此上面所有波形图均是截取了分频比调整过程的两个周期进行分析比较。

实验报告模板:实验三 数控分频器设计

实验报告模板:实验三 数控分频器设计

实验三数控分频器设计【实验目的】1.设计实现一个根据不同的输入,将时钟信号进行分频2.掌握分频计数器类型模块的V erilog描述方法;3.学习设计仿真工具的使用方法;4.学习层次化设计方法;【实验内容】1.用V erilog 语言设计带计数允许和复位输入的数控分频器。

2.编制仿真测试文件,并进行功能仿真。

3.下载并验证分频器功能【实验原理】数控分频器是把要分频的信号作为计数器的clk输入,然后通过计数器的计数,到达预设值之后输出一个高电平,将计数器置零,在进行下一轮的计数,所以输出的信号依然是脉冲信号,但不是占空比为1:1的脉冲信号。

数控分频器可以进行不同类型的分频,是通过对计数器的预设值的改变,从而改变了分频器的分频参数,达到了数控的目的。

【程序源代码】(加注释)module CONTROL(clk,din,Q,fout,pfull);input[7:0]din; //定义输入为8位的input clk;output fout,pfull;output[7:0]Q;reg[7:0]Q; //定义输出Q为8位的寄存器变量reg fout,full,pfull; //定义fout,full,pfull为寄存器变量always@(posedge clk) // 定义clk为上升沿敏感信号begin //主块开始if(Q==din)begin //使用了块语句Q=0;full=1;endelse beginQ=Q+1;full=0;endpfull=full;end //主块结束always@(posedge pfull) //定义pufll为上升沿敏感信号fout=~fout;endmodule【仿真和测试结果】【硬件仿真结果】:【实验心得和体会】这次试验是对数控分频器的设计,通过这次的实验我对QuartusII有了更深入地了解,但如何跟好的使用还需要我继续在后边的试验中努力学习,在平常的时候对QuartusII多运用。

实验七 分频器电路设计

实验七  分频器电路设计

实验七、分频器电路设计一、实验目的1、学习任意分频器的设计方法;2、学习数控分频器的设计、分析和测试方法。

二、实验要求1、基本要求1、设计一个偶分频器2、设计一个2n分频器3、设计一个奇分频器4、设计一个半整数分频器5、设计一个数控分频器2、扩展要求1、设计一个任意N分频计数器。

N为奇数或偶数2、设计一个硬件电子琴电路三、实验原理1、偶数分频对时钟进行偶数分频,使占空比为50%。

只要使用一个计数器,在计数器的前一半时间使输出为高电平,在计数器的后一半时间使输出为低电平,即可得到偶分频时钟。

2、奇数分频对时钟进行奇数分频,使占空比为50%。

先对输入时钟的上升沿进行计数,让一个内部信号在前一半时间(分频系数除2取整)为高电平,后一半时间为低电平;再对输入时钟的下降沿进行计数,让另一个内部信号在前一半时间为高电平,后一半时间为低电平;然后将这内部两个信号相或后即得到奇数分频时钟。

3、2n分频器用一个M(2M>=f0)位的二进制计数器对输入时钟进行计数。

其第0位为输入时钟的二分频,第1位为输入时钟的四分频,第2位为输入时钟的8分频,依此类推,第n-1位为输入时钟的2n分频。

4、半整数分频器分频系数为N=0.5的整数倍的分频器电路可由一个异或门、一个模N的计数器和一个2分频构成。

通用半整数分频器电路组成如图7-1所示。

图7-1 通用半整数分频器电路框图与原理图5、数控分频器数控分频器的功能就是在输入端给定不同的输入数据时,将对输入的时钟信号有不同的分频比。

数控分频器一般是用计数值可并行预置的加法计数器完成的,方法是将计数溢出位与预置数加载输入信号相接即可。

四、实验步骤建立一个工程项目,路径如:D:\20050837\seventh ,项目名和顶层实体名为freq_div 。

1、设计一个分频系数可预置的偶分频器(如8分频器),并进行编译仿真。

2、设计一个2n 分频器(如输入频率为1024HZ ,输出频率为256HZ ,64Hz ,4Hz 等),并进行编译仿真。

实验八8分频器的设计与实现

实验八8分频器的设计与实现

实验八8分频器的设计与实现一.实验目的1.使用ISE软件设计并仿真;2.学会程序下载。

二.实验内容使用ISE软件进行8分频器的设计与实现。

三.实验步骤1. 编写文本文件并编译2. 软件仿真3. 进行硬件配置四.实验原理1. ISE软件是一个支持数字系统设计的开发平台。

2. 用ISE软件进行设计开发时基于相应器件型号的。

注意:软件设计时选择的器件型号是与实际下载板上的器件型号相同。

3. 8分频器的真值表如图8-1所示,其最高位q2的输出就是对输入信号的8分频。

本实验中用Verilog语句来描述。

图8-1 8分频器真值表新建工程双击桌面上“ISE Design Suite 14.7”图标,启动ISE软件(也可从开始菜单启动)。

每次打开ISE 都会默认恢复到最近使用过的工程界面。

当第一次使用时,由于还没有历史工程记录,所以工程管理区显示空白。

选择File New--Project选项,在弹出的对话框中输入工程名称并指定工程路径。

点击Next按钮进入下一页,选择所使用的芯片及综合、仿真工具。

计算机上安装的所有用于仿真和综合的第三方EDA工具都可以在下拉菜单中找到。

在图中我们选用了Spartan6 XC6SLX16芯片,采用CSG324封装,这是NEXYS3开发板所用的芯片。

另外,我们选择Verilog 作为默认的硬件描述语言。

再点击Next按钮进入下一页,这里显示了新建工程的信息,确认无误后,点击Finish就可以建立一个完整的工程了。

设计输入和代码仿真在工程管理区任意位置单击鼠标右键,在弹出的菜单中选择New Source命令,选择Verilog Module输入,并输入Verilog文件名。

单击Next按钮进入端口定义对话框。

其中Module Name栏用于输入模块名,这里是count3a,下面的列表框用于端口的定义。

Port Name表示端口名称,Direction表示端口方向(可选择为input、output或inout),MSB表示信号最高位,LSB表示信号最低位,对于单信号的MSB 和LSB不用填写。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

竭诚为您提供优质文档/双击可除分频器设计实验报告
篇一:n分频器分析与设计
一、实验目的
掌握74190/74191计数器的功能,设计可编程计数器和n分频器,设计(n-1/2)计数器、分频器。

二、实验原理
分频是对输入信号频率分频。

1、cD4017逻辑功能
2、74190/74191逻辑功能
3、集成计数器级联
当所需计数器模数超过所选计数器最大计数状态时,需要采取多片计数器级联。

方法分为异步级联和同步级联。

4、集成计数器的编程
在集成计数器的时序基础上,外加逻辑门电路等,反馈集成计数器的附加功能端,达到改变计数器时序的目的。

可采用复位编程和置数编程两种。

5、多片74190/74191计数
器级联
可根据具体计数需求和增减需求,选用74190或74191,选择不同功能、同步或异步设计等。

6、74190/74191计数器编程
由于没有复位端,因此只能使用置数编程,置数端置为0即可异步置数。

可根据需求设计n进制加法或减法计数器。

n与译码逻辑功能如下。

7、74191组成(n-1/2)分频器电路如下图:
u3
计数器的两个循环中,一个循环在cp的上升沿翻转;另一个是在cp的下降沿翻转,使计数器的进制减少1/2,达到(n-1/2)分频。

三、实验仪器
1、直流稳压电源1台
2、信号发生器1台
3、数字万用表1台
4、实验箱1台
5、示波器1台
四、仿真过程
1、按照cD4017和74191功能表验证其功能。

2、74191组成可编程计数器
(1)构成8421bcD十进制加法计数器,通过实验验证正确性,列出时序表。

设计图如下
仿真波形如下
(2)构成8421bcD十进制减法计数器,通过实验验证正
确性,列出时序表。

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

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

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

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

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

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

选择仿真器件,器件选择FLex10K,
芯片选择epF10K10Tc144-4。

新建
“blockDiagram/schematicFile”文件画逻辑图并编译。

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

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

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

五、实验设备。

相关文档
最新文档