实验报告1 简单分频器
- 格式:pdf
- 大小:200.20 KB
- 文档页数:4
分频器实验报告一:实验目的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,观察现象。
分频器设计实验报告竭诚为您提供优质文档/双击可除分频器设计实验报告篇一: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. 分频器的性能特点:分频器的性能受到电路拓扑和被动元件参数的影响,不同的参数设置会导致不同的分频比和输出波形。
结论:通过本次实验,我们深入了解了分频器的工作原理和性能特点。
分频器作为一种常见的电子电路器件,在通信、计算机等领域有着广泛的应用。
实验二简易数字频率计实验目的:(1)学会各种简易数字频率计的设计方法(2)学会VHDL的多进程及多层次设计方法实验原理:设计一个四位数字频率计,此频率计共分四档。
一档:0~9999Hz二档:10~99.99kHz三档:100~999.9kHz四档:1~10MHz分频器模块FEN通过对1Hz的时钟的分频得到0.5Hz的时钟信号。
测频模块FTEST,是整个程序的核心,此模块完成在1s的时间内对被测信号计数的功能,并通过输出数据实现自动换挡的功能。
LOCK模块用来锁存数据。
实验内容:在MAX+plusII中用VHDL语言输入FEN2 、MUX21、CD源程序,保存名字与实体名一致,后缀为vhd,选择目标器件为EP1K30TC144-3,然后进行编译、仿真。
参考程序:1、FEN通过对1Hz的时钟的分频得到0.5Hz的时钟信号。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY fen ISPORT(clk:IN STD_LOGIC;q:OUT STD_LOGIC);END fen;ARCHITECTURE fen_arc OF fen ISBEGINPROCESS(clk)VARIABLE x:STD_LOGIC;BEGINIF clk'EVENT AND clk='1'THENx:=NOT x;END IF;q<=x;END PROCESS;END fen_arc;波形仿真图:2、FTSET此模块完成在1s的时间内对被测信号计数的功能,并通过输出数据实现自动换挡的功能。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ftest ISPORT(clr,Fx,door:IN STD_LOGIC;alm:OUT STD_LOGIC;q3,q2,q1,q0,dang:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ftest;ARCHITECTURE CORN_ARC OF ftest ISBEGINPROCESS(door,Fx)VARIABLE c0,c1,c2,c3,c4,c5,c6 :STD_LOGIC_VECTOR(3 DOWNTO 0);VARIABLE x:STD_LOGIC;BEGINIF Fx'EVENT AND Fx='1'THENIF door='1'THENIF c0<"1001"THENc0:=c0+1;ELSEc0:="0000";IF c1<"1001"THENc1:=c1+1;ELSEc1:="0000";IF c2<"1001"THENc2:=c2+1;ELSEc2:="0000";IF c3<"1001"THENc3:=c3+1;ELSEc3:="0000";c4:=c4+1;ELSEc4:="0000";IF c5<"1001"THEN c5:=c5+1;ELSEc5:="0000"; IF c6<"1001"THEN c6:=c6+1;ELSEc6:="0000";alm<='1';END IF;END IF;END IF;END IF;END IF;END IF;END IF;ELSEIF clr='0'THENalm<='0';END IF;c6:="0000";c5:="0000";c4:="0000";c3:="0000";c2:="0000";c1:="0000";c0:="0000";END IF;IF c6/="0000"THENq3<=c6;q2<=c5;q1<=c4;q0<=c3;dang<="0100";ELSIF c5/="0000"THEN q3<=c5;q2<=c4;q1<=c3;q0<=c2;dang<="0011";q3<=c4;q2<=c3;q1<=c2;q0<=c1;dang<="0010";ELSEq3<=c3;q2<=c2;q1<=c1;q0<=c0;dang<="0001";END IF;END IF;END PROCESS;END CORN_ARC;波形仿真图:3、LOCK模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LOCK ISPORT(A0,A1,A2,A3,A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);q0,q1,q2,q3,q4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);clk:IN STD_LOGIC);END LOCK;ARCHITECTURE ART OF LOCK ISBEGINPROCESS(clk)BEGINIF(clk'EVENT AND clk='1')THEN q0<=A0;q1<=A1;q2<=A2;q3<=A3;q4<=A4;END IF;END PROCESS;END ART;波形仿真图:顶层仿真波形:实验结果:实现了四位数字频率计的设计。
电子技术课程设计报告学院:专业班级:学生姓名:学号:指导教师:完成时间:成绩:分频器的制作设计报告一. 设计要求把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。
院系电子信息工程系班级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 实验要求:电动机正反转控制的程序设计。
课程名称: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的闪烁频率,分频计数器应当如何改写。
分频器实验报告
《分频器实验报告》
实验目的:通过实验分频器的工作原理,了解其在电子电路中的应用。
实验器材:信号发生器、示波器、分频器、电压表、电流表、导线等。
实验原理:分频器是一种能够将输入信号按照一定的频率分成不同频率的输出
信号的电路。
在实验中,我们将使用信号发生器产生一个特定频率的信号,然
后通过分频器将其分成不同频率的输出信号,最后通过示波器观察输出信号的
波形。
实验步骤:
1. 将信号发生器的输出端连接到分频器的输入端,将分频器的输出端连接到示
波器。
2. 调节信号发生器的频率,观察示波器上的波形变化。
3. 记录不同频率下的输出波形,并测量输出信号的电压和电流。
实验结果:通过实验我们观察到,在不同频率下,分频器的输出波形呈现出不
同的频率特性,符合分频器的工作原理。
同时,我们还测量了输出信号的电压
和电流,验证了分频器的输出特性。
实验结论:分频器是一种广泛应用于电子电路中的重要器件,通过实验我们深
入了解了分频器的工作原理和特性。
在实际应用中,分频器可以用于信号处理、通信系统、音频设备等领域,具有重要的应用价值。
通过本次实验,我们不仅对分频器有了更深入的了解,同时也提高了对电子电
路原理的理解和应用能力。
希望通过今后的实验和学习,能够更加深入地掌握
电子电路的知识,为未来的科研和工程实践打下坚实的基础。
二进制分频器一.实验目的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)掌握关于串行序列的设计。
FPGA实验一简单分频器的设计-图文专业:__电子信息工程__姓名:_____陈华杰_____实验报告学号:______日期:___星期五上午___地点:应电楼303桌号2组课程名称:_____FPGA实验______指导老师:__竺红卫/陈宏__成绩:__________________实验名称:___实验一:简单分频器的设计____实验类型:_FPGA实验_同组学生姓名:__一、实验目的和要求(必填)二、实验内容和原理(必填)实验内容:根据实验板上晶振的输入频率50MHz,如果直接用这么高的时钟频率来驱动LED的闪烁,人眼将无法分辨。
因此本实验着重介绍如何通过分频计数器的方式将50MHz的输入频率降低为人眼可分辨的频率(10Hz以下),并在实验板的LED0~LED7上显示出来。
LED照片如下图:实验原理:实验板在滑动开关的上面有8个独立的贴片LED。
LED一端接地,另一端通过390欧的限流电阻接到Spartan-3E上。
要点亮一个LED,向相应的控制位置输出高电位。
三、主要仪器设备(必填)1.电脑一台;2.实验板一块,某ilin某Spartan-3E;3.实验板电源一只;四、实验步骤和现象1.新建Project和VerilogModule打开电脑桌面上的某ilin某ISE14.1软件,选择project→newproject建立新项目,输入projectname。
第1页,共17页核对选择Spartan3E和某C3S500E和FG320的封装形式。
跳出下面的选择框。
第2页,共17页选择NewSource,并在下面的选择框中选VerilogModule,填写刚才的newprojectname。
跳出下面的选择框。
点击NE某T。
第3页,共17页输入文件名,跳出下面的选择框。
点击NE某T。
跳出下面的选择框。
点击FINISH。
第4页,共17页2.建立约束文件选中SourceforProject窗口中的tet1.v文件,在Procee进程窗口中双击CreateNewSource。
实验报告
一、设计/实验项目名称:分频电路的设计
基本内容描述:以74161为基本元件,设计偶数分频电路,设计2分频,4分频,8分频,16分频和36分频的电路。
二、电路设计及原理
2分频电路的设计原理图
图1. 2分频电路的设计原理图
4分频,8分频和16分频电路的设计原理图
图2. 4分频,8分频和16分频电路的设计原理图
36分频的电路设计原理图
图3. 36分频的电路设计原理图
三、设计电路仿真与分析
2分频的电路仿真图如图4所示,由仿真图可以看出,输出端得输出周期为脉冲的两倍,所以达到2分频的作用,使原来的频率变成现在的两倍。
图4.2分频的电路仿真图
4分频,8分频,16分频,36分频的电路仿真图如图5,图6,图7,图8所示,从仿真图中,可以知道输出端得输出周期变成原来的4倍,8倍,16倍,36倍,达到4分频,8分频,16分频,36分频的功能。
图5.4分频电路仿真图
图6.8分频电路仿真图
图7.16分频电路仿真图
图8.36分频电路仿真图四、实验结论
(1)实现中所涉及到的电路基本可以实现所要求的功能;(2)通过基本集成元件的组合可以实现一些功能;
(3)这一次的实验进行的比较顺利;。
实验二:分频器`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. 运行实验:按下启动按钮,观察电机的转速变化,并记录相关数据。
四、实验结果在实验过程中,我们通过调节输入信号的频率和占空比,以及输出信号的频率和占空比,成功控制了电机的转速。
通过实验数据的记录和分析,我们发现输入信号的频率越高,电机的转速越快;而输入信号的占空比则会影响电机的平均转速。
五、实验总结通过本次实验,我们深入了解了数控分频器的工作原理和使用方法。
数控分频器作为一种重要的工业控制设备,可以灵活地控制电机的转速,提高生产效率。
在实际应用中,我们需要根据具体的需求来设置输入信号和输出信号的参数,以达到最佳的控制效果。
总之,数控分频器是一种非常实用的设备,在工业生产中起到了重要的作用。
通过本次实验,我们对其工作原理有了更深入的了解,并学会了正确使用方法。
希望今后能够通过实际应用,将数控分频器的优势发挥到极致,为工业生产的发展做出贡献。
课程名称: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的闪烁频率,分频计数器应当如何改写。
【主要程序段的改写】
reg[25:0][22:0]cnt;
always@(posedge clk)
if(rst_n)cnt<=26'd023'd0;
else if(cnt==26'h2FAF080)cnt=26'd0;
else cnt<=cnt+1'b1;//带复位键的位宽为26位的分频计数器,以降低闪烁频率reg[7:0]led;
always@(posedge clk)
if(rst_n)
led<=8'b00000001;//按键复位
else if((cnt==26'h2FAF08023'h7fffff)&&(led==8'b10000000))
led<=8'b00000001;//循环一周后从D5开始下一周的循环
else if(cnt==26'h2FAF08023'h7fffff)
led<=led<<1;//左移一位,右端补零
【分析】
因为是1Hz->1s;1/50MHz->20ns;易知:(50*106)10=(2FAF080)16,可以推出需要26位的分频器,因而要将分频信号cnt设为26位,并在cnt==26'h2FAF080时进行移位操作。
【实验现象】
当拨下rst_n对应的开关时,除了led0,其他led均点亮。
当将rst_n向上拨,电路正常工作,走马灯中灭的那盏灯的移位速率变为1s移位一次,说明程序修改成功。
【实验仿真】
仿真程序
module test;
//Inputs
reg rst_n;
reg clk;
//Outputs
wire[7:0]led1;
//Instantiate the Unit Under Test(UUT)
freq_divider uut(
.rst_n(rst_n),
.clk(clk),
.led1(led1)
);
initial begin
//Initialize Inputs
rst_n=0;
clk=0;
#100rst_n=1;
#500rst_n=0;
#100rst_n=1;
end
always#10clk=~clk;//因为是20ns一个周期,因而始终应该10ns翻转一次endmodule
【仿真结果】
可以看出每过1秒,走马灯向前挪一格(注:仿真时程序没有将led取反,因而是如图所示高电平部分的移动)
【仿真收获】
1.仿真时长的设定:
2.仿真程序编写中,发现了仿真的输出是不可以用reg类型的变量的,只能用wire类型的变量。
因而需要在always块外设置一组wire类型参数led1[7:0],其值等于在always 块之内的led[7:0]组。
2.设计2个灯同时走的走马灯实验
【主要程序段】
reg[22:0]cnt;
always@(posedge clk)
if(rst_n)cnt<=23'd0;
else cnt<=cnt+1'b1;//带复位键的位宽为26位的分频计数器,以降低闪烁频率
reg[7:0]led;
always@(posedge clk)
if(rst_n)
led<=8'b00000011;//按键复位
else if((cnt==23'h7fffff)&&(led==8'b11000000))
led<=8'b00000011;//循环一周后从D7开始下一周的循环
else if(cnt==23'h7fffff)
led<=led<<2;//左移2位,右端补零
【分析】
要想两个走马灯同时进行,只要将8个led分为4组,每组的led保持相同操作,即可实现。
为了达到这个目的,每次赋值都是将两个灯一起赋值,即通过程序中加粗字体的11和“<<2”来实现
【实验现象】
当拨下当拨下rst_n对应的开关时,除了led0和led1,其他led均点亮。
当向上拨rst_n对应的开关时,电路正常工作,以两个led为一组,从led0,led1到led6,led7依次熄灭,再回到led0,led1,循环往复。
五.实验收获
a)了解到了spartan3E板子的led组是用的上拉电路,即:信号=1时,led亮;led=0
时,led灭。
b)学会了在程序中设置与信号对应的管脚的操作。
c)学到了对一个变量不能在多个always块内赋值。
d)仿真输出值的类型必须是wire类型而不能是reg类型。