实验4 数控分频器设计
- 格式:ppt
- 大小:192.50 KB
- 文档页数:1
目录一、设计任务与要求 (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设计实验目的:学习数控分频器的设计、分析和测试方法。
实验项目分析设计:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。
其原理是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。
实验内容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;仿真波形如下所示:经过硬件测试后,输入与输出满足题目要求和仿真结果。
数控分频器设计一、实验目的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增加了系统的可靠性和稳定性,提高了技术指标。
实验五数控分频器的设计一、实验目的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种不同的实验电路结构。
(数控加工)数控分频器壹题目要求和方案论证21.1程序计数分频器21.1.1题目要求21.1.2 方案论证21.2(实训题题目)波形发生器和计数器4 1.2.1题目要求41.2.2方案论证4二电子线路设计和实现62.1程序计数分频器电路设计62.2波形发生器和计数器电路设计6三结果和分析83.1程序计数分频器的实现83.2.1波形发生和计数器的实现83.2.2 实际效果10四总结和体会12参考文献13附录14波形发生和计数器焊接PCB图15是低电平时,不论JK端输入什么电平,输出端,正是因为该芯片有移位寄存器的功能,再加上译码器,要实现分频器的功能就不成问题了,所以要实现分频器的关键在移位寄存器上。
图274LS195时序图1.2(实训题题目)波形发生器和计数器1.2.1题目要求根据给定的用LM324及其给定参数的电阻、电位器、电容组成的方波-三角波产生电路原理图及其PCB板,分析电路结构,要求如下:(1)根据模拟电路和数字电路理论分析电路基本功能,得到方波和三角波频率计算式;(2)用Multisim软件进行电路仿真,改变电位器的阻值,查见计数器的输出状态;且在电容C1为1uF,电位器R21阻值为100K和50K时用虚拟示波器记录方波和三角波的波形,且分别记录其频率。
(3)焊接电路且测试。
在电容C1为1uF,电位器R21阻值为100K和50K时用数字示波器记录方波和三角波的波形,且分别记录其频率。
当计数显示以1HZ频率时,计下当前电位器的阻值。
1.2.2方案论证表374LS90芯片功表图374LS90芯片分析74LS90芯片的引脚图和功能表可知。
要实现计数功能,必须将74LS90的2、3引脚中的任意壹个和6、7引脚中的任意壹个接低电平,剩下的俩脚随意接。
为此在设计计数部分电路的时候,将2、3引脚和6、7引脚分别连接起来。
6、7引脚接低电平,2、3引脚接于有开关控制的高电平。
当开关闭合时,2、3引脚接入的是高电平,实现不了计数功能。
数控分频器一实验目的:学习数控分频器的设计,分析和测试方法。
二实验原理:数控分频器的功能就是当在输入端给定不同输入数值时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数器溢出位与预置数加载输入信号相接即可。
三实验内容:(1)打开quartus,在菜单中点击new,选择vhdl,在出现的窗口中输入vhdl代码并保存。
其中代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY EX9 ISPORT (clk : IN STD_LOGIC; -- IO30(P125)d : IN STD_LOGIC_VECTOR(7 DOWNTO 0); -- IO47..IO40 (P133, P132, P131, P130, P121, P120, P119, P118)pfull: OUT STD_LOGIC; -- IO01(P38)fout : OUT STD_LOGIC -- IO00(P37));END EX9;ARCHITECTURE behv OF EX9 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'; -- 置计数满信号ELSEcnt8 := cnt8 + 1;full <= '0';END IF;END IF;pfull <= full; -- 输出full用于观察END PROCESS p_reg;p_div: -- 将full信号除2,生成方波信号PROCESS(full)V ARIABLE cnt: STD_LOGIC;BEGINIF full'EVENT AND full = '1' THENcnt := NOT cnt;END IF;fout <= cnt;END PROCESS p_div;END behv;(2)创建工程之后对编译之前的参数进行设置,启动start compilation项,其编译结果如下:(3)时序仿真:对仿真前参数设置后启动start simulation,直到出现simulation was successful,仿真结束。
基于FPGA的通用数控分频器的设计与实现
本文首先介绍了各种分频器的实现原理,并在FPGA开发平台上通过VHDL文本输入和原理图输入相结合的方式,编程给出了仿真结果。
最后通过对各种分频的分析,利用层次化设计思想,综合设计出了一种基于FPGA的通用数控分频器,通过对可控端口的调节就能够实现不同倍数及占空比的分频器。
1.引言
分频器是数字系统中非常重要的模块之一,被广泛应用于各种控制电路中。
在实际中,设计人员往往需要将一个标准的频率源通过分频技术以满足不同的需求。
常见的分频形式主要有:偶数分频、奇数分频、半整数分频、小数分频、分数分频。
在某些严格的情况下,还有占空比的要求。
其中非等占空比的偶数分频器和奇数分频器其实现比较容易,但对于半整数分频器和占空比为50%的奇数分频器实现比较困难。
本文首先介绍了各种分频器的实现原理,并结合VHDL硬件描述语言对其进行了仿真,最后提出一个可控的通用分频器的设计方法,该方法可实现任意分频,资源消耗低,具有可编程等优点。
2.偶数分频器
偶数分频器比较简单,即利用计数器对需要分频的原始时钟信号进行计数翻转。
例如:要进行M=2N(N为自然数)分频,当计数值为0~k-1时,输出高
电平,当计数值为k-1~2N-1时输出低电平,同时计数值复位,如此循环可实
现任意占空比的偶数分频,其中M和k为预置数,可根据分频倍数和占空比的要求进行置数。
如图1所示,当k=N时,即可实现占空比为50%的偶数分频。
实验(二)1. 实验名称:数控分频器2. 实验目的:1.设计实现一个根据不同的输入,将时钟信号进行分频2.掌握分频计数器类型模块的Verilog描述方法;3.学习设计仿真工具的使用方法;3. 实验原理:数控分频器的功能是当在输入端给定不同的数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相加即可。
4. 实验要求:根据不同的d输出,将输入的时钟信号clk进行分频。
输入 clk 时钟输入 1030d分频设置输入 1047 1040输出fout分频结果输出输出pfull中间值用于观察 0115. 实验内容:1. 源程序:module fpin(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;endmodule2. 实验步骤1. 新建Verilog工程,编写代码并保存至与模块名对应的文件夹。
注意:项目应存为系统盘以外的盘内,路径中不含中文字符。
2. 编译程序,编译无误后,在【tools】里面选择RTL视,观察电路结构。
3. 新建波形文件进行仿真。
保存时要和源程序存放在同一目录下。
设置好输入波形参数后,开始仿真。
在仿真后输入输出波形中观察逻辑关系是否正确。
4. 将实验箱和PC合理连接起来。
打开EDA6000软件,设置好芯片类型为ACEX1K(EP1K30TC144-3),载入模式9。
5. 根据EDA6000界面内管脚对应芯片的实际管脚在QUARTUS II里面设定管脚号并检查无误。
数控分频器的设计
一、实验目的
学习数控分频器的设计、分析和测试方法。
二、实验原理
数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号由不同的分频比,数控分频器即使用计数值课并行的加法计数器设计完成的,方法是将计数溢出位预置数加载输入信号相接即可,详细设计程序如例3-7所示。
三、实验内容
1、在实验系统上硬件验证例3-7 的功能。
课选实验电路模式1;键2和键1负责输入8位预置数D ;clk 由clock0输入,频率选65536hz ;输出fout 接扬声器spker 。
编译下载后硬件测试:改变键2/键1的输入值,课听到不同音调。
2、利用两个例3-7给出的模块设计一个电路,使其输出方波的正负脉宽的宽度分别由两个8位输入数据控制。
四、实验步骤
实验内容1 建立工作库文件和编辑设计文件 (1) 新建文件夹 命名为dvf (2) 输入源程序例3-7如下
课程名称EDA 技术
实验成绩
指导教师
实 验 报 告
院系 信院电子系 班级 09普专电子 学号 090602051 姓名 尚建光 日期 2011-11-16
(3) 文件存盘,命名为dvf.vhd (4) 创建工程 、综合 (改错) (5) 时序仿真 其波形如下
(6) 引脚配置如下
(7) 配置文件下载
实验内容2 建立工作课库文件和编辑设计文件
(1) 新建文件夹命名为dflh
(2) 输入源程序如下
(3) 文件存盘,命名为dflh.vhd 。
(4) 创建工程 综合(改错)。
(5) 时序仿真波形如下
(6) 引脚配置如下
(7) 配置文件下载。