分频器实验报告

合集下载

EDA数控分频器

EDA数控分频器

分频器实验报告一:实验目的1 更加熟悉数控分频器的原理和熟练编程。

2设计一个能够用用程序控制的分频器。

3应具备有(2~64)偶数可选分频的基本功能。

4有使能控制键。

二:实验原理数控分频器实际上就是计数器。

其功能就是在输入不同的数据时,对输入的时钟进行不同的分频,如:若输入00100000,则是4分频。

把计数累加的数值跟输入的数值相比较,来达到可控的目的。

三:实验设备EDA实验箱,电脑四:实验程序定义一个被分频时钟输入,一个分频后信号输出,8个拨码开关做输入。

定义两个进程,IF语句是关键。

程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fengpin isport( clk:in std_logic;jin:in std_logic_vector(7 downto 0);cout:out std_logic );end ;architecture one of fengpin issignal full :std_logic;beginp1:process(clk)variable cnt8 :std_logic_vector(7 downto 0); beginif clk'event and clk ='1' thenif cnt8="11111111" thencnt8:=jin;full<='1';else cnt8:=cnt8+1;full<='0' ;end if ;end if;end process p1;p2:process(full)variable cnt2:std_logic;beginif full'event and full='1' thencnt2:=not cnt2;if cnt2='1' then cout<='1';else cout<='0';end if;end if ;end process p2;end ;五:实验步骤在QUARTUS中建立工程,使用器件为EP1K30QC208,用VHDL 语言描述,综合通过后,定义引脚,生成SOF文件,下到FPGA,观察现象。

数控分频器实验报告

数控分频器实验报告

《数控分频实验》姓名:谭国榕班级: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. 分频器的性能特点:分频器的性能受到电路拓扑和被动元件参数的影响,不同的参数设置会导致不同的分频比和输出波形。

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

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

PLC实验报告分频器

PLC实验报告分频器

院系电子信息工程系班级10电气(2) 姓名尤海学号107301240实验名称分频器的PLC编程实验日期2012.3.1 1 实验目的:(1)掌握PLC的输入端的电路连接;(2)运用CP1H系列PLC的基本指令编程实现分频功能;(3)进一步熟悉CX-Programmer的编程及调试;2 实验要求:二分频和四分频程序设计。

要求启动按钮按下后,1号指示灯(100.00)输出一周期为2s的对称方波,二号指示灯(100.01)输出一周期为4s的对称方波,按下停止按扭,输出停止。

3实验设备:计算机、CP1H40DT-D型号PLC、电源模块、开关板、连接线4 实验内容:两种不同方案编写分频梯形图程序;(1)方案1 UP指令梯形图时序图第 1 页共 3 页指导老师签名院系电子信息工程系班级10电气(2) 姓名尤海学号107301240实验名称分频器的PLC编程实验日期2012.3.1 语句表(2)方案二DIFU指令梯形图语句表时序图第 2 页共 3 页指导老师签名院系电子信息工程系班级10电气(2) 姓名尤海学号107301240实验名称分频器的PLC编程实验日期2012.3.1 五实验小结本次实验是PLC课第一次实验,通过十几课时的学习我基本掌握了PLC的一般结构,基本原理。

实验大致分为两部分:一是运用CX-Programmer的编程及调试;二是按照程序接线调试模拟运行;实验还算顺利,有问题通过同学间沟通得到了解决。

同组实验人员:尤海邵海兵第 3 页共 3 页指导老师签名院系电子信息工程系班级10电气(2) 姓名尤海学号107301240实验名称电动机正反转控制的PLC编程实验日期2012.3.81 实验目的:(1)掌握PLC的输入端的电路连接;(2)运用CP1H系列PLC的定时器和计数器指令编程实现电动机的正反转控制;(3)进一步熟悉CX-Programmer的编程及调试;2 实验要求:电动机正反转控制的程序设计。

数字信息技术实验分频器设计报告精品

数字信息技术实验分频器设计报告精品

实验名称:分频器设计实验时间:2015年3月17日上午实验人:一、实验项目分频器设计实验:利用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系统中,分频通常都是通过计数器的循环计数来实现的。

偶数分频(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%的奇数分频器。

实验报告1 简单分频器

实验报告1 简单分频器

课程名称:FPGA指导老师:_竺老师_______成绩:__________________实验名称:简单分频器的设计实验类型:_______同组学生姓名:__俞杰草______一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得一.实验目的a)熟悉Xilinx ISE软件,学会设计,仿真,综合和下载。

b)熟悉实验板电路设定频率的方法。

二.实验内容根据实验板上晶振的输入频率50MHz,如果直接用这么高的时钟频率来驱动LED的闪烁,人眼将无法分辨。

因此本实验着重介绍如何通过分频计数器的方式将50MHz的输入频率降低为人眼可分辨的频率(10Hz以下),并在实验板的LED2~LED5上显示出来。

三.实验记录【实验现象】当将rst_n信号对应的开关拨下,led0熄灭,其他所有led亮。

当将rst_n信号对应的开关往上拨,有7盏led亮,1盏led灭,且灭的led从led0向led7,再跳回led0不断循环往复的移动。

【主要程序段分析】reg[22:0]cnt;always@(posedge clk)if(rst_n)cnt<=23'd0;else cnt<=cnt+1'b1;//带复位键的位宽为24位的分频计数器,以降低闪烁频率reg[7:0]led;always@(posedge clk)if(rst_n)led<=8'b00000001;//按键复位else if((cnt==23'h7fffff)&&(led==8'b10000000))led<=8'b00000001;//循环一周后从D5开始下一周的循环else if(cnt==23'h7fffff)led<=led<<1;//左移一位,右端补零assign led_d2=~led[2];assign led_d4=~led[4];assign led_d3=~led[3];assign led_d5=~led[5];assign led_d0=~led[0];assign led_d1=~led[1];assign led_d6=~led[6];assign led_d7=~led[7];四.实验思考题1.若要LED实现1Hz的闪烁频率,分频计数器应当如何改写。

分频器实验报告

分频器实验报告
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. 调节信号发生器的频率,观察示波器上的波形变化。

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

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

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

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

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

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

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

分频器实验报告

分频器实验报告
2.本实验的关键环节及改进措施
关键环节:电路原理图的构建
指导教师评语及评分:
签名:年月日
74160十进制计数器(或者74161);
4.实验方法步骤及注意事项
(1)、运用数字逻辑的基本原理,选用相应材料连接各芯片功能测试原理图和应用电路设计的原理图。
(2)、参照设计好的电路图,完成电路接线。
(3)、根据设计要求完成电路逻辑功能与数据的验证。
5.实验数据处理方法
将所得数据列表处理,对比实验结果。
实验室
同析3栋217
小组成员
1.实验目的
试用十进制计数器74160和8-3线优先编码器74148设计一个可控分频器。分频比为1/2,1/3。
2.实验原理、实验流程或装置示意图
1、芯片74LS148的真值表:
输入
输出
IS
I0
I1
I2
I3
I4
I5
I6
I7
A2
A1
A0
E
S
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
本科学生设计性实验报告
学号*********姓名颜洪毅
学院信息学院专业、班级计算机科学与技术
实验课程名称数字逻辑与数字系统
教师及职称王坤
开课学期2013至2014学年第一学期
填报时间2013年11月24日
云南师范大学教务处编印
一、实验设计方案
实验序号
实验十一
实验名称
分频器
实验时间
2013.11.21
0
0
1
1
1

数控分频器设计实验报告

数控分频器设计实验报告

实验目的与要求实验名称:数控分频器设计实验目的:将4位计数器改成8位计数器形式,完成全部仿真测试和硬件测试内容实验原理给定计数模N,当计数到N时,对计数器发出一个清零信号,使其从头开始计数,以此循环往复如果控制的是计数器的同步清零端,则为计数器的同步清零模式.如果控制的是异步清零端,则为计数器的异步清零模式.对于给定的模M,当计数满到溢出时,或限制其计数到某一数值时,发出一个信号,控制计数器的加载预置端,使计数器加载M,如果控制的是计数器的同步加载端,则为同步加载模式,如果控制的是计数器的异步加载端,则为异步加载计数模式1、实验内容编辑和输入设计文件新建文件夹——输入源程序——文件存盘源程序A、module FDIV0(CLK,PM,D,DOUT,RST);input CLK;input RST;input[7:0]D;output PM;output [7:0] DOUT;reg[7:0]Q1;reg FULL;(*synthesis,keep*)wire LD;always @(posedge CLK or negedge RST)beginif(!RST)begin Q1<=0;FULL<=0;endelse if(LD)begin Q1<=Q1+1;FULL<=0;endendassign LD=(Q1==8'B11111111);assign PM=FULL;assign DOUT=Q1;endmoduleB、module fdiv01(CLK,PM,D,DOUT,RST);input CLK;input RST;input[7:0]D;output PM;output [7:0] DOUT;reg[7:0]Q1;reg FULL;(*synthesis,probe_port,keep*)wire LD;always @(posedge CLK or posedge LD or negedge RST )begin if(!RST)begin Q1<=0;FULL<=0;endelse if(LD)begin Q1<=D;FULL<=1;endelse begin Q1<=Q1+1;FULL<=0;endendassign LD=(Q1==8'B00000000);assign PM=FULL;assign DOUT=Q1;endmoduleC、module fdiv02(CLK,PM,D);input CLK;input [7:0] D;output PM;(*synthesis,probe_port,keep*)[7:0] Q1;reg FULL;(*synthesis,probe_port,keep*)wire RST;always @ (posedge CLK or posedge RST)beginif (RST)begin Q1<=0;FULL<=1;endelse begin Q1<=Q1+1;FULL<=0;endendassign RST = (Q1==D);assign PM=FULL;endmoduleD、module fdiv03(CLK,PM,D);input CLK;input [7:0] D;output PM;(*synthesis,probe_port,keep*)[7:0] Q1;reg FULL;(*synthesis,probe_port,keep*)wire RST;always @ (posedge CLK)beginif (RST)begin Q1<=0;FULL<=1;endelse begin Q1<=Q1+1;FULL<=0;endendassign RST = (Q1==D);assign PM=FULL;endmodule2、总结与体会创建工程打开并建立新工程管理窗口——将设计文件加入工程中——选择目标芯片——工具设置——结束设置3、全程编译前约束项目设置选择FPGA目标芯片——选择配置器件的工作方式——选择配置器件和编程方式——选择目标器件引脚端口状态——选择Verilog语言版本4、全程综合与编译Processing——Start Compilation启动全程编译5、仿真测试AB、C、D实验总结与体会通过这次实验学会了将4位计数器改成8位计数器形式,完成全部仿真测试和硬件测试内容。

实验4 计数器和分频器报告

实验4 计数器和分频器报告

实验4 计数器和分频器一.计数器实验设计方案1.原理:计数器是数字系统中常用的一种可统计时钟的个数的时序逻辑部件。

计数器中的“数”是触发器的状态组合。

某一种触发器状态组合代表某个“数”,即“编码”。

计数器循环一次所包括的状态总数就是称作“容量”或“模”。

在计数脉冲作用下,使状态逐个迁移成不同的状态组合来实现数的增加和减少。

2.VHDL代码:(1)2选1多路选择器library ieee;use ieee.std_logic_1164.all;entity mux4_2_1 isport(d0,d1:in std_logic_vector(3 downto 0);sel:in std_logic_vector(1 downto 0);dout:out std_logic_vector(3 downto 0));end mux4_2_1;architecture rtl of mux4_2_1 isbegindout<=d0 when sel="00"elsed1 when sel="01";end rtl;(2)十三进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity exp_cnt13 isport( Clk,clrn,En:in std_logic;cq:out std_logic_vector(3 downto 0);cq1:out std_logic_vector(3 downto 0);cout:out std_logic);end exp_cnt13;architecture bhv of exp_cnt13 issignal cqi:std_logic_vector(3 downto 0);signal cqi1:std_logic_vector(3 downto 0);beginprocess(En,Clk,clrn,cqi)beginif clrn='0' thencqi<="0000";elsif Clk'event and Clk='1' thenif En='1' thenif cqi<12 thencqi<=cqi+1;elsecqi<="0000";end if;end if;end if;if cqi=12 thencout<='1';elsecout<='0';end if;cq<=cqi;if cqi>9 thencq1<="0001";cqi1<=cqi-10;elsecq1<="0000";cqi1<=cqi;end if;cq<=cqi1;end process;end bhv;3.结构框图:实验波形仿真①波形图:②操作说明:设置网格为80ns,设置clk选低电平,为一个周期80ns的函数;把clrn设置为高电平;设置En选高电平; 设置cq为一个周期函数,根据数组在每段的值设置cq[0] 到cq[3]的值,然后仿真波形,看输出的cout的波形,通过下载到实验箱可以验证波形的正确性。

verilog实验四分频器

verilog实验四分频器

Verilog HDL实验报告Verilog 实验报告题目:分频器系部名称:通信工程专业名称:通信工程班级:班内序号:学生姓名:时间:2010.12.12一、实验要求:设计一个将10MHz时钟分频为500KHz的时钟,有复位端;二、实验内容:源文件module fenpin(clr,a,b);input a;input clr;output b;integer i=0;reg b;always @(negedge clr or posedge a)if(!clr)beginb=0;i=0;endelsebegini=i+1;if(i==11)beginb=~b;i=1;endendendmodule测试文件`timescale 10ns/100psmodule fenpin_test;reg a;reg clr;wire b;fenpin u1(clr,a,b);initialbegin$monitor($time,"clr=%b,a=%b,b=%b",clr,a,b);clr=1'b0;a=1'b0;#5 clr=1'b1;endalways#5 a=~a;endmodule# 0clr=0,a=0,b=0 # 5clr=1,a=1,b=0 # 10clr=1,a=0,b=0 # 15clr=1,a=1,b=0 # 20clr=1,a=0,b=0 # 25clr=1,a=1,b=0 # 30clr=1,a=0,b=0 # 35clr=1,a=1,b=0 # 40clr=1,a=0,b=0 # 45clr=1,a=1,b=0 # 50clr=1,a=0,b=0 # 55clr=1,a=1,b=0 # 60clr=1,a=0,b=0 # 65clr=1,a=1,b=0 # 70clr=1,a=0,b=0 # 75clr=1,a=1,b=0 # 80clr=1,a=0,b=0 # 85clr=1,a=1,b=0 # 90clr=1,a=0,b=0 # 95clr=1,a=1,b=1 # 100clr=1,a=0,b=1 # 105clr=1,a=1,b=1 # 110clr=1,a=0,b=1 # 115clr=1,a=1,b=1 # 120clr=1,a=0,b=1 # 125clr=1,a=1,b=1 # 130clr=1,a=0,b=1 # 135clr=1,a=1,b=1三、实验心得:通过本实验,我更加熟悉了Verilog这门语言并能使用ModelSim软件,能自己设计编写一些程序和其测试文件,并将测试结果输出,验证理论的学习,加深理论知识的理解;这样可以更直观形象的理解各种电路器件的工作,有助于今后的学习。

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

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

实验三数控分频器设计【实验目的】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)。
2:创建工程。
(1)建立新工程管理窗口。单击对话框第二栏右侧“···”按钮,找到文件夹d:\work\cnt10,选中已存盘文件cnt10.vhd,再单击“打开”按钮。
(2)将设计文件加入工程中。单击Next按钮,在弹出的对话框中单击File栏后的按钮将与工程相关的所有VHDL文件都加入此工程。
(3)选择目标芯片。单击Next按钮,选择目标器件即EP3C5E144C8。
(2)输入源程序。打开QUARTUSⅡ,选择File-New命令。在新建窗口中的Design
File栏选择编译文件的语言类型即VHDL File选项。然后再VHDL文本编译窗口输入奇数分频器的程序:
libraryieee;
use ieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
begin
process(clk,c1)
begin
ifrising_edge(clk) then
if(c1="110")then c1<="000";else c1<=c1+1;end if;
if(c1="001")then m1<=not m1;elsif (c1="100") then m1<=not m1;
(3)波形文件存盘。选择File→Save As,将以默认名为cnt10.vwf的波形文件存入文件夹d\work\cnt10中。
(4)将工程shift的端口信号节点选入波形编辑器中。
(5)编辑输入波形。
(6)启动仿真器。现在所有的设置进行完毕,选择Processing→Start Simulation命令,直到出现Simulation was successful,仿真结束。
实验内容与步骤:
一、实验内容:
学习VHDL文本输入设计流程,包括设计、输入、综合、适配、仿真测试和编程下载,并且在QUARTUSⅡ开发环境下用VHDL文本语言编译仿真出任意偶次,奇次,半整数分频器观察并记录其仿真波形 。
二、实验步骤:
奇数分频器的编译与仿真:
1:建立工作苦文件夹和编译设计文件。
(1)新建一个文件夹。首先利用Windows资源管理器,在EDA默认的工作库(work)中新建一个文件夹命名cnt10。
if(c2="100") then c2<="000"; else c2<=c2+1;
endif;endif;
end process;
k1<="1" when c1="000" or c2="010" else "0";
endbhv;
仿真波形及结果:
实验总结:
通过本次试验,我基本掌握了QUARTUSⅡ开发环境的应用,熟练的建立文件、编译文件、以及工程仿真的整个流程和波形文件的建立和仿真。虽然在本次实验中遇到了一些问题,刚开始由于程序有错误不能编译成功,经过耐心的修改最终成功编译,但在波形仿真时由于延时冲突问题不能出现正确结果,又经过重新从编译开始有认真做了整个流程最终成功做完可控奇数分频器的实验。同时在实验基础上修改源程序和在次建立工程文件及修改波形图得到偶次分频及半整数次分频的仿真。在此次实验中我了解到做实验需要耐心、细心,不断地发现错误,认识理解错误,从而改正的过程。
endif;endif;
end process;
process(clk,c2) begin
iffalling_edge(clk) then
if(c2="110")then c2<="000";else c2<=c2+1;end if;
if(c2="001")then m2<=not m2;elsif (c2="100") then m2<=not m2;
(4)工具设置。
(5)结束设置。
3:半程编译。
编译前首先选择Processing→StartComplilation命令,启动半程编译。
4:时序仿真。
工程编译通过后
(1)打开波形编辑器。选择File→New命令,在新建窗口选择Vector Waveform File选项,单击OK按钮。
(2)设置仿真时间区域。
entity cnt10 is
port (clk: in std_logic;k_or,k1,k2: outstd_logic);
end;
architecturebhvof cnt10 is
signal c1,c2:std_logic_vector(2downto0);
signal m1,m2:std_logic;
endif;endif;
end process;
k1<=m1;k2<=m2;k_or<=m1 or m2;
endbhv;
(3) 文件存盘。选择File—Save as命令,找到已经建立的文件夹cnt10,存盘文件名应该与实体名一致,即cnt10.vhd。当出现问句“Do you want tocreat····”单击“是”按钮。
begin
process(clk,c1)
beginifrisFra bibliotekng_edge(clk) then
if(c1="100") then c1<="000"; else c1<=c1+1;
end if; end if;
end process;
process(clk,c2) begin
iffalling_edge(clk) then
useieee.std_logic_unsigned.all;
entity cnt25 is
port(clk:instd_logic;
k1:outstd_logic);
end;
architecturebhvof cnt25 is
signal c1,c2:std_logic_vector(2downto0);
洛阳理工学院实验报告
系部
计算机与信息工程系
班级
05
学号
B09050508
姓名
王卫云
课程名称
PLD原理与应用
实验日期
11.12
实验名称
分频器的设计
成绩
实验目的:
1、学习利用VHDL完成分频器的设计
2、在QUARTUSⅡ开发环境下用VHDL文本语言编译仿真出任意偶次,奇次,半整数分频器。
实验条件:
装有QUARTUSⅡ软件的电脑
end;
architecturebhvofcnt4is
signal c1:std_logic_vector(2downto0);
signal m1:std_logic;
begin
process(clk,c1)
begin
ifrising_edge(clk) then
if(c1="011") then c1<="000"; else c1<=c1+1;end if;
if(c1="001") then m1<=not m1;elsif(c1="011") then m1<=not m1;
end if; end if;
end process;
k1<=m1;
endbhv;
仿真波形及结果:
半整数次频源程序:
libraryieee;
use ieee.std_logic_1164.all;
(7)观察仿真结果。如下图:
奇数分频器的编译与仿真:
偶次分频与上述实验步骤一致。
源程序:
libraryieee;
use ieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt4is
port(clk:instd_logic;
k1:outstd_logic);
相关文档
最新文档