分频器实验

合集下载

数控分频器实验报告

数控分频器实验报告

《数控分频实验》姓名:谭国榕班级:12电子卓越班学号:201241301132一、实验目的1.熟练编程VHDL语言程序。

2.设计一个数控分频器。

二、实验原理本次实验我是采用书上的5分频电路进行修改,通过观察其5分频的规律进而修改成任意奇数分频,再在任意奇数分频的基础上修改为任意偶数分频,本次实验我分为了三个部分,前两部分就是前面所说的任意奇数分频和任意偶数分频,在这个基础上,再用奇数输入的最低位为1,偶数最低位为0的原理实现合并。

三、实验步骤1.任意奇数分频程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DIV1 ISPORT(CLK:IN STD_LOGIC;D:IN INTEGER RANGE 0 TO 255;K1,K2,K_OR:OUT STD_LOGIC);END;ARCHITECTURE BHV OF DIV1 ISSIGNAL TEMP3,TEMP4:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL M1,M2:STD_LOGIC;--SIGNAL OUT1,OUT2,OUT3:STD_LOGIC;BEGINPROCESS(CLK,TEMP3) BEGINIF RISING_EDGE(CLK) THENIF(TEMP3=D-1) THEN TEMP3<="00000000"; ELSE TEMP3<=TEMP3+1; END IF;IF(TEMP3=D-(D+3)/2) THEN M1<=NOT M1; ELSIF (TEMP3=D-2) THEN M1<=NOT M1; END IF; END IF;END PROCESS;PROCESS(CLK,TEMP4) BEGINIF FALLING_EDGE(CLK) THENIF(TEMP4=D-1) THEN TEMP4<="00000000"; ELSE TEMP4<=TEMP4+1; END IF;IF(TEMP4=D-(D+3)/2) THEN M2<=NOT M2; ELSIF (TEMP4=D-2) THEN M2<=NOT M2;END IF; END IF;END PROCESS;K1<=M1; K2<=M2; K_OR <=M1 OR M2;END BHV;此段程序最主要的部分为:PROCESS(CLK,TEMP3) BEGINIF RISING_EDGE(CLK) THENIF(TEMP3=D-1) THEN TEMP3<="00000000"; ELSE TEMP3<=TEMP3+1; END IF;IF(TEMP3=D-(D+3)/2) THEN M1<=NOT M1; ELSIF (TEMP3=D-2) THEN M1<=NOT M1; END IF; END IF;END PROCESS;PROCESS(CLK,TEMP4) BEGINIF FALLING_EDGE(CLK) THENIF(TEMP4=D-1) THEN TEMP4<="00000000"; ELSE TEMP4<=TEMP4+1; END IF;IF(TEMP4=D-(D+3)/2) THEN M2<=NOT M2; ELSIF (TEMP4=D-2) THEN M2<=NOT M2; END IF; END IF;END PROCESS;在这里,我通过研究书上的占空比为50%的5分频电路的程序,通过实验发现了一个规律,就是书上的C1="100",在奇数任意分频中为输入信号减一,即D-1,而在第二个if里,5分频为C1="001",7分频为C1="010",9分频为C1="011",以此类推,则不难发现:5-4=1;7-5=2;9-6=3.。

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. 背景奇数分频器是一种电子电路模块,主要用于将输入的时钟信号进行分频,并输出比输入频率低的信号。

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

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/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. 分频器的性能特点:分频器的性能受到电路拓扑和被动元件参数的影响,不同的参数设置会导致不同的分频比和输出波形。

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

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

13任意进制分频器

13任意进制分频器

数字电路-13任意进制分频器实验一. 实验目的1. 掌握任意进制分频器的设计方法。

2. 掌握同步计数器74LS161多级级联的方法。

3. 研究不同连接方式时对分频数的影响。

二. 实验原理分频器和计数器是数字电路和自动控制电路中极重要的一种单元电路,分频器由最 高位输出分频模数,计数器由其内部各级触发器输出不同的计数模数。

随着中规模电路的出现,分频器的设计方法,主要是合理灵活应用计数器芯片,实现任意进制分频。

74LS161是一种四位二进制可预置的同步加法计数器,图13-1是其引脚图,表13-1 是其功能表。

图13-1 74LS161-163引脚图 图13-2 7分频电原理图表13-1 74LS161功能表从功能表中可知,当清零端C R =“0”,计数器输出Q3、Q2、Q1、Q0立即为全“0”, 为异步复位功能。

当C R =“1”且L D =“0”时,在CP 脉冲上升沿作用后,74LS161的输出端Q 3、Q 2、Q 1、Q 0的状态分别与并行数据输入端D 3,D 2,D 1,D 0的状态相同,为同步置数功能。

而当C R =L D =“1”、EP 、ET 中有一个为“0”时,计数器不计数,输出端状态保持不变。

只有当C R =L D =EP=ET=“1”、CP 脉冲上升沿作用后,计数器加1。

此外74LS161还有一个进位输出端C O ,其逻辑关系是C O = Q 3Q 2Q 1Q 0 ET 。

合理应用计数器的清零功能和置数功能,一片74LS161可以构成16以下的任意进制 分频器。

(1)用异步清零功能设计16以下任意进制分频器图13-2是构成7分频的电原理图。

图中每个时钟(CP )脉冲作用后,74LS161就加“1”,当Q2=Q1=Q=“1”时,74LS20输入全“1”、输出为“0”。

计数器立即复位并重新开始计数。

74LS161输出端随时钟脉冲输入的变化规律列于表13-2。

每输入7个时钟脉冲,复位控制与非门的输出端就有一个很窄的负脉冲,脉冲的宽度约为2tpd时间。

分频器实验报告

分频器实验报告
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:时序仿真。
工程编译通过后

实验五 数控分频器的设计

实验五  数控分频器的设计

实验五数控分频器的设计一、设计目的1、学习数控分频器的设计、分析、测试方法;2、牢固掌握用VHDL语言编写程序的方法和技巧。

二、设计要求1、编写数控分频器的VHDL源程序;2、在MAX+PLUSII上进行编译、综合、适配、引脚锁定、下载测试;3、输入不同的CLK和预置值进行仿真波形的测试;4、写出设计性实验报告。

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

2、引脚锁定及下载测试提示:如果目标器件是EPF10K10,建议选实验电路模式1,键2 / 键1(PIO7-PIO0)负责输入8位预置数D;CLK由clock0输入,频率可选65536Hz或更高(确保分频后落在音频范围);输出FOUT接扬声器(SPKER:PIN3)。

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

四、实验报告要求根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;设计原程序,程序分析报告、仿真波形图及其项目分析。

五、实验思考和总结1、阐述程序设计中进程的作用。

2、对所完成的实验进行总结和分析。

3、写出完成时钟上升沿的语句。

4、5、程序清单:附:数控分频器的设计程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PULSE ISPORT ( CLK : IN STD_LOGIC;D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);FOUT : OUT STD_LOGIC );END;ARCHITECTURE one OF PULSE 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; --当CNT8计数计满时,输入数据D被同步预置给计数器CNT8 FULL <= '1'; --同时使溢出标志信号FULL输出为高电平ELSE CNT8 := CNT8 + 1; --否则继续作加1计数FULL <= '0'; --且输出溢出标志信号FULL为低电平END IF;END IF;END PROCESS P_REG ;P_DIV: PROCESS(FULL)VARIABLE CNT2 : STD_LOGIC;BEGINIF FULL'EVENT AND FULL = '1'THEN CNT2 := NOT CNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反IF CNT2 = '1' THEN FOUT <= '1';ELSE FOUT <= '0';END IF;END IF;END PROCESS P_DIV ; END;。

分频器实验报告

分频器实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

实验二 数控分频器

实验二 数控分频器

实验二数控分频器一、实验目的1.掌握数控分频器的工作原理并能够用verilog语言编写代码,熟悉EDA6000实验箱的使用方法。

2.进一步熟悉quartusII建立程序编译、仿真及下载的操作流程并学会数控分频器的Verilog硬件设计二、实验步骤1.新建Verilog工程项目,编写代码并保存至与模块名对应的项目文件夹。

2.编译程序,编译无误后,在【tools】里面选择RTL视图,观察电路结构。

3.新建波形文件进行仿真。

保存时要和源程序存放在同一目录下。

设置好输入波形参数后,开始仿真。

在仿真后输入输出波形中观察逻辑关系是否正确。

4.将实验箱和PC合理连接起来。

打开EDA6000软件,设置好芯片类型为ACEX1K(EP1K30TC144-3),载入模式9。

5.根据EDA6000界面内管脚对应芯片的实际管脚在QUARTUSⅡ里面设定管脚号并检查无误。

6.将程序下载至FPGA试验箱内,并在EDA6000软件界面内进行验证测试。

程序代码module divf(clk,din,pfull,clkout);input clk;input [7:0] din;output clkout,pfull;reg full,divclk;reg [7:0] count;always @(posedge clk) beginif(count==8'HFF) begincount<=din;full<=1; endelse if(count<255) begincount<=count+8'B1;full<=0; endendalways @(posedge full) begindivclk<=~divclk; endassign clkout=divclk;assign pfull=full;endmoduleRTL仿真设置根据试验箱指定管脚连接下载至EDA6000实验箱逻辑分析结果三、实验总结通过实验,我初步掌握了分频计数器类型模块的Verilog描述方法及层次化设计方法。

实验 二进制分频器

实验  二进制分频器

二进制分频器一.实验目的1. 分频器的原理2. 二进制分频器的设计二.分频器的原理1.分频器就是对较高频率的信号进行分频,得到较低频率的信号。

2.分频系数(倍率) rate=fin / fout三.二进制分频器的设计二进制分频就是对输入时钟进行2的整数次幂分频。

1.设计原理:(rate=2N,N是整数)定义一个N位的计数器,对输入的时钟脉冲进行计数,计数结果的第N-1位就是对输入时钟的2的N次幂分频。

将相应的位数取出即可得到分频时钟。

2.二进制分频器的VHDL源程序⏹Library ieee;⏹Use ieee.std_logic_1164.all;⏹Use ieee.std_logic_unsigned.all;⏹Use ieee.std_logic_arith.all;⏹Entity fdiv is⏹generic(N: integer:=3); --rate=2N,N为正整数⏹port(⏹clkin: IN std_logic;⏹clkout: OUT std_logic⏹);⏹End fdiv;⏹Architecture a of fdiv is⏹signal cnt: std_logic_vector(N-1 downto 0);⏹Begin⏹process(clkin)⏹begin⏹if(clkin'event and clkin='1') then⏹cnt <= cnt+1;⏹end if;⏹end process;⏹clkout <= cnt(N-1);⏹End a;四.仿真结果1.从波形图可以看到,clkout是clkin的8分频,也就是2的3次幂分频。

2.如果要产生其他次幂分频,直接修改generic类属变量参数即可。

五.实验结论本次实验使我们了解和认识Altera FPGA/CPLD软件,理论与实践相结合,为以后的学习打下坚实的基础。

实验二序列信号检测器一.实验目的(1)掌握关于串行序列的设计。

实验七 分频器电路设计

实验七  分频器电路设计

实验七、分频器电路设计一、实验目的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 等),并进行编译仿真。

实验四 分频器设计

实验四 分频器设计

实验四分频器设计
一、实验目的
学习分频器的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,将仿真的结果附在实验报告中。

分频器实验

分频器实验

实验一分频器设计一、实验项目分频器设计实验:利用QuatusII仿真实现分频器设计。

二、实验仪器及器件计算机、USB-BLASTER下载线、数字系统实验箱、5V稳压电源。

三、实验目的1、熟悉教学实验板的使用,初步了解掌握Verilog HDL语言和VHDL语言。

2、掌握分辨器原理,熟悉分频器的功用,学习分频器的设计、掌握用Verilog HDL 或者VHDL 语言描述分频器的方法。

3、熟悉和掌握FPGA开发软件QuatusII的基本操作,用QuatusII编译Verilog和VHDL语言。

4、掌握USB-BLASTER下载工具的安装、以及程序下载方法。

5、学会FPGA I/O引脚分配和实现过程。

四、实验要求及内容1、首先下载给定的VHDL硬件描述语言编写的分频器示例程序,读懂程序,编译并仔细观察在实验板上的现象。

2、在QuatusII平台上进行波形仿真。

3、扩展内容:设计分频电路得到3分频器、8分频器和32分频器。

编写分频器的Verilog 或VHDL代码,并仿真,同时给出3、8、32分频仿真波形。

五、实验原理一个数字系统中往往需要多种频率的时钟脉冲作为驱动源,这样就需要对FPGA的系统时钟(频率较高)进行分频。

比如在进行流水灯、数码管动态扫描设计时不能直接使用系统时钟(太快而肉眼无法识别),或者需要进行通信时,由于通信速度不能太高(由不同的标准限定),这样就需要对系统时钟分频以得到较低频率的时钟。

分频器主要分为偶数分频、奇数分频、半整数分频和小数分频,如果在设计过程中采用参数化设计,就可以随时改变参量以得到不同的分频需要。

在对时钟要求不是很严格的FPGA系统中,分频通常都是通过计数器的循环计数来实现的。

偶数分频(2N)偶数分频最为简单,很容易用模为N的计数器实现50%占空比的时钟信号,即每次计数满N(计到N-1)时输出时钟信号翻转。

奇数分频(2N+1)使用模为2N+1的计数器,让输出时钟在X-1(X在0到2N-1之间)和2N时各翻转一次,则可得到奇数分频器,但是占空比并不是50%(应为X/(2N+1))。

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

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

实验三数控分频器设计【实验目的】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多运用。

分频器实验报告

分频器实验报告

实验二:分频器`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. 控制电路:数控分频器的控制电路可以根据输入的指令来调节输出信号的频率和占空比,从而控制电机的转速。

三、实验步骤1. 搭建电路:根据实验指导书上的电路图,连接数控分频器和电机,确保电路连接正确。

2. 设置参数:根据实验要求,设置输入信号的频率和占空比,以及输出信号的频率和占空比。

3. 运行实验:按下启动按钮,观察电机的转速变化,并记录相关数据。

四、实验结果在实验过程中,我们通过调节输入信号的频率和占空比,以及输出信号的频率和占空比,成功控制了电机的转速。

通过实验数据的记录和分析,我们发现输入信号的频率越高,电机的转速越快;而输入信号的占空比则会影响电机的平均转速。

五、实验总结通过本次实验,我们深入了解了数控分频器的工作原理和使用方法。

数控分频器作为一种重要的工业控制设备,可以灵活地控制电机的转速,提高生产效率。

在实际应用中,我们需要根据具体的需求来设置输入信号和输出信号的参数,以达到最佳的控制效果。

总之,数控分频器是一种非常实用的设备,在工业生产中起到了重要的作用。

通过本次实验,我们对其工作原理有了更深入的了解,并学会了正确使用方法。

希望今后能够通过实际应用,将数控分频器的优势发挥到极致,为工业生产的发展做出贡献。

分频器实验报告

分频器实验报告
如何设计分频器
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)。

实验一分频器设计一、实验项目分频器设计实验:利用QuatusII仿真实现分频器设计。

二、实验仪器及器件计算机、USB-BLASTER下载线、数字系统实验箱、5V稳压电源。

三、实验目的1、熟悉教学实验板的使用,初步了解掌握Verilog HDL语言和VHDL语言。

2、掌握分辨器原理,熟悉分频器的功用,学习分频器的设计、掌握用Verilog HDL 或者VHDL 语言描述分频器的方法。

3、熟悉和掌握FPGA开发软件QuatusII的基本操作,用QuatusII编译Verilog和VHDL语言。

4、掌握USB-BLASTER下载工具的安装、以及程序下载方法。

5、学会FPGA I/O引脚分配和实现过程。

四、实验要求及内容1、首先下载给定的VHDL硬件描述语言编写的分频器示例程序,读懂程序,编译并仔细观察在实验板上的现象。

2、在QuatusII平台上进行波形仿真。

3、扩展内容:设计分频电路得到3分频器、8分频器和32分频器。

编写分频器的Verilog 或VHDL代码,并仿真,同时给出3、8、32分频仿真波形。

五、实验原理一个数字系统中往往需要多种频率的时钟脉冲作为驱动源,这样就需要对FPGA的系统时钟(频率较高)进行分频。

比如在进行流水灯、数码管动态扫描设计时不能直接使用系统时钟(太快而肉眼无法识别),或者需要进行通信时,由于通信速度不能太高(由不同的标准限定),这样就需要对系统时钟分频以得到较低频率的时钟。

分频器主要分为偶数分频、奇数分频、半整数分频和小数分频,如果在设计过程中采用参数化设计,就可以随时改变参量以得到不同的分频需要。

在对时钟要求不是很严格的FPGA系统中,分频通常都是通过计数器的循环计数来实现的。

偶数分频(2N)偶数分频最为简单,很容易用模为N的计数器实现50%占空比的时钟信号,即每次计数满N(计到N-1)时输出时钟信号翻转。

奇数分频(2N+1)使用模为2N+1的计数器,让输出时钟在X-1(X在0到2N-1之间)和2N时各翻转一次,则可得到奇数分频器,但是占空比并不是50%(应为X/(2N+1))。

得到占空比为50%的奇数分频器的基本思想是:将得到的上升沿触发计数的奇数分频输出信号CLK1,和得到的下降沿触发计数的相同(时钟翻转值相同)奇数分频输出信号CLK2,最后将CLK1和CLK2相或之后输出,就可以得到占空比为50%的奇数分频器。

原理图如下:用Quartus II 得到的占空比为50%的9分频时钟输出信号outclk如下:六、实验步骤:(开始建立工程项目)(1)在WINDOWS界面双击QuatusII图标,打开QuatusII软件,进入QuatusII开发环境;(2)选择“File=>New Project Wizard”或Create a New Project ,出现如下向导对话框;(3)点击Next>,弹出如下New Project Wizard对话框,填写Directory,Name, Top-Level Entity等项目。

其中第一、第二、第三个文本框分别是工程项目目录、项目名称和项目顶层设计实体的名称。

(4)设置好存储位置和项目名称后点击Next>,弹出出现添加工程文件的对话框;(5)在对话框中,我们可以导入已经存在的*.vhd、*.vhdl或*.verilogwen 文件(注:导入的文件名称需和项目名称一致),若原来己有文件,可选择相应文件。

若需要导入已存在文件到当前项目中,则按照以下步骤操作;若无需导入文件则直接点击Next> , 跳过步骤(5)、(6)、(7),执行步骤(8)(6)点击红色框选中的按钮,弹出窗口,选择要导入的文件,选中oushufenpin.vhd(7)点击“打开”,File name:显示需要导入文件的位置:(8)点击Add,将选中的文件添加到项目中;(9)点击Next>,如下选择FPGA器件对话框,在Family下拉框中,根据需要选择一种型号的FPGA,比如CycloneII系列FPGA。

然后在“Available devices:”中根据需要的FPGA型号选择FPGA型号;(10)选择器件类型-型号后,点击Next>,如下图,弹出其他EDA工具的对话框,由于我们使用Quartus Ⅱ的集成环境进行开发,因此不要作任何改动。

(11)单击Next进入工程的信息总概对话框;(12)单击Finish按钮就建立了一个空的工程项目;(编辑设计文件)(13)执行“File=>New”弹出新建文件对话框,Quartus Ⅱ支持6种设计输入法文件(Design Files): “AHDL File ”,是AHDL文本文件;“Block Diagram/Schematic File ”,是流程图和原理图文件,简称原理图文件;“EDIF File ”,是网表文件;“SOPC Builder System ”,是可编程片上系统的编辑系统; “Verilog HDL File ”,是Verilog HDL文本文件; “VHDL File ”,是VHDL文本文件。

这里我们使用VHDL语言,因此选择VHDL File。

(14)单击OK后,即建立一个空的原理图文件,在Quartus窗口的右方看到该文件(Vhdl.vhd);(15)执行File=> Save as命令,把它另存为文件名是“oushufenpin”(自己命名)的VHDL文件,文件后缀为.vhd。

使该文件添加到刚建立的工程目录中去。

(16)点击保存,则将当前的VHDL 文件保存至当前工程中,Quartus 窗口的右方看到该文件名为oushufenpin.vhd,并在该文件中写入工程代码;(17)选择“Processing=》Start Compilation”或通过点击快捷菜单按钮,开始编译(18)编译结束后,会出现如下图所示的对话框,对话框会显示编译的错误和警告的情况。

若有错误,则可先双击编译器界面下方出现的第一个错误提示,可使第一个错误处改变颜色。

检查纠正,第一个错误后保存再编译,如果还有错误,重复以上操作,直至最后通过。

最后通过时应没有错误提示但可有警告提示(编辑波形文件)(19)执行“file->new”选择“Verification/Debugging Files”标签中的“Vector WaveformFile ”(波形文件),然后单击“OK”确定;(20)出现波形文件编辑器;(21)单击鼠标右键,出现下图所示菜单,选择Insert Node or Bus…命令;(22)此处我们只需要在name栏键入输入波形名clkin,单击ok按键;(23)设置仿真时间执行Edit=>End Time命令弹出如下设置时间对话框,设置总时间为1.0us:执行Edit=>Grid Size命令,设置时间单位为10 ns(24)设置输入信号波形单击工具箱中缩放工具按钮,将鼠标移到编辑区内,单击鼠标,调整波形区横向比例(左键放大,右键缩小),单击工具箱中的选择按钮,然后在要设置波形的区域上按下鼠标左键并拖动鼠标,选择要设置的区域;(25)单击工具箱中高电平设置按钮,将该区域设置为高电平;(26)用相似的方法设置其他区域的波形,注意波形与真值表相对应;(27)选择“processing-》generate functional simulation netlist”,弹出保存对话框:(文件名需要与对应的.vhd文件名一致)(28)点击是,弹出对话框,保存路径与工程路径一致,文件名为oushufenpin:(29)点击保存,将该波形文件保存,保存成功,弹出对话框;(30)再选择“processing=》Start simulation”,进行仿真;(31)认真核对输入输出波形,可检查设计的功能正确与否。

七、实验结果偶数分频程序library ieee;use ieee.std_logic_1164.all;entity oushufenpin isport( clkin:in std_logic; --时钟信号输入clkout:out std_logic); --时钟信号输出end oushufenpin;architecture aroneMHZ of oushufenpin issignal data:integer range 0 to 10;signal Q:std_logic;beginprocess(clkin)beginif(clkin'event and clkin='1')thenif(data=0) then --此句为你想要的分频比,data=0,1,2,3,4.......9的分频比为1,2,3,,,10data<=0;Q<=not Q;elsedata<=data+1;end if;end if;clkout<=Q;end process;end aroneMHZ;偶数分频仿真结果奇数分频程序(前面部分一样)process(clkin)beginif(clkin'event and clkin='1')thenif(data=0) then --3分频实现奇数分频Q<=not Q;data<=data+1;end if;if(data=1) thenQ<=not Q;data<=data+1;end if;if(data=2) thendata<=0;end if;end if;clkout<=Q;end process;end aroneMHZ;奇数分频仿真结果3分频5分频八、数据分析偶数分频:以分频比为4(8分频)为例,当第一个时钟来临时,当data=3时,将0赋给data,电平发生反转,否则data+1,以此实现循环奇数分频:以3分频为例,当第一个时钟来临时,即data=0时,电平发生反转,让data+1;即data=1时,电平发生反转,且让data+1;当data=2时,电平保持原来状态,将0赋给data,实现循环。

九、参考文献(使用Vrerilog或者VHDL语言编写程序,分析程序,使用QuatusII时,参考的资料,书籍。

)十、实验体会实验中对VHDL语言不是很熟悉,导致对程序的不理解,同时对Quartus操作不是太熟悉,收获是小组在一起讨论,收获很大,加深了对问题的思考,同时对程序有了更深刻的理解。

相关文档
最新文档