实验4 数控分频器设计
• • • • • • • • • • • •
begin clk<=inclk xor div2; fout<=cout;
--inclk与divide2异或后作为模3计数器的时钟
p0:process(clk) begin if clk'event and clk='1' then if cnt="10" then cout<='1';cnt<="00"; else cout<='0';cnt<=cnt+1; end if; end if; end process;
(2)分频系数2.5的小数分频器设计方案 设有一个5MHz的时钟源,电路中需要产生 一个2MHz的时钟信号,则分频比是2.5。 设计中,先设计一个模3的计数器(上升沿 计数),然后通过在时钟下降沿处产生分频 信号的上升沿,以实现半整数分频。
inclk 异或门 clk 模N计数器 二分频 fin/(2N-1)
if clk'event and clk='1' then if cnt8="11111111" then cnt8:=d; full<='1'; --如果cnt8记满全1,预置数d被同步置入计数器cnt8, 准备开始下次加法计数。记满时进位信号输出高电平1 else cnt8:=cnt8+1;full<='0'; --否则继续作加1计数,full输出低电平0 end if; end if; end process; p1:process(full) --进程p1,以full信号为敏感岑书 variable cnt2 :std_logic; --定义内部变量cnt2 begin if full'event and full='1' then cnt2:=not cnt2; --变量cnt2是信号full的2分频 end if; if cnt2='1' then fout<='1'; --分频最终结果fout else fout<='0'; end if; end process; end;
实验四 数控分频器的设计
1.实验目的 (1)学习时序电路VHDL语言设计。 (2)学习多进程设计,掌握变量的用法与信号 的区别。 (3)掌握整数数控分频器的原理及设计方法。 (4)掌握半整数数控分频器的原理及设计方法
2. 背景知识
分频器在时序逻辑电路中应用广泛.数控分频 器的功能就是当在输入端给定不同的输入数据时 ,将对输入的时钟信号有不同的分频比。 整数分频器采用计数初值可并行预置的加法 (或者减法)计数器构成。时钟源与所需频率不 成整数倍关系,需要采用小数分频器进行分频。
3.实验内容与要求
(1)、设计一个整数数控分频器,根据预置数的不 同实现不同的分频比。 (2)、设计一个分频系数是2.5的小数分频器。 实验要求:波形仿真+硬件验证
4. 实验方案 (1)、整数分频器设计方案
假设计数器计数时钟是clock,数据位宽为4,进行加 法计数,计数初值为“1011”,计数器记满“1111”, 需要计数5次(1011→1100→1101→1110→1111),每5个 clock脉冲,count输出一个脉冲,这样count的频率就是 clock频率的1/5,称为5分频。假设预置数是d[3..0],这样 分频比R= "1111"-d[3..0]+1。也就是如果d[3..0]=11(二进 制1011),则R=5;如果是减法计数器,则分频比R=12(从 11减法计数到0,共12次),则分频比公式为R=d[3..0]+1 。
cnt8从零开始计 数,记到全1时才 进行第一次初值置 入,然后才开始分 频
计 数 寄 存 器
思考:采用此方法能够设计的分频器的特点? 偶次分频?奇次分频?占空比? 思考: 1、分频波形从12.8us开始的原因? 2、clk时钟频率为20MHz,预置数d=252,则信号full的频率? 信号fout的频率? 3、如果预置数是238呢?
library ieee; --设计库的打开和程序包的允许使用 use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity pulse is --定义实体pulse port(clk : in std_logic; --初始时钟clk,即分频前时钟 d : in std_logic_vector(7 downto 0); --8位预置数d fout : out std_logic); --分频后输出信号 end; architecture one of pulse1 is --定义结构体 signal full : std_logic; --定义信号full begin p0:process(clk) --进程p0,以clk为敏感参数 variable cnt8 :std_logic_vector(7 downto 0); --定义内部变量cnt8 begin
fin/(N-0.5)
• • • • • • • • • • • • • •
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity half_integer is port( inclk :in std_logic; --初始时钟inclk,需要分频的信号 fout : out std_logic; --分频后输出时钟 clk :buffer std_logic); --模3计数时钟 end; architecture one of half_integer is signal div2,cout:std_logic; signal cnt :std_logic_vector(1 downto 0);
• inclk是分频前的初始时钟,在计数到2时,信号cout是低 电平0,div2也是0,此时inclk与div2相异或,得到的结果 clk等于inclk,因此在这一段时间内,相当于以inclk为脉冲 进行计数。第3个inclk计数脉冲上升沿到来后,根据程序 判断此时cnt=“10”,所以cnt赋值0,cout赋值高电平1 ,即cout产生上升沿,将会触发进程p1,导致信号div2反 转,变为高电平1。当div2变为高电平1后,div2与inclk相 异或,使得信号clk变为inclk取反,即在第3个inclk下降沿 处会产生clk信号的上升沿,导致cnt计数从0到1,即0的持 续时间只有半个周期(第3个inclk信号上升沿到下降沿) ,因而是一个2.5分频的结果。
分频器设计的基础——计数器
4位二进制加法计数器
计满全1后,产生进位信号cout,cout的频率是计数时钟 频率的16分之一,称cout是clk的十六分频。 如果有一个预置数d[3..0],从d开始计数计到全1,这时进 位信号cout与clk的频率关系是什么呢? 分频比R=“1111”-d[3..0]+1
关于fout频率的计算 full信号的分频比F="11111111"- d[7..0]+1,而fout信号的频率是full频率的一 半,产生的分频信号fout的分频比应是R= ("11111111"-d[7..0]+1)×2。通过公式 根据需要的分频比,计算预置初值d。假设 需要进行8分频,预置数d是252(步骤(略) 注:(A)把SW5改造成普通I/O口(P51); (B)学会调出内部寄存器的方法(P50) (2) 实验结果(略)
6.实验扩展:
(1)、在例2-4-1的基础上,添加异步复位信号 reset。当reset=0时,计数器赋初值;reset=1时 ,计数器在时钟clk的作用下计数。 (2)、设计一个任意半整数的分频器。可以通过更 改计数模值N实现如7.5分频、10.5分频。
• • • • • • •
p1:process(cout) begin if cout'event and cout='1' then --信号cout上升沿时,div2取反 div2<=not div2; --即div2是cout的二分频 end if; end process; end;
设计的关键点在于一个信号与0异或,得到的是信号本身;与1异或, 得到的是信号的取反。。
基于VHDL数控分频器设计
目录一、设计任务与要求 (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、牢固掌握用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;。
数控分频器的VHDL设计
实验六数控分频器的VHDL设计实验目的:学习数控分频器的设计、分析和测试方法。
实验项目分析设计:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。
其原理是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。
实验内容1:用VHDL语言设计一个8位数控分频器。
要求:在QuartusⅡ上进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。
引脚锁定以及硬件下载测试,选择目标器件EP1C3,建议选实验电路模式No.0。
用键1、键2作为置数数据D的输入端,CLK接clock0,FOUT接至扬声器Speaker。
(时序仿真时CLK周期设5ns~10ns,D分别设33H, FEH)所编写的源程序如下: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;FULL<='1';ELSE CNT8:=CNT8+1;FULL<='0';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;IF CNT2='1' THEN FOUT<='1';ELSE FOUT<='0';END IF;END IF;END PROCESS P_DIV;END ARCHITECTURE ONE;仿真波形如下所示:经过硬件测试后,输入与输出满足题目要求和仿真结果。
实验五 数控分频器的设计
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PULSE IS PORT(CLK:IN STD_LOGIC; D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT:OUT STD_LOGIC); END; ARCHITECTURE ONE OF PULSE IS SIGNAL FULL:STD_LOGIC; BEGIN
P_DIV:PROCESS(FULL)—由于P_REG进程数控 分频输出的FULL是脉宽极窄的脉冲波,为便于 驱动扬声器, P_DIV进程为一个二分频计数器, 使到达扬声器的波形为对称方波。 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;
实验五
数控分频器的设计
(参照实验教材P53 实验 3 中的内容)
一、实验目的
学习数控分频器的设计、分析和硬件测试
方法。
二、上用VHDL语言完成数 控分频器的设计。 2、 对所编写的源程序进行编译、综合、 适配、引脚锁定、下载测试; 3、 进行仿真测试;
2、实验内容及步骤
P_REG:PROCESS(CLK) VARIABLE CNT8:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN IF CLK'EVENT AND CLK='1' THEN IF CNT8="11111111" THEN CNT8:=D;FULL<='1'; ELSE CNT8:=CNT8+1; FULL<='0'; END IF; END IF; END PROCESS P_REG;
分频器
数控分频器设计一、实验目的1 设计实现一个根据不同的输入 将时钟信号进行分频2 学习设计仿真工具的使用方法二、硬件要求主芯片Altera EPM7128SLC84-15,时钟信号,一位拨码开关。
三、实验原理数控分频器的功能为在不同输入信号时,对时钟信号进行不同的分频,在输出端输出不同频率的信号。
该电路可以用具有并行预置功能的加法计数器实现,方法是对应不同的输入信号,预置数(初始计数值)设定不同的值,计数器以此预置数为初始状态进行不同模值的计数,当计数器的状态全为1时,计数器输出溢出信号。
用计数器的溢出信号作为输出信号或输出信号的控制值,使输出信号的频率受控于输入的预置数。
四、实验源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dvf is port(clk:in std_logic;d:in std_logic_vector(3 downto 0);fout:out std_logic);end;architecture bhv of dvf issignal full:std_logic;beginp_reg:process(clk)variable cnt8:std_logic_vector(3 downto 0);beginif clk'event and clk='1' thenif cnt8="1111"then cnt8:=d;full<='1';else cnt8:=cnt8+1;full<='0';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;if cnt2='1'then fout<='1';else fout<='0';end if;end if;end process p_div; end;七、波形仿真结果。
实验四 数控分频器的设计
实验四、数控分频器的设计
(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)
参考代码。
数控分频器设计
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)波形分析由波形图可以知道实验成功。
实验四 数控编程加工实例 - 济南大学.
数控技术实验指导书孙选艾长胜李国平吴长忠赵洪华编写济南大学机械工程学院机电系2008.9实验一数控加工程序编制与模拟仿真加工一、实验目的通过模拟数控加工实验掌握零件数控加工程序的编制、调试、仿真加工方法,掌握常用数控加工指令的使用方法,掌握数控机床操作方法,掌握刀具参数、机床参数设置方法,为在数控机床实际操作打好基础。
二、实验内容通过计算机模拟操作实现对数控车床、铣床和加工中心的模拟操作,完成数控手工编程、数控加工、机床操作、加工测量。
1.编制图1所示零件加工程序,并进行仿真加工。
孔。
要求加工出3个25图 12. 编制图2所示零件加工程序,并进行仿真加工。
要求:精加工图2所示零件的外轮廓,零件厚40mm,加工深度10mm。
图 23. 编制图3所示零件加工程序,并进行仿真加工。
说明:该零件粗加工已完成,只进行一次精加工、且ф30部分不加工。
图 3三、实验器材1.计算机20台;2.YH-CNC数控仿真加工软件20套。
四、实验步骤1.制定零件加工工艺;2.编制零件数控加工程序;3.设置零件加工工艺参数;4.设置刀具参数;5.对刀,设置G54;6.仿真加工五、实验报告要求1.提交零件数控加工程序清单;2.写出零件数控加工操作详细步骤。
实验二数控加工中心加工操作实验一、实验目的1. 熟悉YCM-V116B立式数控铣削加工中心的基本组成;2. 掌握数控铣削加工中心手动、自动、换刀等基本操作;3. 掌握数控铣削加工中心零件加工过程中工件装夹、定位、机床参数设置、刀具参数设置等基本操作;二、实验设备YCM-V116B 立式加工中心一台;空压机一台;SBW-50KVA交流稳压电源一台;雷尼绍位置测量及扫描系统一套;PC 微机一台。
三、实验原理1.数控技术的基本概念数控技术就是以数字量编程实现机械或其他设备自动化工作的技术。
如果一种设备的控制过程是以数字形式来描述的,其工作过程是可编程序的并能在程序控制下自动地进行,那么这种设备就称为数控设备。
实验四
实验四硬件电子琴电路设计一、实验目的:学习利用数控分频器设计硬件电子琴实验。
二、原理说明:主系统由3个模块组成,例1是顶层设计文件,其内部有三个功能模块(如图1所示):Speakera.v(例4) 和ToneTaba.v (例3),NoteTabs.v (例2)。
模块ToneTaba是音阶发生器,当8位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code 输出对应该音阶简谱的显示数码,如…5‟,并由High输出指示音阶高8度显示。
模块Speakera中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speakera由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spkout向扬声器输出发声。
增加一个NoteTabs模块用于产生节拍控制(Index数据存留时间)和音阶选择信号,即在NoteTabs模块放置一个乐曲曲谱真值表,由一个计数器的计数值来控制此真值表的输出,而由此计数器的计数时钟信号作为乐曲节拍控制信号,从而可以设计出一个纯硬件的乐曲自动演奏电路。
图1 硬件电子琴电路结构源程序如下:【例1】module songer(clk_50M,reset,Code1,High1,Spkout);input clk_50M;//CLK=50MHZinput reset;output[3:0] Code1;output High1,Spkout;wire[10:0] Tone;wire[3:0] ToneIndex;wire clk_4HZ,clk_12M;NoteTabs u0( .Clk(clk_4HZ),.ToneIndex(ToneIndex) );ToneTaba u1( .Index(ToneIndex),.Code(Code1),.High(High1),.Tone(Tone) );Speakera u2( .Clk(clk_12M),.Tone(Tone),.SpkS(Spkout) );div_50_12M u3(clk_50M,clk_12M,reset);div_50_4HZ u4(clk_50M,clk_4HZ,reset);endmodule【例2】module NoteTabs(Clk,ToneIndex);input Clk;output[3:0] ToneIndex;reg[7:0] Counter;always@(posedge Clk ) beginif(Counter>=138) Counter<=8'b00000000;else Counter<=Counter+1'b1;endMusic u5( .addr(Counter),.clk(Clk),.dout(ToneIndex) );endmodule【例3】module ToneTaba (Index,Code,High,Tone); input[3:0] Index;output[3:0] Code;output High;output[10:0] Tone;reg[3:0] Code;reg High;reg[10:0] Tone;always @ (Index)begincase(Index)4'b0000 :begin Tone<=11'b11111111111;Code<=4'b0000;High<=1'b0;end//2047 4'b0001 :begin Tone<=11'b01100000101;Code<=4'b0001;High<=1'b0;end//773 4'b0010 :begin Tone<=11'b01110010000;Code<=4'b0010;High<=1'b0;end//912 4'b0011 :begin Tone<=11'b10000001100;Code<=4'b0011;High<=1'b0;end//1036 4'b0101 :begin Tone<=11'b10010101101;Code<=4'b0101;High<=1'b0;end//1197 4'b0110 :begin Tone<=11'b10100001010;Code<=4'b0110;High<=1'b0;end//1290 4'b0111 :begin Tone<=11'b10101011100;Code<=4'b0111;High<=1'b0;end//1372;4'b1000 :begin Tone<=11'b10110000010;Code<=4'b0001;High<=1'b1;end//1410;4'b1001 :begin Tone<=11'b10111001000;Code<=4'b0010;High<=1'b1;end//1480;4'b1010 :begin Tone<=11'b11000000110;Code<=4'b0011;High<=1'b1;end//1542;4'b1100 :begin Tone<=11'b11001010110;Code<=4'b0101;High<=1'b1;end//1622;4'b1101 :begin Tone<=11'b11010000100;Code<=4'b0110;High<=1'b1;end//1668;4'b1111 :begin Tone<=11'b11011000000;Code<=4'b0001;High<=1'b1;end//1728;default :begin Tone<=11'b11111111111;Code<=4'b0000;High<=1'b0;end//2047 endcaseendendmodule【例4】module Speakera(Clk,Tone,SpkS);input Clk;input[10:0] Tone;output SpkS;reg PreClk;reg FullSpkS;reg[3:0] Count4;reg[10:0]Count11;reg Count2;reg SpkS;always@(posedge Clk)beginif(Count4>11)beginPreClk<=1'b1;Count4<=1;endelse beginCount4<=Count4+1'b1;endendalways@(posedge PreClk)beginif(Count11>=11'h7FF) beginCount11<=Tone;FullSpkS<=1'b1;endelse beginCount11<=Count11+1'b1;FullSpkS<=0;endendalways@(posedge FullSpkS)beginCount2<=~Count2;if(Count2==1'b1) SpkS<=1'b1;else SpkS<=1'b0;endendmodule【例5】50MHz变频为4HZmodule div_50_4HZ(clk_50M,clk_4HZ,reset); input clk_50M;input reset;output clk_4HZ;reg [23:0] counter;reg clk_4HZ;always @ (posedge clk_50M or negedge reset) if(!reset)counter <= 24'b00;elseif(counter == 12499999)counter <= 24'b0;elsecounter <= counter + 1'b1;always @ (posedge clk_50M or negedge reset) if(!reset)elsebeginif(counter ==24'd12_499_999)clk_4HZ <= 1'b1;elseclk_4HZ <= 1'b0;endendmodule【例6】梁祝音乐音符数据(例)MEMORY_INITIALIZATION_RADIX = 10;MEMORY_INITIALIZATION_VECTOR=3 , 3 , 3 , 3, 5, 5, 5,6, 8, 8,8 , 9 , 6 , 8, 5, 5, 12,12,12, 15,13 , 12 , 10 , 12, 9, 9, 9, 9, 9, 9,9 , 0 , 9 , 9, 9, 10, 7, 7, 6, 6,5 , 5 , 5 , 6, 8, 8, 9, 9, 3, 3,8 , 8 , 6 , 5, 6, 8, 5, 5, 5, 5,5 , 5 , 5 , 5, 10, 10, 10, 12, 7, 7,9 , 9 , 6 , 8, 5, 5, 5, 5, 5, 5,3 , 5 , 3 , 3, 5, 6, 7, 9, 6, 6,6 , 6 , 6 , 6, 5, 6, 8, 8, 8, 9,12 ,12 ,12 ,10, 9, 9,10, 9,8, 8,6 , 5 , 3 , 3, 3, 3, 8,8, 8,8,6 , 8 ,6 , 5, 3, 5, 6,8, 5,5,5 ,5 , 5 ,5, 5,5,0, 0, 0;三、实验内容:1.自己编写12.5MHZ的分频程序div_50_12M。
数控分频器的设计实验报告
1 引言计算机组成原理与设计是计算机通信与技术专业本科生的必修课程。
在完成理论学习和必要的实验后,本科学生掌握了它的基本原理和各种基本功能的应用,但对硬件实际应用设计和其完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
计算机组成原理与设计的课程设计既要让学生巩固课本学到的理论,还要让学生学习硬件电路设计和用户程序设计,同时学习查阅资料、参考资料的方法。
计算机原理与设计的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试用户程序,来加深对该课程的认识和理解,充分发挥我们的个体创新能力。
1.1 设计的目的本次设计的目的就是了解并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。
通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试用户程序,来加深对该课程的认识和理解,充分发挥我们的个体创新能力。
通过课程设计深入理解VHDL语言的精髓,达到课程设计的目标。
1.2 需求分析这次课程设计的题目是实现基于CPLD的数控分频器及其应用。
设计乐曲程序能实现演奏电路,并用原理图方法设计数字时钟,使电路具有校时校分的功能与传统的纯硬件方法相比简单有效。
此设计可以适应多家可编程逻辑器件,便于组织大规模的系统设计;便于设计的复用继承和升级更新,具有广阔的应用前景。
1.3 设计的基本内容传统数字电路设计是利用标准集成电路、电路板来实现电路功能。
可编程逻辑器件和EDA技术使设计方法发生了质的变化。
把以前“电路设计+硬件搭试+调试焊接”转化为“功能设计+软件模拟+仿真下载”。
利用EDA开发平台,采用可编程逻辑器件CPLD/FPGA使硬件的功能可通过编程来实现,这种新的基于芯片的设计方法能够使设计者有更多机会充分发挥创造性思维,实现多种复杂数字逻辑系统的功能,将原来由电路板设计完成的工作放到芯片的设计中进行,减少了连线和体积,提高了集成度,降低了干扰,大大减轻了电路设计和PCB 设计的工作量和难度,增强了设计的灵活性,有效地提高了工作效率,MUSICFLOW增加了系统的可靠性和稳定性,提高了技术指标。
