数控分频器的设计
- 格式:doc
- 大小:288.50 KB
- 文档页数:4
数控分频器的设计1、实验目的:学习数控分频器的设计、分析和测试方法。
2、实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例下文所示。
1) VHDL及语句分析LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF IS --定义实体DVFPORT ( CLK : IN STD_LOGIC; --时钟输入D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --7位预置数FOUT : OUT STD_LOGIC ); --输出的频率END DVF;ARCHITECTURE one OF DVF IS --定义结构体oneSIGNAL FULL : STD_LOGIC; --定义信号fullBEGINP_REG: PROCESS(CLK) --进程P_REG中CNT8从预置数D开始逐步累加到255后,FULL置1;再将CNT8置为D,循环以获得一个新的周期脉冲序列FULL,即产生新的频率V ARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK'EVENT AND CLK = '1' THENIF CNT8 = "11111111" THENCNT8 := D;FULL<='1';ELSE CNT8 := CNT8 + 1;FULL <= '0';END IF;END IF;END PROCESS P_REG ;P_DIV: PROCESS(FULL) --进程P_DIV中,FOUT是占空比为50%的周期信号。
目录一、设计任务与要求 (3)二、总体框图 (3)三、选择器件 (4)四、功能 (5)1、数控分频器 (5)2、BCD译码器 (6)3、扫描器 (11)4、3-8译码器 (13)5、7段数码管显示译码器 (16)五、总体设计电路图 (19)1总体(顶层)电路原理图 (19)2仿真结果 (19)3管脚分配图 (20)4.硬件连接情况 (20)六.心得体会 (20)数控分频器设计一、设计任务与要求数控分频器的功能就是当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,以实现所需的输出频率。
基本功能:1、实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。
如输入10010000,即对输入的时钟信号进行144分频,如输入01001000,即对输入的时钟信号进行72 分频。
2、输出的波形应为占空比位50%的方波。
3、有显示功能,显示当前的分频比,即,输入的二进制数的大小。
总体框图设计思路:数控分频器用计数值可并行预置的加法器设计完成,当在输入端给定不同输入数据时将对输入的时钟信号有不同的分频比。
把输入端输入的八位二进制数直接通过BCD译码器转换为十位BCD码表示的十进制数,通过扫描器对3个数码管进行选通扫描,最后7段数码管显示译码器对选中数码管的赋值进行译码,并驱动数码管显示该数据。
模块的功能:1、数控分频器:实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。
如输入10010000,即对输入的时钟信号进行144分频。
2、BCD译码器:把输入端的8位2进制数转换成10位BCD码表示的十进制数。
3、扫描器:when “000”=>daout<=dout(3 downto 0);when “001”=>daout<=dout(7 downto 4);when “010”=>daout<=dout(3 downto 2)<="00";daout(1 downto 0)<=dout(9 downto 8);when others=>null;4、3-8译码器:当sel=0时,q=11111110;选择个位数码管亮。
班级:学号:姓名:实验三数控分频器设计【实验目的】1.设计实现一个根据不同的输入,将时钟信号进行分频2.掌握分频计数器类型模块的Verilog描述方法;3.学习设计仿真工具的使用方法;4.学习层次化设计方法;【实验内容】1.用Verilog 语言设计带计数允许和复位输入的数控分频器。
2.编制仿真测试文件,并进行功能仿真。
3.下载并验证分频器功能【实验原理】分频就是根据输入的数字,对一段时钟周期进行分频,通过分频可以更清楚地看到输入与输出之间的关系,从而了解程序。
当用户设置好输入变量时,输出也就随之的改变。
【程序源代码】(加注释)module CONTROL(clk,din,Q,fout,pfull); //分频器的主模块input[7:0]din; //输入为七位的网线型变量input clk;output fout,pfull;output[7:0]Q;reg[7:0]Q; //中间变量,Q为计数值reg fout,full,pfull; //中间变量always@(posedge clk) //次过程块完成中间变量Q的赋值与full的赋值beginif(Q==din)beginQ=0;full=1; //如果Q=d,则Q重新置零,full等于1,表示以计满一次endelse beginQ=Q+1;full=0;endpfull=full; //对pfull赋值endalways@(posedge pfull) // 此块语句完成对fout的赋值,以pfull为时钟周期fout=~fout;endmodule【仿真和测试结果】班级:学号:姓名:根据此图可以看出,此电路为时序电路,CLK为时钟脉冲,周期为1s,d为输入,fout为输出,当计数满足输入的数值时,取反一次,即高低电平变换一次;pfull相当于进位脉冲,当输入满足输出时,就产生一个进位,而pfull持续一个周期就变换为低电平。
【实验心得和体会】通过本次实验,进一步熟悉并加深了对Verilog语言的认识,初步运用并熟悉了整个程序及操作,加深对数控分配器的理解。
实验三数控分频器设计【实验目的】1.设计实现一个根据不同的输入,将时钟信号进行分频2.掌握分频计数器类型模块的Verilog描述方法;3.学习设计仿真工具的使用方法;4.学习层次化设计方法;【实验内容】1.用Verilog 语言设计带计数允许和复位输入的数控分频器。
2. 编制仿真测试文件,并进行功能仿真。
3. 下载并验证分频器功能【实验原理】数控分频器的功能是在输入端给定不同数据时,将对输入的时钟信号有不同的分频比,对于一个N分频器,分频出的时钟周期是原时钟周期的N倍,频率变为原来的1/N。
对于一个8位计数器,如果输入数D,然后启动计数器工作,则经过D倍的时钟周期,计数器溢出时,输出pfull变为高电平,再以pfull为敏感信号,对fout进行取反操作,如此N=2D。
计数一次后,再重新计数,反复进行直至输入被赋予新值。
对于数控分频数器,装载不同的计数初始值时,会有不同频率的溢出信号,从而得到不同的输出。
数控分频器是利用计数值可并行预置的加法计数器设计完成的。
【程序源代码】(加注释)module FDIV(clk,fdiv,fout,pfull); //8位二进制的数控分频计input clk; //时钟信号input [7:0] fdiv; //8位加载数据output pfull; //定义一个1位的寄存器型中间控制变量output fout; //分频数据输出reg [7:0] Q; reg fout,full,pfull;always @(posedge clk) begin //clk有上升沿时,启动以下程序if(Q==fdiv) begin Q=0;full=1;end //若Q==fdiv,Q=0,full=1else begin Q=Q+1;full=0;end //若Q!=fdiv,Q累加1,full=0pfull=full;end //将full数据向pfull输出always @(posedge pfull)fout=~fout; //当pfull有上升沿时,对fout取反endmodule【RLT电路】【仿真和测试结果】功能分析:当输入fdiv为预置数“5”时,经过5倍的clk周期,pfull由低电平变为高电平;当pfull有上升沿时,对fout取反fout,因此fout的周期是clk的10倍,即完成对clk的10分频功能。
实验七数控分频器一. 实验目的1. 学习数控分频器的设计、分析和测试方法;2. 了解蜂鸣器的发声原理二. 准备知识我们知道,分频器与计数器是基于同一原理的。
我们如果设计N进制的计数器,即其模为N,一般情况下,我们使用计数器都是从0计数到N-1,输出进位,然后复位或清零,以后一次循环。
其计数结果就是0~N-1,共N种变化,进位就是一个N次的分频器。
同样,计数结果从1~N,或从2~N+1……在最大计数值时输出进位,其进位同样也是N次分频,为了方便和其它考量,一般在这种设计时,都是把计数器的最大计数设为计数器计满时的最大值,即如果是8位的N进制计数器,计数范围为0xFF+1-N~0xFF,0xFF就是由计数器位数决定的最大计数值。
二者的区别在于:0~N-1计数方式是同一起点计数,0xFF+1-N~0xFF计数方式是同一终点计数。
在使用可变分频器的设计中,往往采用第二种方法,原因是其分频频率比较“干净”。
蜂鸣器从控制电路上分为有源和无源,有源蜂鸣器直接接上其额定电源(1.5~15V直流工作电压,和蜂鸣器本身有关),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声,即对蜂鸣器加的电压或通过的电流要是在300Hz~几KHz(听觉范围内)的方波信号,从能量的角度来说,这个方波信号最好是占空比为1:1的,这时其发声强度最大。
实验箱上的蜂鸣器是无源蜂鸣器,本实验使用按键控制分频器的输出频率,其进位输出结果接到蜂鸣器,在听觉范围内的频率,可以直观的分辨数控分频器的变化。
三. 实验步骤1、新建工程dvf新建工程文件夹shiyan7,在该文件夹中新建工程dvf。
2、新建原理图文件dvf编写模为可变参数、位宽为可变参数的通用计数分频器模块Int_Div,并封装。
(参考程序清单),要仔细看懂程序。
新建HDL数控分频器文件pluse,其进位输出经T触发器,送入蜂鸣器。
附表1:
广州大学学生实验报告
开课学院及实验室:物理与电子工程学院-电子楼317室2016年 5 月 5 日
if (!RST) begin Q1<=0; FULL<=0; end
else if (LD) begin Q1<=D; FULL<=1; end
else begin Q1<=Q1+1; FULL <=0; end
assign LD=(Q1==4'B0000);
assign PM=FULL;
assign DOUT=Q1;
endmodule
四、仿真结果:
由波形图可见,当RST为低电平时,LD置位,装载预置数5(0101);当计满值为0000(图中DOUT:1111后的一小段),LD置位并输出一次脉冲PM,然后加载预置数,继续计数。
五、引脚锁定:
六、硬件测试结果:
下载程序到目标机
注:键4-键1为设置预置数
七、实验心得:
通过本次实验,使我明白了数控分频器的工作原理,并通过蜂鸣器直观地对比了不同的分频效果。
巩固了理论知识和实验流程,提高了效率,为后续实验打下良好的基础。
项目名称”栏以上部分统一。
实验四、数控分频器的设计
(1)实验目的:学习数控分频器的设计、分析和Modelsim仿真方法。
(2)实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,参考代码中的数控分频器是用可并行预置的加法计数器设计完成的,当加法计数器溢出时进行并行预置。
(3)实验内容1:分析参考代码中的各语句功能、设计原理、逻辑功能,根据图1的波形提示,编写相应的Testbench文件代码,并用Modelsim进行仿真(仿真可以跳过时钟分频到100hz进程)。
(4)实验内容2:在此基础上进行硬件验证。
实验方法为:将clk接20Mhz 时钟信号,rst_n接核心板开关S1,fout接发光二极管SD0,预置值d从DKA0-DKA7输入,改变d的输入,从发光二极管SD0判断输出信号的频率。
(5)实验附加内容:将参考代码扩展成16位分频器,并提出此项设计的实用示例,如PWM的设计等。
(6)思考题:怎样利用2个参考代码中给出的模块设计一个电路,使其输出方波的正负脉宽的宽度分别由两个8位输入数据控制?
(7)附加题:从实验中你可以得到设计硬件电子琴的方法吗?
图1 当给出不同输入值d时,fout输出不同频率(clk周期=50ns)
参考代码。
实验六数控分频器设计一.实验目的1.设计实现一个根据不同的输入,将时钟信号进行分频2.掌握分频计数器类型模块的Verilog描述方法;3.学习设计仿真工具的使用方法;4.学习层次化设计方法;二.实验环境1.硬件环境:MagicSOPC实验箱,P4电脑;2.软件环境:QuartusⅡ软件一套。
三.实验内容1.用Verilog 语言设计带计数允许和复位输入的数控分频器。
2.编制仿真测试文件,并进行功能仿真。
3.下载并验证分频器功能四.实验原理分频就是根据输入的数字,对一段时钟周期进行分频,通过分频可以更清楚地看到输入与输出之间的关系,从而了解程序。
当用户设置好输入变量时,输出也就随之的改变。
五.实验步骤源程序:module dvf2(clk,d,fout,pfull);input clk;input[7:0]d;output fout,pfull;reg[7:0]cnt;reg pfull;reg fout;always @(posedge clk )beginif(cnt==d)begin cnt=8'd0;pfull =1;endelsebegin cnt=cnt+1;pfull=0;endendalways@(posedge pfull)fout=~fout;Endmodule1)RTL原理图2)仿真按管脚分配图分配管脚。
安装好实验箱驱动后点击图中start开始运行(图中没有安装驱动)。
六.实验心得体会本次实验初步了解了实验箱的构造,学会了实验箱与软件的连接方法,了解了软件下载到试验箱芯片上的基本流程,通过和老师的学习,同学的交流完成了本次实验。
EDA设计课程实验报告实验题目:数控分频器设计学院名称:专业:班级:姓名:高胜学号小组成员:指导教师:一、实验目的学习数控分频器的设计、分析和测试方法。
二、设计任务及要求1、设计总体要求:在SmartSOPC试验箱上的实现数控分频器的设计。
在clk输入64kHz或更高(要确保分频后落在音频范围)的频率信号(由int_div模块分频得到);输出FOUT接蜂鸣器BUZZ-ER,由KEY1/KEY2控制输入8位预置数,并在数码管1~2上显示(调用key_led模块)。
2、设计基本要求:(1)能将频率分频。
(2)进行正常的蜂鸣器的蜂鸣功能。
(3)由2个数码管显示预置数。
三、系统设计1、整体设计方案数控分频器的输出信号频率为输入数据的函数。
数控分频器的clk为时钟输入端,data是数据输入端,fout是数控频率输出端。
数控分频器的输出频率受数据data的控制,data越大,输出频率越高。
数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。
数控分频器是由数码管显示电路、按键控制电路、脉冲发生电路这3个基本电路组成。
数控分频器的系统框图(见图1):图1 数控分频器的系统框图2、功能模块电路设计48MHz的脉冲经过分频器分成64KHz,然后输入带数控分频电路当中,按键控制分频电路中的频率变化,数码管显示预置数,蜂鸣器响起。
(1)输入输出模块框图(见图2)图2 数控分频器的输入输出模块框图(2)算法流程图(见图3)图3数控分频器的算法流程图(3)Verilog源代码按键控制电路代码:module key_led(clock,key,led,hex,bin,seg,dig,ledin,data);input clock; //系统时钟(48MHz)input[7:0] key; //按键输入(KEY1~KEY8)output[7:0] led; //LED输出(LED1~LED8)output[15:0]hex; //4位16进制数输出(在数码管1~4显示)output[3:0]bin; //4位2进制数输出(在LED1~LED4显示)output[7:0]seg; //数码管段码输出output[7:0]dig; //数码管位码输出input[3:0]ledin; //LED显示输入(在LED5~LED8显示)input[15:0]data; //数码管显示输出(在数码管5~8显示)reg[15:0]hex_r;reg[3:0]bin_r;reg[7:0]seg_r;reg[7:0]dig_r;reg[16:0]count; //时钟分频计数器reg[7:0]dout1,dout2,dout3,buff; //消抖寄存器reg[2:0]cnt3; //数码管扫描计数器reg[3:0]disp_dat; //数码管扫描显存reg div_clk; //分频时钟,用于消抖和扫描wire[7:0]key_edge; //按键消抖输出//信号输出assign hex = hex_r;assign bin = bin_r;assign seg = seg_r;assign dig = dig_r;assign led = ~{ledin,bin_r};//时钟分频部分always @(posedge clock)beginif (count < 17'd120000)begincount <= count + 1'b1;div_clk <= 1'b0;endelsecount <= 17'd0;div_clk <= 1'b1;endend//按键消抖部分always @(posedge clock)beginif(div_clk)begindout1 <= key;dout2 <= dout1;dout3 <= dout2;endend//按键边沿检测部分always @(posedge clock)beginbuff <= dout1 | dout2 | dout3;endassign key_edge = ~(dout1 | dout2 | dout3) & buff;//4位16进制数输出部分always @(posedge clock) //按键1 beginif(key_edge[0])hex_r[15:12] <= hex_r[15:12] + 1'b1;endalways @(posedge clock) //按键2 beginif(key_edge[1])hex_r[11:8] <= hex_r[11:8] + 1'b1;always @(posedge clock) //按键3 beginif(key_edge[2])hex_r[7:4] <= hex_r[7:4] + 1'b1;endalways @(posedge clock) //按键4 beginif(key_edge[3])hex_r[3:0] <= hex_r[3:0] + 1'b1;end//4位2进制数输出部分always @(posedge clock) //按键5 beginif(key_edge[4])bin_r[0] <= ~bin_r[0];endalways @(posedge clock) //按键6 beginif(key_edge[5])bin_r[1] <= ~bin_r[1];endalways @(posedge clock) //按键7 beginif(key_edge[6])bin_r[2] <= ~bin_r[2];endalways @(posedge clock) //按键8 beginif(key_edge[7])bin_r[3] <= ~bin_r[3];//数码管扫描显示部分always @(posedge clock) //定义上升沿触发进程beginif(div_clk)cnt3 <= cnt3 + 1'b1;endalways @(posedge clock)beginif(div_clk)begincase(cnt3) //选择扫描显示数据3'd0:disp_dat = hex_r[15:12]; //第一个数码管3'd1:disp_dat = hex_r[11:8]; //第二个数码管3'd2:disp_dat = hex_r[7:4]; //第三个数码管3'd3:disp_dat = hex_r[3:0]; //第四个数码管3'd4:disp_dat = data[15:12]; //第五个数码管3'd5:disp_dat = data[11:8]; //第六个数码管3'd6:disp_dat = data[7:4]; //第七个数码管3'd7:disp_dat = data[3:0]; //第八个数码管endcasecase(cnt3) //选择数码管显示位3'd0:dig_r = 8'b01111111; //选择第一个数码管显示3'd1:dig_r = 8'b10111111; //选择第二个数码管显示3'd2:dig_r = 8'b11011111; //选择第三个数码管显示3'd3:dig_r = 8'b11101111; //选择第四个数码管显示3'd4:dig_r = 8'b11110111; //选择第五个数码管显示3'd5:dig_r = 8'b11111011; //选择第六个数码管显示3'd6:dig_r = 8'b11111101; //选择第七个数码管显示3'd7:dig_r = 8'b11111110; //选择第八个数码管显示endcaseendalways @(disp_dat)begincase(disp_dat) //七段译码4'h0:seg_r = 8'hc0; //显示04'h1:seg_r = 8'hf9; //显示14'h2:seg_r = 8'ha4; //显示24'h3:seg_r = 8'hb0; //显示34'h4:seg_r = 8'h99; //显示44'h5:seg_r = 8'h92; //显示54'h6:seg_r = 8'h82; //显示64'h7:seg_r = 8'hf8; //显示74'h8:seg_r = 8'h80; //显示84'h9:seg_r = 8'h90; //显示94'ha:seg_r = 8'h88; //显示a4'hb:seg_r = 8'h83; //显示b4'hc:seg_r = 8'hc6; //显示c4'hd:seg_r = 8'ha1; //显示d4'he:seg_r = 8'h86; //显示e4'hf:seg_r = 8'h8e; //显示f endcaseendendmodule数控分频电路代码:module pulse(clk,data,fout); //数控分频器 input clk; //时钟输入 input[7:0]data; //预置分频数reg fout_r; //输出寄存器reg[7:0] cnt8; //8位计数器reg full; //溢出标志位reg cnt2;assign fout = fout_r; //分频输出always @(posedge clk)beginif(cnt8 == 8'hff)begincnt8 <= data; //当cnt8计数计满时,输入数据Data被同步预置给计数器Cnt8 full <= 1'b1; //同时使溢出标志信号full输出为高电平endelsebegincnt8 <= cnt8 + 1'b1;//否则继续作加1计数full <= 1'b0; //且输出溢出标志信号full为低电平endendalways @(posedge full)beginif(full == 1'b1)begincnt2 = ~cnt2; //如果溢出标志信号full为高电平,D触发器输出取反if(cnt2 == 1'b1)fout_r = 1'b1;elsefout_r = 1'b0;endendendmodule四、系统调试1、仿真调试(1)仿真波形图(见图4)图4 数控分频器仿真波形(2)波形分析由波形图可以知道实验成功。
实验6 数控分频器的设计(1)实验目的:学习数控分频器的设计、分析和测试方法。
(2)实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例6-20所示。
【例6-20】8位数控分频器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF ISPORT(CLK : IN STD_LOGIC;D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);FOUT : OUT STD_LOGIC);END ENTITY DVF;ARCHITECTURE one OF DVF 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被同步预置给计数器CNT8FULL <= '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' THENCNT2 := NOT CNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反IF CNT2 = '1' THEN FOUT <= '1';ELSE FOUT <= '0';END IF;END IF;END PROCESS P_DIV;END ARCHITECTURE one;(3)分析:根据图6-21的波形提示,分析例6-20中的各语句功能、设计原理及逻辑功能,详述进程P_REG和P_DIV的作用,并画出该程序的RTL电路图。
实验五数控分频器的设计一、设计目的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;。
数控分频器设计报告一、设计目的学习数控分频器的设计、分析和测试方法。
以quartusⅡ为开发平台,用VHDL语言和原理图结合的方法设计占空比为50%的5分频电路、6分频电路和5.5分频电路,通过功能选择键选择需要的分频比。
二、功能描述CLK输入为待分频的信号。
当S1S0输入为时,该数控分频器输出分频比为;当S1S0输入为时,该数控分频器输出分频比为;当S1S0输入为时,该数控分频器输出分频比为;三、设计原理数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。
用VHDL语言设计占空比为50%的任意奇数次、偶数次分频电路,用原理图输入法设计5.5分频电路,通过3选一数据选择器选择需要的分频电路,从而达到实验目的。
四、设计流程(1)占空比为50%的5分频电路1、新建文件夹d:\fenpin52、打开quartusⅡ创建工程fenpin53、新建vhdl文本,输入设计程序(见附1),保存为fenpin5.vhd4、启动编译,建立仿真波形图(见附2)5、将该5分频电路封装设置成可调用的元件。
附图1:附图2:(2)占空比为50%的6分频电路1、新建文件夹d:\fenpin62、打开quartusⅡ创建工程enpin63、新建vhdl文本,输入设计程序(见附3),保存为fenpin6.vhd4、启动编译,建立仿真波形图(见附4)5、将该6分频电路封装设置成可调用的元件。
附图3:附图4:(3)5.5分频电路1、用VHDL输入法设计模为6的计数器M6并设置为可调用元件(VHDL文件见附5)。
2、设计D触发器DFF,实现其clk上升沿到来时Q输出取反(附6)。
3、新建文件夹d:\fenpin3,将计数器M6和触发器DFF的vhd文件和bsf文件复制到fenpin3文件夹下,打开quartusⅡ创建工程fenpin34、设计5,5分频电路的顶层文件(附7),保存为fenpin3.bdf5、启动编译,建立仿真波形图(见附8)6、将该5.5分频电路封装设置成可调用的元件。
可编程逻辑设计——实验六报告学院:物理与信息工程学院专业:通信工程年级:2007级班级:二班学号:110700221姓名:林明明指导老师:杨秀芝实验六数控分频器的设计一、实验目的:学习数控分频器的设计和测试方法。
二、实验原理:数控分频器的功能为在不同输入信号时,对时钟信号进行不同的分频,在输出端输出不同频率的信号。
该电路可以用具有并行预置功能的加法计数器实现,方法是对应不同的输入信号,预置数(初始计数值)设定不同的值,计数器以此预置数为初始状态进行不同模值的计数,当计数器的状态全为1时,计数器输出溢出信号。
用计数器的溢出信号作为输出信号或输出信号的控制值,使输出信号的频率受控于输入的预置数。
电路输出波形图:三、实验内容:1)根据实验原理画出电路框图,并计算在不同预置数时输出信号的频率与时钟频率的比值。
2)编写实现数控分频器的VHDL程序。
要求输出信号的占空比尽量为50%。
提示:可以将计数器溢出信号输出给一个翻转触发器,溢出信号的边沿作为触发器的触发信号,触发器的输出就是分频器的输出(注意计数器初始计数值与输出频率之间的关系)。
3)用QuartusII对设计进行编译、综合、仿真,给出仿真波形和时序分析数据。
4)通过QuartusII集成环境,将设计下载到实验电路上进行硬件测试。
输入不同的clk信号和不同的输入控制信号,测试输出波形。
管脚锁定:clk clk1 43D(3) PIO23 30 SW1D(2) PIO24 35 SW2D(1) Pio25 36 SW3D(0) PIO26 37 SW4Fout PIO19 29 LED12四、思考题:如果需要进行奇数分频(如3分频),能否够保持输出波形的占空比为50%?如果不能,如何使占空比尽量接近50%;如果可以,应如何做?五、实验结果:数控分频器的原理框图:数控分频器输出频率与输入时钟的关系:答:数控分频器输出频率与输入时钟频率成正比。
对于相同的计数器初始计数值,如果时钟频率变大(或缩小)为原来的n倍,那么数控分频器输出频率也将变大(或缩小)为原来的n倍。
实验五数控分频器的设计一、实验目的1、学习数控分频器的设计、分析和测试方法。
2、了解和掌握分频电路实现的方法。
3、掌握EDA技术的层次化设计方法。
二、实验原理数控分频器的功能就是当输入端给定不同的输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器来设计完成的,方法是将计数溢出位与预置数加载输入信号相接得到。
三、实验内容本实验要求完成的任务是在时钟信号的作用下,通过输入八位的按键开关输入不同的数据,改变分频比,使输出端口输出不同频率的时钟信号,过到数控分频的效果。
在实验中时,数字时钟选择2HZ作为输入的时钟信号,用八个按键开关做为数据的输入,当八个按键开关置为一个二进制数时,在输出端口输出对应频率的时钟信号,用输出端口接LED灯来观察频率的变化。
四、实验步骤1、打开QUARTUSII软件,新建一个工程。
2、建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。
3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序.4、 编写完VHDL 程序后,保存起来。
方法同实验一。
5、 对自己编写的VHDL 程序进行编译并仿真,对程序的错误进行修改。
6、 编译仿真无误后,依照按键开关、LED 与FPGA 的管脚连接表(表1-1、表1-2)或参照附录进行管脚分配。
表5-1是示例程序的管脚分配表。
分配完成后,再进行全编译一次,以使管脚分配生效。
端口名 使用模块信号 对应FPGA 管脚说 明 INCLK CLOCK2 17 时钟为10KHZDATA0 键1 1 分频比数据 DATA 1 键2 2 DATA 2 键3 3 DATA 3 键4 4 DATA4 键5 5 DATA 5 键6 6 DATA 6 键7 7 DATA 7 键8 10 FOUTLED 灯 D111分频输出 表5-1 端口管脚分配表7、 “模式选择键”:按动该键能使实验板产生12种不同的实验电路结构。
姓名:课程名称:EDA技术与VHDL院(系):电子信息与电气工程学院专业/年级:实训六数控分频器的设计一、实验目的:学习数控分频器的设计、分析和测试方法。
二、实验内容1、在QuartusⅡ上对数控分频器的程序进行编辑、编译、综合、适配、仿真。
说明例中各语句功能、设计原理及逻辑功能,详述进程P_REG和P_DIV的作用,并画出该程序的RTL电路图。
2、给出其时序仿真波形。
三、实验仪器电脑。
四、实验原理数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可五、实验内容:程序设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DVF ISPORT ( CLK : IN STD_LOGIC;D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);FOUT : OUT STD_LOGIC );END;ARCHITECTURE one OF DVF ISSIGNAL FULL : STD_LOGIC;BEGINP_REG: PROCESS(CLK)V ARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINIF CLK'EVENT AND CLK = '1' THENIF CNT8 = "11111111" THENCNT8 := D;FULL <= '1';ELSE CNT8 := CNT8 + 1; FULL <= '0';END IF;END IF;END PROCESS P_REG ;P_DIV: PROCESS(FULL)V ARIABLE CNT2 : STD_LOGIC;BEGINIF FULL'EVENT AND FULL = '1' THEN CNT2 := NOT CNT2;IF CNT2 = '1' THEN FOUT <= '1'; ELSE FOUT <= '0'; END IF;END IF;END PROCESS P_DIV ;END;软件编译仿真分析。
实验目的与要求实验名称:数控分频器设计实验目的:将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位计数器形式,完成全部仿真测试和硬件测试内容。
数控分频器的设计
一、实验目的:
学习数控分频器的设计和测试方法。
二、实验原理:
数控分频器的功能为在不同输入信号时,对时钟信号进行不同的分频,在输出端输出不同频率的信号。
该电路可以用具有并行预置功能的加法计数器实现,方法是对应不同的输入信号,预置数(初始计数值)设定不同的值,计数器以此预置数为初始状态进行不同模值的计数,当计数器的状态全为1时,计数器输出溢出信号。
用计数器的溢出信号作为输出信号或输出信号的控制值,使输出信号的频率受控于输入的预置数。
电路输出波形图:
三、实验内容:
1)根据实验原理画出电路框图,并计算在不同预置数时输出信号的频率与时钟频率的比值。
-------------------------------------------------------------------------------------------------------------
原理图:
数控分频器输出频率与输入时钟的关系:
当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。
任意小数都可以表示成a n b
+形式,其中a<b 。
设分频器输入脉冲数为M ,输出脉冲数为P ,则有以下关系:
()()1 a nb a M n P P b b n b a n a P b +⎛⎫⎛⎫=+= ⎪ ⎪⎝⎭⎝⎭-++⎛⎫= ⎪⎝⎭
上式表明分频器进行b 次n 分频时,设法多输入a 个脉冲。
或者说在b 个脉冲输入周期中,进行b-a 次n 分频和a 次n+1分频。
这就是小数分频的基本原理。
n 和n+1也称为分频模式。
利用上述小数分频的方法,同样也可以实现整数分频,即令a=0,就可以完成整数N 分频
2)编写实现数控分频器的VHDL程序。
要求输出信号的占空比尽量为50%。
---------------------------------------------------------------------------
程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DVF IS
PORT(CLK:IN STD_LOGIC;D:STD_LOGIC_VECTOR(3 DOWNTO 0);FOUT:OUT STD_LOGIC);
END;
ARCHITECTURE one OF DVF IS
SIGNAL FULL:STD_LOGIC;
BEGIN
P_REG:PROCESS(CLK)
VARIABLE CNT4:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1' THEN
IF CNT4="1111" THEN
CNT4:=D;
FULL<='1';
ELSE CNT4:=CNT4+1;
FULL<='0';
END IF;
END IF;
END PROCESS P_REG;
P_DIV:PROCESS(FULL)
VARIABLE CNT2:STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL='1' THEN
CNT2:=NOT CNT2;
IF CNT2='1' THEN FOUT<='1';
ELSE FOUT<='0';
END IF;
END IF;
END PROCESS P_DIV;
END;
仿真波形:
管脚锁定:
信号旧试验箱新试验箱No.5
管脚号连接的器件管脚号连接的器件clk 43 Clk1 28 CLK0
D(3) 30 SW1233 SW1
D(2) 35 SW2234 SW2
D(1) 36 SW3235 SW3
D(0) 37 SW4236 SW4
Fout 29 LED1212 LED8。