EDA数控分频器的设计报告
- 格式:doc
- 大小:200.00 KB
- 文档页数:4
图2.1
占空比为0.5的3分频电路仿真结果如图2.2所示,k_or输出波形的周期为clk脉冲的周期的倍,且占空比为50%。
图2.2
占空比为0.25的8分频电路模型如图2.3所示,有一个脉冲端口(clk),和一个输出端口
图2.3
占空比为0.25的8分频电路仿真结果如图2.4所示,k1输出波形的周期为clk脉冲的周期的倍,且占空比为25%。
图2.4
、结果分析与实验体会
经过本次实验,我对用xlinx软件进行EDA设计有了进一步的认识和理解,经过上一次的实验,这一次可以说是轻车熟路,尽管如此,在实验过程中还是遇到了很多问题,但在同学和老师的帮助这些问题都一一解决。
在解决这些问题的过程中,我体会不同开发环境对VHDL编码的要求,Xilinx ISE FPGA与QuartusII开发环境的区别,了解到更加严格,在中可以编译通过的程序。
EDA实验报告班级:姓名:目录实验一:七段数码显示译码器设计 (1)摘要 (1)实验原理 (1)实验方案及仿真 (1)引脚下载 (2)实验结果与分析 (3)附录 (3)实验二:序列检测器设计 (6)摘要 (6)实验原理 (6)实现方案及仿真 (6)引脚下载 (7)实验结果与分析 (8)实验三:数控分频器的设计 (11)摘要 (11)实验原理 (11)方案的实现与仿真 (11)引脚下载 (12)实验结果及总结 (12)附录 (12)实验四:正弦信号发生器 (14)摘要 (14)实验原理 (14)实现方案与仿真 (14)嵌入式逻辑分析及管脚下载 (16)实验结果与分析 (17)附录 (18)实验一:七段数码显示译码器设计摘要:七段译码器是一种简单的组合电路,利用QuartusII的VHDL语言十分方便的设计出七段数码显示译码器。
将其生成原理图,再与四位二进制计数器组合而成的一个用数码管显示的十六位计数器。
整个设计过程完整的学习了QuartusII的整个设计流程。
实验原理:七段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA\CPLD中来实现。
本实验作为7段译码器,输出信号LED7S的7位分别是g、f、e、d、c、b、a,高位在左,低位在右。
例如当LED7S 输出为“1101101”时,数码管的7个段g、f、e、d、c、b、a分别为1、1、0、1、1、1、0、1。
接有高电平段发亮,于是数码管显示“5”。
实验方案及仿真:I、七段数码显示管的设计实现利用VHDL描述语言进行FPGA上的编译实现七段数码显示译码器的设计。
运行QuartusII在G:\QuartusII\LED7S\下新建一个工程文件。
新建一个vhdl语言编译文件,编写七段数码显示管的程序见附录1-1。
《数控分频实验》姓名:谭国榕班级: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.。
实验三数控分频器设计【实验目的】1.设计实现一个根据不同的输入,将时钟信号进行分频2.掌握分频计数器类型模块的Verilog描述方法;3.学习设计仿真工具的使用方法;4.学习层次化设计方法;【实验内容】1.用Verilog 语言设计带计数允许和复位输入的数控分频器。
2.编制仿真测试文件,并进行功能仿真。
3.下载并验证分频器功能【实验原理】数控分频器的功能就是当在输入端给定不同数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相加即可。
【程序源代码】(加注释)module FDIV (clk,d,fout,pfull); //数控分频器顶层设计描述input [7:0]d; //定义一个七位数输入input clk; //定义一个时钟信号output fout ,pfull; //定义输出和记满标志位pfullreg[7:0] Q; //定义一个7位寄存器变量reg full;reg pfull;reg fout;always @ (posedge clk) //开始过程语句posedge clk位敏感变量beginif (Q==d) //当有上升沿敏感信号时Q==dbegin Q=0; //Q被清零full=1; // full被赋值为1endelsebeginQ=Q+1; full =0; //否则Q=Q+1,full=0pfull=full; //将full赋值给pfullendalways @ (posedge pfull) //过程语句posedge pfull为敏感变量fout=~fout; // fout取反以后赋值给fout endmodule //结束模块【仿真和测试结果】【实验心得和体会】通过本次试验,我们对数控分频器的设计与原理都有了初步的了解,例如给定100HZ的时钟信号,然后给定d=5的输入,而后输出信号的频率为10HZ。
基于EDA技术的数控分频器设计作者:韩丽英来源:《数字技术与应用》2009年第11期[摘要]数控分频器广泛应用在家庭数字音响、通信设备时序电路、数字频率计中。
另外,近年来已成为电子竞赛设计中常用的单元模块。
本文论述了数控分频器的基本原理、设计思路及小数分频器的原理及设计,并给出了一个2.5 分频器电路仿真波形。
[关键词]EDA技术数控分频器 VHDL语言[中图分类号]TN-4[文献标识码]A[文章编号]1007-9416(2009)11-0108-021 引言数控分频器广泛应用在家庭数字音响、通信设备时序电路、数字频率计中。
另外,近年来已成为电子竞赛设计中常用的单元模块。
笔者在连续三年指导学生电子设计竞赛过程中都用到了数控分频器。
用传统的设计方法设计数控分频器时,典型的设计是采用具有预置数据输入端的通用计数器芯片按设计要求完成。
但当分频系数较大时,需用多片集成计数器和设计更复杂的控制电路来实现,且设计成果的可修改性和可移植性都较差。
尤其是对于参加电子设计竞赛的学生,在有限的3-5天时间内要完成一个指定功能的设计,尤其不适合采用这种传统的“固定功能的集成电路+连线”的设计模式。
基于EDA技术的数控分频器设计,采用的是用软件的方法设计硬件的EDA (电子设计自动化)技术。
作为EDA技术重要组成部分的VHDL硬件描述语言是一种符合IEEE工业标准的建模语言。
用它设计的数控分频器可作为一个模块,移植到很多数字电路系统中,且极易修改,只要修改程序中的某几条语句,就可使最大分频系数得到改变。
整个设计过程简单、快捷。
可从根本上减少硬件调试的时间,为总体设计完成争取宝贵的时间。
2 通用数控分频器的原理数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器可用计数值可并行预置的加法计数器设计实现。
所以数控分频器功能的实质是分频电路,即将一个给定的频率较高的数字输入信号,经过适当的处理后,产生一个或数个频率较低的数字输出信号。
EDA技术与应用实验报告姓名学号专业年级电子信息工程实验题目乐曲硬件演奏电路设计实验目的1.学习利用数控分频器设计硬件乐曲演奏电路2.掌握模块化和层次化的设计方法以及音符编码的设计思想实验原理1.一定频率的矩形波通过扬声器可以发出相应频率的声音,乐曲是由一系列的音符组成的。
所以,如果我们通过控制每个音符的发音频率值及其持续的时间,就可以以纯硬件的手段,利用这些数值来实现所希望演奏的乐曲。
2.该硬件演奏电路由三个模块构成<1>音符数据ROM的地址发生器模块NoteTabs.vhdl内置8位二进制计数器,作为ROM的地址发生器,计数频率4Hz,即每一计数值的停留时间为0.25s,恰为全音符设为1s时,四四拍的4音符持续时间。
随着NoteTabs中的计数器按4Hz的时钟速率作加法计数即地址值递增时,ROM中的音符数据将通过ToneIndex[3..0]输向ToneTaba模块,乐曲即开始演奏起来。
<2>乐曲简谱码对应的分频预置数查表电路模块ToneTaba.vhdlToneTaba为Speakera提供决定所发音符的分频预置数,此数在Speakera输入口停留的时间即为此音符的节拍值。
输入Index[3..0]可确定乐曲全部音符所对应的分频预置数(13个)每一音符的停留时间由NoteTabs模块的clk决定(4Hz)。
<3>决定每一个音符音调的数控分频器模块Speakera.vhdl输入端clk输入一较高频率(12MHz)的信号,经Speakera分频,再经2分频以展宽脉冲后,由SpkOut输出。
11位预置数Tone[10..0]决定由clk输入信号的分频比,SpkOut输出的频率决定每一音符的音调。
实验内容1.定制存放LPM-ROM模块Music,在连续地址上存放乐曲的音符数据,2.用vhdl文本输入法和元件例化语句完成NoteTabs.vhdl的设计,该模块包含音符数据ROM模块Music.vhdl3.完成ToneTaba.vhdl的设计,此模块给数控分频模块提供每个音符所对应的分频预置数,即计数初值4.完成Speakera.vhdl的设计,该模块是一个初值可变的加法计数器。
EDA实验报告EDA 实验实验一用原理图输入法设计半加器一、实验目的:1.熟悉利用Quartus Ⅱ的原理图输入方法设计简单组合电路;2.通过一个半加器的设计把握利用EDA 软件进行电子线路设计的详细流程;3.学会对实验板上的FPGA/CPLD 进行编程下载,硬件验证自己的设计项目。
二、实验器材:1、计算机及操作系统2、QUARTUS II 软件三、实验要求:1. 利用原理图输入法对半加器电路进行描述;2. 进行波形仿真测试;3. 严格按照实验步骤进行实验;4. 管脚映射按照芯片的要求进行。
四、实验原理其中a, b 为输入端口,So 与Co 分别为半加器和与进位。
其逻辑表达式为:2. 根据逻辑表达式进行原理图输入。
五、实验步骤:1. 为本项工程设计建立文件夹。
注意文件夹名不能用中文,且不可带空格。
2. 输入设计项目并存盘。
3. 将设计项目设计为工程文件。
4. 选择目标器件并编译。
b a b a b a So ⊕=+=ab Co =5. 时序仿真。
6. 引脚锁定。
7. 编程下载。
实验二用原理图法设计一位、四位全加器一、实验目的:1. 熟悉利用QuartusⅡ的原理图输入方法设计简单组合电路;2. 通过一个半加器的设计把握利用EDA 软件进行电子线路设计的详细流程;3. 学会对实验板上的FPGA/CPLD 进行编程下载,硬件验证自己的设计项目。
二、实验器材:1、计算机及操作系统2、QUARTUS II软件三、实验要求:1.利用原理图输入法对一位全加器电路进行描述;2. 进行波形仿真测试;3. 严格按照实验步骤进行实验;四、实验原理:利用实验一所设计的半加器设计一位全加器;利用设计封装好的一位全加器进行四位全加器的设计。
五、实验步骤:与实验一相同。
六、实验报告:1. 要求画出一位、四位全加器的真值表;2. 分析用半加器实现一位全加器的优点;3. 对波形进行分析,并绘制波形图。
实验三用文本输入法设计D触发器和锁存器一、实验目的:1. 熟悉QuartusⅡ的VHDL 文本设计过程。
乐曲演奏电路设计一、题目分析1、原理分析产生音乐的两个因素是音乐频率和音乐的持续时间,以纯硬件完成演奏电路比利用微处理器来实现乐曲演奏要复杂的多,如果不凭借EDA 工具和硬件描述语言,凭借传统的数字逻辑技术,即使最简单的演奏电路也难以实现。
乐曲硬件演奏电路系统主要有数控分频器和乐曲存储模块组成。
数控分频器对FPGA 的基准频率进行分频,得到与各个音阶对应的频率输出。
乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由计数器的计数时钟信号作为乐曲节拍控制信号。
乐曲演奏电路的结构框图如下:2、总体方框图图1.1 乐曲演奏电路结构框图乐曲硬件演奏电路的设计主要就是由四个部分组成的,首先为了实现音乐的演奏必须得得到音阶的频率和节拍,这主要就是由音乐节拍发生器和数控分频模块完成的,完了就是译码查表电路是由音符译码电路模块产生的,乐曲硬件演奏电路可分为四个模块,音乐节拍发时钟电路 查符查表电路 音乐节拍产生电路 数控分频器 基准时钟模式选择生器模块,音符译码电路模块,数控分频模块。
该系统由四个模块组成:分别是NoteTabs模块,ToneTaba模块,Speakera 模块和SEG7 模块(七段译码器)。
3、性能指标及功能(1)能够播放“梁祝”乐曲。
(2)能够通过LED显示音阶。
二、选择方案1、可利用的方案方案一:VHDL语言设计方法由上面的分析可知,本系统由Note Tabs模块、Ton Taba模块、Speakera 模块和SEG7 模块组成。
所以采用自顶向下的设计方法,可以利用VHDL语言设计设计方法。
将各个模块统一用VHDL语言设计。
方案二:VHDL语言和原理图设计方法相结合的设计方法由上面的分析可知,本系统由Note Tabs模块、Ton Taba模块、Speakera 模块、SEG7 模块和一个顶层文件构成。
采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。
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)波形分析由波形图可以知道实验成功。
批次序号: 5
桂林电子科技大学电子工程与自动化学院
EDA 实验报告
辅导员意见:
实验名称:数控分频设计专业:测控技术与仪器
学号:1600810530 姓名:姚鸿林
实验日期:2018.11.8 成绩辅导员签名:
一、实验目的
学习数控分频器的设计、分析和测试方法
二、实验任务
用Verilog语言设计一个4位的数控分频器。
当输入不同的CLK时钟频率和预置值D时,FOUT输出不同频率的信号
三、实验内容及结果
1、用verilog 设计一个分频器。
程序如下所示。
2、时序波形仿真如下。
3、计数器是分频器的基础,如果有一个预置数data[3..0],从data开始计数,计数至“1111”时产生进位,那么分频值为:
分频值=“1111”-data[3..0]+1
在时序波形仿真中,fen即为分频值。
4、设计原理图模块。
利用数目管显示data计数到15。
一个数码管显示A~F。
5、锁定引脚。
打开硬件系统,连接到电脑,选择正确的芯片类型,然后进行引脚锁定。
根据硬件系统上的标号,认真锁定引脚。
6、软件下载,硬件调试。
将程序下载到硬件系统,正常计数,波动拨码开关控制清零使能端等。
四、实验总结
数控分频计的设计,相当于设计一个可预置的加法器,首先设计一个0-15的加法器,然后再添加一个可预置值data,输出信号的一个周期包含了N个时钟信号的周期,就相当于N分频,分频值=“1111”-预置值+1。
顶层文件的文件名应该跟模块名一样,而底层文件则不能跟顶层文件名字相同。
1 引言计算机组成原理与设计是计算机通信与技术专业本科生的必修课程。
在完成理论学习和必要的实验后,本科学生掌握了它的基本原理和各种基本功能的应用,但对硬件实际应用设计和其完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
计算机组成原理与设计的课程设计既要让学生巩固课本学到的理论,还要让学生学习硬件电路设计和用户程序设计,同时学习查阅资料、参考资料的方法。
计算机原理与设计的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试用户程序,来加深对该课程的认识和理解,充分发挥我们的个体创新能力。
1.1 设计的目的本次设计的目的就是了解并掌握VHDL硬件描述语言的设计方法和思想,通过学习的VHDL语言知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。
通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试用户程序,来加深对该课程的认识和理解,充分发挥我们的个体创新能力。
通过课程设计深入理解VHDL语言的精髓,达到课程设计的目标。
1.2 需求分析这次课程设计的题目是实现基于CPLD的数控分频器及其应用。
设计乐曲程序能实现演奏电路,并用原理图方法设计数字时钟,使电路具有校时校分的功能与传统的纯硬件方法相比简单有效。
此设计可以适应多家可编程逻辑器件,便于组织大规模的系统设计;便于设计的复用继承和升级更新,具有广阔的应用前景。
1.3 设计的基本内容传统数字电路设计是利用标准集成电路、电路板来实现电路功能。
可编程逻辑器件和EDA技术使设计方法发生了质的变化。
把以前“电路设计+硬件搭试+调试焊接”转化为“功能设计+软件模拟+仿真下载”。
利用EDA开发平台,采用可编程逻辑器件CPLD/FPGA使硬件的功能可通过编程来实现,这种新的基于芯片的设计方法能够使设计者有更多机会充分发挥创造性思维,实现多种复杂数字逻辑系统的功能,将原来由电路板设计完成的工作放到芯片的设计中进行,减少了连线和体积,提高了集成度,降低了干扰,大大减轻了电路设计和PCB 设计的工作量和难度,增强了设计的灵活性,有效地提高了工作效率,MUSICFLOW增加了系统的可靠性和稳定性,提高了技术指标。
河南工业大学EDA技术实验报告专业电科班级姓名学号 2 实验地点6526+ 6215 实验日期-11-4 成绩评定一、实验项目实验五用LPM设计8位数控分频器和4位乘法器二、实验目的掌握LPM模块的参数设置方法以及设计和应用方法。
三、实验原理对于高速测控系统,影响测控速度最大的因素可能是,在测得必要的数据并经过复杂的运算后,才能发出控制指令。
因此数据的运算速度决定了此系统的工作速度。
为了提高运算速度,可以用多种方法来解决,如高速计算机、纯硬件电路、ROM查表式运算器等。
用高速计算机属于软件解决方案,用纯硬件运算器属于硬件解决方案,而ROM属于查表式运算解决方案。
数控分频器的功能要求为:若在其输入端给定不同的数据,其输出脉冲具有相应的对输入时钟的分频比。
设计流程是首先按照原理图输入的设计步骤,通过元件输入窗在原理图编辑窗中调入兆功能块,并按图连接起来,其中计数器LPM-COUNTER模块的参数设置可按照以下介绍的方法进行。
硬件乘法器有多种实现方法,相比之下,由高速RAM构成乘法表方式的乘法表方式的乘法器的运算速度最快。
8位数控分频器电路原理图用LPM_ROM设计的4位乘法器原理图DFF的VHDL代码:(1)8位数控分频器数控分频器的功能要求为:若在其输入端给定不同的数据,其输出脉冲具有相应的对输入时钟的分频比。
(2)4位乘法器硬件乘法器有多种实现方法,相比之下,由高速RAM构成乘法表方式的乘法表方式的乘法器的运算速度最快。
一个4×4bit查表式乘法器乘法表文件如下图所示;四、仿真结果及分析下图即为8位数控分频器的仿真结果,仿真参数设置时具体设置界面如下图所示,波形图如图;下图即为乘法器的仿真结果,仿真参数设置时具体设置界面如下图所示;五、硬件验证过程及结果分析数控分频器的硬件验证时通过数码管来观察分频器的数据变化情况。
4位乘法器的硬件测试引脚并连接至插槽,通过数码管来观察数据相乘后的结果。
实验五数控分频器的设计一、实验目的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种不同的实验电路结构。
实验目的与要求实验名称:数控分频器设计实验目的:将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)打开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,仿真结束。
数控分频器的设计
1、实验目的:
学习数控分频器的设计、分析和测试方法。
2、实验原理:
数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如例下文所示。
1) VHDL及语句分析
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DVF IS --定义实体DVF
PORT ( CLK : IN STD_LOGIC; --时钟输入
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0); --7位预置数
FOUT : OUT STD_LOGIC ); --输出的频率
END DVF;
ARCHITECTURE one OF DVF IS --定义结构体one
SIGNAL FULL : STD_LOGIC; --定义信号full
BEGIN
P_REG: PROCESS(CLK) --进程P_REG中CNT8从预置数D开始
逐步累加到255后,FULL置1;再将
CNT8置为D,循环以获得一个新的周期
脉冲序列FULL,即产生新的频率V ARIABLE 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 ;
P_DIV: PROCESS(FULL) --进程P_DIV中,FOUT是占空比为50%的周期
信号。
FULL上升沿时CNT2取反,形成0/1交
替的序列。
而FOUT随CNT2变化。
V ARIABLE 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;
2)进程P_REG的功能
进程P_REG中CNT8从预置数D开始逐步累加到255后,FULL置1;再将CNT8置为D,循环以获得一个新的周期序列FULL,即用预置数D产生新频率的序列,达到分频的效果。
如下图所示,当CNT8累加到255后,标记位FULL置1。
因此,FULL 与CLK的频率关系为:
FULL=CLK/(256-D)
注:当D=255时,FULL始终为1,FULL的频率为0。
下面是不同的D与FULL之间的关系。
3)进程P_DIV的功能
进程P_DIV中,FOUT是占空比为50%的周期信号。
FULL上升沿时CNT2取反,形成0/1交替的序列。
而FOUT随CNT2变化。
因此,FULL与FOUT的频率关系为:FOUT=FULL/2
注:当D=255时,FULL始终为1,FULL的频率为0,所以FOUT的频率也为0。
4) CLK、FULL和FOUT之间的分频关系
FULL与CLK的频率关系为:FULL=CLK/(256-D)
FULL与FOUT的频率关系为:FOUT=FULL/2
因此,FOUT与CLK的频率关系为:FOUT=CLK/2(256-D)
3、实验结果
以下是电路的时序仿真图
以下是RTL电路图。