EDA 半整数分频器的设计实验报告
- 格式:doc
- 大小:275.50 KB
- 文档页数:4
实验三分频器一.实验目的1.设计几个实验要求分频器,并在实验箱上面实现;2.熟悉分频器的功用。
二.所用器件EDA实验箱、EP1K10TC100-3器件。
三.实验说明本实验主要是设计几个分频数值不同的分频器,并在实验板上面观察分频的结果显示。
虽然实验箱频率为多种,而实际使用的时候一个系统最好使用一个时钟,而系统中使用的其他各种频率需要在系统内部用分频器来产生,所以分频器是以后进行各种实验的关键。
本次实验主要用quatusII 的软件示波器来观察分频后的波形。
四.实验要求1.设计一个2 分频器,观察实验结果;2.设计一个28分频器,观察实验结果;3.设计一个210分频器,观察实验结果,并与上面一步的实验结果比较;三个分频器的源程序如下:Library IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY div ISPORT(CLK:IN STD_LOGIC;DIV1024CLK:OUT STD_LOGIC;DIV256CLK:OUT STD_LOGIC;DIV2CLK:OUT STD_LOGIC--2);END;ARCHITECTURE BEHA V OF div ISSIGNAL DIV256CLKTEMP,DIV1024CLKTEMP,DIV2CLKTEMP:STD_LOGIC;BEGINPROCESS(CLK)V ARIABLE DIV1C:STD_LOGIC_VECTOR(1 DOWNTO 0) ;V ARIABLE DIV512C,DIV128C:STD_LOGIC_VECTOR(9 DOWNTO 0);BEGINIF CLK'EVENT AND CLK='1' THENDIV128C:=DIV128C+1;DIV512C:=DIV512C+1;DIV1C:=DIV1C+1;IF DIV128C=128 THENDIV256CLKTEMP<=NOT DIV256CLKTEMP;DIV128C:=(OTHERS=>'0');END IF;IF DIV512C=512 THENDIV1024CLKTEMP<=NOT DIV1024CLKTEMP;DIV512C:=(OTHERS=>'0');END IF;IF DIV1C=1 THENDIV2CLKTEMP<=NOT DIV2CLKTEMP;DIV1C:=(OTHERS=>'0');END IF;END IF;DIV256CLK<=DIV256CLKTEMP;DIV1024CLK<=DIV1024CLKTEMP;DIV2CLK<=DIV2CLKTEMP;END PROCESS;END BEHA V;五.实验结果:仿真显示如下:实验四 8位数码管扫描显示一、实验目的1.学习功能集成的设计方法;2.设计8位扫描数码显示器。
EDA实验报告学院:班级:学号:指导老师:姓名:一、实验目的:学习数控分频器的设计,分析和测试方法。
二、实验原理:不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有计时器溢出位与预置数加载输入信号相接即可。
三、实验内容1、将4096HZ的时钟信号分频为1HZ的时钟信号。
实验原理图:实验源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dvf isport(clk_in:in std_logic;fout:out std_logic);end;architecture one of dvf issignal cnt: integer range 0 to 2048;signal clk_out:std_logic;beginprocess(clk_in)beginif clk_in'event and clk_in = '1' thenif cnt=2048 thencnt <=0;clk_out <=not clk_out;elsecnt<=cnt+1;end if;end if;end process;fout<=clk_out;end one;功能仿真波形图:实验引脚图:实验箱上工作情况:当CLOCK5接4096HZ的时钟信号时,扬声器每秒钟响一次。
2、如实验内容1将4096HZ的时钟信号分频为2HZ、8HZ、16HZ的时钟信号。
3、编写四选一MUX,可用按键控制选择分频后的某时钟。
实验原理图:实验源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dvf isport(clk:in std_logic;s: in std_logic_vector(1 downto 0);clk_out:out std_logic);end;architecture one of dvf issignal clk1_out:std_logic;signal clk2_out:std_logic;signal clk3_out:std_logic;signal clk4_out:std_logic;signal cnt2048:integer range 0 to 2048; signal cnt1024:integer range 0 to 1024; signal cnt256:integer range 0 to 256; signal cnt128:integer range 0 to 128;beginfen1: process(clk)beginif clk'event and clk = '1' thenif cnt2048=2048 thencnt2048 <=0;clk1_out <=not clk1_out;elsecnt2048<=cnt2048+1;end if;end if;end process;fen2: process(clk)beginif clk'event and clk = '1' thenif cnt1024=1024 thencnt1024 <=0;clk2_out <=not clk2_out;elsecnt1024<=cnt1024+1;end if;end if;end process;fen8: process(clk)beginif clk'event and clk = '1' thenif cnt256=256 thencnt256 <=0;clk3_out <=not clk3_out;elsecnt256<=cnt256+1;end if;end if;end process;fen16: process(clk)beginif clk'event and clk = '1' thenif cnt128=128 thencnt128 <=0;clk4_out <=not clk4_out;elsecnt128<=cnt128+1;end if;end if;end process;xuan: PROCESS(s)BEGINCASE s ISWHEN "00" => clk_out<=clk1_out;WHEN "01" => clk_out<=clk2_out;WHEN "10" => clk_out<=clk3_out;WHEN "11" => clk_out<=clk4_out;WHEN OTHERS => NULL;END CASE;END PROCESS;END;功能仿真波形:实验引脚图:实验箱上工作情况:CLOCK5接4096HZ的时钟信号,按键1、键2使输入分别为00、01、10、11,扬声器输出声音频率分别为1HZ、2HZ、8HZ、16HZ。
课程设计报告设计名称EDA(VHDL)课程设计专业班级电子0942姓名学号电气与信息工程学院二0一二年一月基于FPGA的半整数分频器设计一、系统设计任务及功能概述本系统是利用VHDL硬件描述语言和原理图输入方式,通过MUX+PLUSⅡ开发软件和ALTER 公司的FLEX系列EPF10K10LC84-4型FPGA方便的完成了半整数分频器电路的设计。
本系统是通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。
二、系统设计方案和程序设计1.系统设计方案我们采用脉冲吞吐计数器和锁相环技术,先设计两个不同分频比的整数分频器,然后通112entity cont6 isport(clk:instd_logic;rst:instd_logic;en:instd_logic;qa,qb,qc:outstd_logic);end entity cont6;architecturewode of cont6 issignalcount:std_logic_vector(2 downto 0);beginprocess(clk,rst,en)isbeginifrst='1'then count<="000";elsifclk'event and clk='1'thenif en='1'thenif count="101" then count<="000";else count<=count+1;end if;end if;end if;end process;qa<=count(0);qb<=count(1);qc<=count(2);end architecture wode;模六计数器原件生成图如下:图一模六计数器原件生成上面的程序经编译、时序模拟在MAX+PLUSⅡ中可得到如图所示的仿真波形:图2模6计数器仿真波形(2)半整数分频器设计现在通过设计一个分频系数为5.5的分频器给出用FPGA设计半整数分频器的一般方法。
课程设计报告设计名称EDA(VHDL)课程设计专业班级电子0942姓名姬鹏冲学号0904451213成绩评定电气与信息工程学院二0一二年一月课程设计要求和成绩考核办法(要求和成绩考核办法在封皮背面打印)1.不允许在教室或实验室内吸烟、吃零食,不准带无关人员到教室或实验室活动,否则扣平时表现分。
2.凡病事假超过3天(每天7小时),或迟到早退三次以上,或旷课两次(1天)以上,不得参加本次考核,按不及格处理,本次课程设计不能通过。
3.病事假必须有请假条,需经班主任或有关领导批准,否则按旷课处理。
4.课程设计的考核由指导教师根据设计表现(出勤、遵守纪律情况等)、设计报告、设计成果、答辩等几个方面,给出各项成绩或权重,综合后给出课程设计总成绩。
该设计考核须经教研室主任审核,主管院长审批备案。
5.成绩评定采用五级分制,即优、良、中、及格和不及格。
6.课程设计结束一周内,指导教师提交成绩和设计总结。
7.设计过程考核和成绩在教师手册中要有记载。
实习报告要求实习报告内容、格式各专业根据实习(设计)类别(技能实习、认识实习、生产实习、毕业实习等)统一规范,经教研室主任审核、主管院长审批备案。
注意:1.课程设计任务书和指导书在课程设计前发给学生,设计任务书放置在设计报告封面后和正文目录前。
2.为了节省纸张,保护环境,便于保管设计报告,统一采用A4纸,课程设计报告建议双面打印(正文采用宋体五号字)或手写,左侧装订,订两个钉。
基于FPGA的半整数分频器设计一、系统设计任务及功能概述本系统是利用VHDL硬件描述语言和原理图输入方式,通过MUX+PLUSⅡ开发软件和ALTER 公司的FLEX系列EPF10K10LC84-4型FPGA方便的完成了半整数分频器电路的设计。
本系统是通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。
二、系统设计方案和程序设计1.系统设计方案我们采用脉冲吞吐计数器和锁相环技术,先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的5.5分频值。
***大学本科实验报告(2011-2012学年下学期)课程名称:EDA任课教员:系:专业:二0一一年十月八日《EDA》课程实验报告实验项目名称:数控分频器的设计系::专业:指导教员:姓名:学号:成绩:同组姓名:实验地点:实验室实验日期:数控分频器的设计一、实验目的和要求学习数控分频器的设计、分析和测试方法。
二、实验内容和原理1、实验内容:a)分析程序一中的各语句功能、设计原理及逻辑功能,详述进程P_REG和P_DIV的作用,并画出该程序的RTL电路图;b)仿真:输入不同的CLK频率和预置值D,给出如书图6-21的时序波形。
c)将程序一扩展成16位分频器;d)利用两个程序一给出的模块设计一个电路,使其输出方波的正负脉宽的宽度分别由两个8位输入数据控制。
2、实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可,详细设计程序如程序一。
三、实验环境QuartⅡ软件四、操作方法与实验步骤1、在QuartⅡ中建立工程,进行程序编写、调试、编译、仿真,设置CLK频率和D为不同值;2、分析程序一,类推出16位分频器的设计方法;3、仔细分析程序一中如何控制正负脉宽的宽度,采用元件例化语句,将DVF和SEL2两个VHDL设计实体组合起来,设计如题中要求的电路,具体程序见程序三,并按步骤1执行。
五、实验数据记录和处理将程序进行仿真得到的波形图如下所示:(1)8位数控分频器(2)16位数控分频器(3)正负脉冲宽度可变分频器六、实验结果与分析:仿真结果基本正确,但在对16位数控分频器做仿真时应把endtime设置在ms级以上,即仿真时长要稍长些,才能出来明显结果。
正负脉冲宽度可变分频器的正负脉冲宽度分别由D1和D2控制,其基本原理与8位数控分频器原理一致。
七、实验心得与体会通过该实验,我掌握了数控分频器的工作原理及其设计方法,学会了元件例化语句的使用。
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 文本设计过程。
目录引言 (3)1绪论 (4)2系统设计方案 (5)2.1设计方案比较 (5)2.1.1分频器的设计 (5)2.1.2控制输入装置的设计 (5)2.2 设计方案框图 (6)3系统设计实现 (7)3.1分频器部分 (7)3.1.1设计思路 (7)3.1.2设计实现 (8)3.1.3仿真分析 (10)3.2输入控制部分 (11)3.2.1设计思路 (11)3.2.2设计实现 (11)3.2.3仿真波形 (23)3.3分频显示部分 (24)3.3.1设计思路 (24)3.3.2设计实现 (26)3.3.3仿真分析 (33)3.3.4所需要改进之处 (36)3.4各部分整合 (37)4系统设计验证 (39)4.1适配分析结果 (39)4.2硬件运行 (39)5软硬件平台的介绍 (44)5.1软件平台 (44)5.1.1MAX+PLUS Ⅱ开发工具 (44)5.1.2MAX+PLUS Ⅱ的设计方法 (45)5.2 硬件平台 (46)5.2.1硬件原理 (46)5.2.2引脚规定 (48)5.2.3使用方法 (49)6小数分频技术的拓展 (51)结束语 (54)致谢 (55)附录 (56)A开题报告 (56)B中期报告 (59)C英文资料与中文翻译 (62)引言随着计算机与微电子技术的发展,电子设计自动化EDA技术和可编程逻辑器件PLD的发展都非常迅速,能否熟练地利用EDA软件进行PLD器件开发已成为电子工程师必须掌握的基本技能。
过去传统的设计方法采用标准通用器件和其他元件对电路板进行设计,由于系统所需的元件的种类和数量很多,连线复杂,因而体积大、功耗大、可靠性差。
而先进的EDA工具使传统的“自下而上”的设计方法已经变为“自顶向下”的设计方法,以硬件描述语言HDL来描述系统级设计,利用计算机对系统进行方案设计和功能划分,并支持系统仿真和高层综合,关键电路可使用ASIC来实现,因而使系统的体积、重量减少,功耗降低,具有高性能、高可靠性和高保密性等优点。
EDA 设计与实验院系:电子工程与光电技术学院专业:通信工程班级: 07042201姓名:包华广(32号)学号: 0704330107指导老师:蒋立平花汉兵目录:摘要 - - - - - - - - - - - - - - - 1一.正文部分1.设计电路功能要求 - - - - - - - - - - - - - 12.方案论证 - - - - - - - - - - - - - 13.各子模块设计原理 - - - - - - - - - - - - 23.1 时钟信号发生模块 - - - - - - - - - - - - 23.2 计时模块- - - - - - - - - - - 43.3 计时电路 - - - - - - - - - - - - 63.4 校正电路模块 - - - - - - - - - - - - 63.5 整点报时模块 - - - - - - - - - - - - 83.6 闹钟功能模块 - - - - - - - - - - - - 84、设计总电路原理 - - - - - - - - - - - - - 9二.总结部分5. 调试、仿真与下载 - - - - - - - - - - - - - 106.实验结果 - - - - - - - - - - - - - 107. 实验中遇到的问题与解决方法 - - - - - - - - - 118. 实验体会与收获 - - - - - - - - - - - - - 12 9.参考文献 - - - - - - - - - - - - - - - - 12摘要:本实验利用QuartusII软件,结合所学的数字电路的知识设计一个24时多功能数字钟,具有正常分、秒计时,动态显示,保持、清零、快速校分、整点报时、闹钟功能。
文章分析了整个电路的工作原理,还分别说明了各子模块的设计原理和调试、仿真、编程下载的过程,并对最终结果进行总结,最后提出了在实验过程中出现的问题和解决的方案。
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、半整数分频占空比不为50%//说明:我设计的史上最好用的半整数分频占空比不为50%,包含设计思路module div_5(clk,clk_div,cnt1,cnt2,temp1,temp2);//N+0.5input clk;output clk_div;output reg[31:0]cnt1,cnt2;output reg temp1,temp2;initial begin temp1=0;temp2=1;end //首先进行初始化,temp1=0;temp2=1 parameter N=5; //设定分频系数为N+0.5always @(posedge clk) //temp1上升沿跳变beginif(cnt1==2*N) //2*Nbegin cnt1[31:0]<=32'd0;endelse begin cnt1[31:0]<=cnt1[31:0]+32'd1;endif(cnt1==32'd0) begin temp1<=1;end //高电平时间为N+1;if(cnt1==N+1) begin temp1<=0;end//低电平时间为N;endalways@(negedge clk) //temp2下降沿跳变beginif(cnt2==2*N) //2*Nbegin cnt2[31:0]<=32'd0;endelse begin cnt2[31:0]<=cnt2[31:0]+32'd1;endif(cnt2==32'd0) begin temp2<=0;end //低电平时间为N;if(cnt2==N) begin temp2<=1;end //高电平时间为N+1;endassign clk_div=temp1&&temp2; //逻辑与endmodule//如果要进行N+0.5分频//思路:总的来说要进行N+1+N=2N+1次分频//在时钟的上升沿和下降沿都进行跳变//上升沿进行占空比为N+1比N的时钟temp1;//下降沿进行占空比为N比N+1的时钟temp2;//最后div=temp1&&temp2 即可得到所需要的半整数分频分频5.5仿真结果2、奇数分频占空比为50%//说明:奇数分频。
现代EDA技术课程设计实验报告题目:基于FPGA技术的数字频率计的设计学院:研究生学院专业名称:检测技术与自动化装置班级: 2010 (7)班学号:100081102001学生姓名:司红伟指导教师:徐精华二O一一年五月基于FPGA技术的数字频率计的设计1.实验目的(1)熟悉QUARTUS的基本使用。
(2)熟悉FPGA实验开发系统的基本使用。
(3)学习VHDL基本单元电路的综合设计应用。
2.实验内容设计并调试好一个八位十进制的数字频率计,要求具有以下基本功能:1)测频范围:1HZ-50MHZ。
2)测频精度:测频采用等精度频率测量,其全范围相对误差恒为万分之一。
3)响应时间:小于5S。
4)具有记忆显示功能,即在测量过程中不刷新数据,测量结束才将测量结果送显示。
3.试验原理(1)采用直接测频法。
直接测频法就是在确定的闸门时间内,记录被测信号的脉冲个数。
由于闸门时间通常不是待测信号的整数倍,这种方法的计数值也会产生最大为±1个脉冲误差。
进一步分析测量准确度:设待测信号脉冲周期为Tx,频率为Fx,当测量时间为T=1s时,测量准确度为&=Tx/T=1/Fx。
由此可知直接测频法的测量准确度与信号的频率有关:当待测信号频率较高时,测量准确度也较高,反之测量准确度也较低。
因此直接测频法只适合测量频率较高的信号,不能满足在整个测量频段内的测量精度保持不变的要求。
(1)采用等精度测频法。
频率是周期信号在单位时间内的重复次数,电子计数器可以对一个周期信号发生的次数,进行计数。
如果某一信号在T 秒时间间隔内的重复次数为N 次,则该信号的频率f 为在直接测频率的基础上发展的多周期同步测频率法,在目前的测频系统中得到越来越多广泛的应用。
多周期同步法测频原理如图3.1 所示。
图3.1 等精度测频原理波形图首先,由控制线路给出闸门开启信号,此时,计数器并不开始计数,而是等到被测信号的上升沿到来时,来真正开始计数。
然后,两组计数器分别对被测信号子和标准信号分别进行计数,要等到被测信号下降沿到来时才真正结束计数,完成一次测量过程。
实验五数控分频器的设计一、实验目的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种不同的实验电路结构。
library ieee;use ieee.std_logic_1164.all;entity fpq isport(fsin: in std_logic;Preset :in std_logic_vector(3 downto 0);clk: in std_logic;dout: out std_logic_vector(31 downto 0);seltmp:out std_logic_vector(7 downto 0);smtmp:out std_logic_vector(6 downto 0)); end;architecture art of fpq iscomponent cnt10port(clk,clr,ena: in std_logic;cq: out std_logic_vector(3 downto 0);carry_out: out std_logic);end component;component reg32bport(load: in std_logic;din: in std_logic_vector(31 downto 0);dout: out std_logic_vector(31 downto 0)); end component;component testctltsten,clr_cnt,load: out std_logic);end component;component deccountPort (inclk :in std_logic;Preset :in std_logic_vector(3 downto 0);--y_tmpdiv,y_tmpclk: out std_logic;Outclk:buffer std_logic);end component;--component zmjsxs--port(ck: in std_logic;--data: in std_logic_vector(31 downto 0);--sel: out std_logic_vector(7 downto 0);--sm: out std_logic_vector(6 downto 0)); --end component;signal tsten: std_logic;signal clr_cnt: std_logic;signal load: std_logic;signal carry1: std_logic;signal carry2: std_logic;signal carry3: std_logic;signal carry5: std_logic;signal carry6: std_logic;signal carry7: std_logic;signal carry8: std_logic;signal din: std_logic_vector(31 downto 0);signal outclk: std_logic;signal fsintmp: std_logic;signal douttmp: std_logic_vector(7 downto 0);beginfsintmp<=fsin;dout<=douttmp;u:deccount port map(inclk=>fsintmp,preset=>preset,outclk=>outclk);u0: testctl port map(clk=>clk,tsten=>tsten,clr_cnt=>clr_cnt,load=>load);u1: cnt10 port map(clk=>outclk,clr=>clr_cnt,ena=>tsten,cq=>din(3 downto 0),carry_out=>carry1);u2: cnt10 port map(clk=>carry1,clr=>clr_cnt,ena=>tsten,cq=>din(7 downto 4),carry_out=>carry2);u3: cnt10 port map(clk=>carry2,clr=>clr_cnt,ena=>tsten,cq=>din(11 downto 8),carry_out=>carry3);u4: cnt10 port map(clk=>carry3,clr=>clr_cnt,ena=>tsten,cq=>din(15 downto 12),carry_out=>carry4);u5: cnt10 port map(clk=>carry4,clr=>clr_cnt,ena=>tsten,cq=>din(19 downto 16),carry_out=>carry5);u6: cnt10 port map(clk=>carry5,clr=>clr_cnt,ena=>tsten,cq=>din(23 downto 20),carry_out=>carry6);u7: cnt10 port map(clk=>carry6,clr=>clr_cnt,ena=>tsten,cq=>din(27 downto 24),carry_out=>carry7);u8: cnt10 port map(clk=>carry7,clr=>clr_cnt,ena=>tsten,cq=>din(31 downto 28),carry_out=>carry8);u9: reg32b port map(load=>load,din=>din(31 downto 0),dout=>douttmp);--u10:zmjsxs port map (ck=>fsintmp,data=>douttmp,sel=>seltmp,sm=>smtmp); end art;Library ieee; -- N-0.5分频器Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity deccount isPort (inclk :in std_logic; --时钟源Preset :in std_logic_vector(3 downto 0); --预置分频值N--y_tmpdiv,y_tmpclk: out std_logic;Outclk:buffer std_logic); --输出时钟End deccount;Architecture aaa of deccount isSignal clk,divide2:std_logic;Signal count:std_logic_vector(3 downto 0);Begin--y_tmpdiv<=divide2;--y_tmpclk<=Clk;Clk<=inclk xor divide2; --incik与divide2异或后作为模N计数器的时钟Process (clk)BeginIf (clk'event and clk='1') thenIf(count="0000") thenCount<=preset-1; --置整数分频值N=preset-1Outclk<='1';ElseCount <=count-1; --模N计数器减法计数Outclk<='0';End if;End if;End process;Process(outclk)BeginIf (outclk'event and outclk='1')thenDivide2<=not divide2; --输出时钟outclk二分频End if;End process;End aaa;library ieee; --有时钟始能的十进制计数器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(clk: in std_logic; --计数时钟信号clr: in std_logic;ena: in std_logic;cq: out std_logic_vector(3 downto 0);carry_out: out std_logic); --计数进位end cnt10;architecture art of cnt10 issignal cqi: std_logic_vector(3 downto 0);beginprocess(clk,clr,ena)beginif clr='1' then cqi<="0000"; --计数器异步清零elsif clk'event and clk='1' thenif ena='1' thenif cqi<9 then cqi<=cqi+1;else cqi<="0000"; --等于9,则计数器清零end if;end if;end if;end process;process(cqi)beginif cqi=9 then carry_out<='1'; --进位输出else carry_out<='0';end if;end process;cq<=cqi;end art;library ieee; --32位锁存器use ieee.std_logic_1164.all;entity reg32b isport(load: in std_logic;din: in std_logic_vector(31 downto 0);dout: out std_logic_vector(31 downto 0));end reg32b;architecture art of reg32b isbeginprocess(load,din)beginif load'event and load='1' then dout<=din; --锁存输入数据end if;end process;end art;library ieee; --测频控制信号发生器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity testctl isport(clk: in std_logic; --1HZ测频控制时钟tsten: out std_logic; --计数器时钟始能clr_cnt: out std_logic; --计数器清零load: out std_logic); --输出锁存信号end testctl;architecture art of testctl issignal div2clk: std_logic;beginprocess(clk)beginif clk'event and clk='1' thendiv2clk<=not div2clk; --1HZ时钟二分频end if;end process;process(clk,div2clk)beginif clk='0' and div2clk='0' then --产生计数器清零信号clr_cnt<='1';else clr_cnt<='0';end if;end process;load<=not div2clk;tsten<=div2clk;end art;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; --"+"操作符重载entity zmjsxs isport(ck: in std_logic;data: in std_logic_vector(31 downto 0); --位显示sel: out std_logic_vector(7 downto 0);sm: out std_logic_vector(6 downto 0)); --段显示end;architecture art of zmjsxs issignal q_s: std_logic_vector(3 downto 0);signal tmp: integer range 0 to 7;beginprocess(ck) isbeginif ck'event and ck='1' thenif tmp=0 then sel<="00000001"; q_s<=data(3 downto 0);elsif tmp=1 then sel<="00000010";q_s<=data(7 downto 4);elsif tmp=2 then sel<="00000100";q_s<=data(11 downto 8);elsif tmp=3 then sel<="00001000";q_s<=data(15 downto 12);elsif tmp=4 then sel<="00010000";q_s<=data(19 downto 16);elsif tmp=5 then sel<="00100000";q_s<=data(23 downto 20);elsif tmp=6 then sel<="01000000";q_s<=data(27 downto 24);else sel<="10000000";q_s<=data(31 downto 28);end if;if tmp>=7 then tmp<=0;else tmp<=tmp+1;end if;end if;end process;process(q_s) isbegincase q_s iswhen "0000"=> sm<="1111110";when "0001"=> sm<="0110000";when "0010"=> sm<="1101101";when "0011"=> sm<="1111001";when "0100"=> sm<="0110011";when "0101"=> sm<="1011011";when "0110"=> sm<="1011111";when "0111"=> sm<="1110000";when "1000"=> sm<="1111111";when "1001"=> sm<="1111011";when others=> sm<="0000000"; end case;end process;end architecture art;。
EDA技术实验项目报告
项目题目: 半整数分频器的设计
姓名:
院系:应用技术学院
专业:电子信息工程(职教)
学号:
指导教师:
综合成绩:
完成时间: 2012 年 6 月13 日一、项目实验内容摘要
基于FPGA硬件开发板,利用QuartusII软件通过VHDL输入的方式实现2.5分频器的设计并用示波器观察;
试验目的:
1、掌握半整数分频器的VHDL设计原理与方法。
2、掌握在QUARTUS II中进行简单数字系统设计的全过程。
实验原理:
设有一个5MHz的时钟源,但电路中要产生一个2MHz的时钟信号,由于分频比为2.5,因此整数分频器将不能胜任。
采用可编程逻辑器件实现分频系数为2.5的分频器,可采用以下方法:设计一个模3的计数器,再设计一个扣除脉冲电路,加在模3计数器输出之后,每来两个脉冲就扣除一个脉冲(实际上是使被扣除的脉冲变成很窄的脉冲,可由异或门实现),就可以得到分频系数为2.5的小数分频器。
采用类似方法,可以设计分频系数为任意半整数的分频器。
当分频系数为N—0.5(N为整数)时,可控制扣除脉冲的时间,是输出为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。
二、项目实验源代码
分频器代码
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY deccount IS
PORT (
inclk: IN STD_LOGIC; --时钟源
preset: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --预置分频值N
outclk1: OUT STD_LOGIC;
outclk2: BUFFER STD_LOGIC ); --输出时钟
END deccount;
ARCHITECTURE deccount_arch OF deccount IS
SIGNAL clk, divide2: STD_LOGIC;
SIGNAL count: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
clk<=inclk XOR divide2; --inclk与divide2异或后作为模N计数器的时钟
outclk1<=inclk;
PROCESS(clk)
BEGIN
IF(clk'event AND clk='1') THEN
IF(count="0000") THEN
count<=preset-1; --置整数分频值N
outclk2<='1';
ELSE
count<=count-1; --模N 计数器减法计数
outclk2<='0';
END IF;
END IF;
END PROCESS;
PROCESS(outclk2)
BEGIN
IF(outclk2'event AND outclk2='1') THEN
divide2<=NOT divide2; --输出时钟二分频
END IF;
END PROCESS;
END deccount_arch;
三、项目实验工具软件的选用以及实验过程
实验的软硬件要求:
1、EDA2000实验箱(其他厂家具有同等配置试验箱均可),主要使用:输入:时钟源。
2、主芯片:EP1K1OTC100-3(大于此规模的芯片亦可)
3、计算机与QUARTUS 软件
实验过程:
1 . 建立工程文件
(1)新建一个文件夹。
(2)输入源程序(可以通过VHDL代码输入,也可以通过原理图输入)。
打开QuartusII,选择菜单File→New。
在New窗口中的Device Design Files中选择编译文件的语言类型,这里选择“VHDL File”。
然后在VHDL文本编译窗中输入代码一。
(3)文件存盘。
选择File→Save As命令,找到已设立的文件夹,存盘文件名为counter60当出现问句“Do you want to create…”时,若单击“是”按钮,则直接进创建工程流程。
2.创建工程
(1)打开建立新工程管理窗。
选择菜单File→New Preject Wizard命令,即弹出“工程设置”对话框.单击此对话框最上一栏右侧的“…”按钮,找到指定的文件夹,选中已存盘的文件counter60.vhd,再单击“打开”按钮.。
(3)将设计文件加入工程中。
单击下方的Next按钮,在弹出的对话框中单击File栏的按钮,将与工程相关的所有VHDL文件(如果有的话)加入进此工程.
(3)选择目标芯片。
单击Next按钮,选择目标芯片。
首先在Family栏选芯片系列,在此选ACEX1K系列,并在此栏下单击Yes按钮,即选择一确定目标器件。
再次单击Next
按钮,选择此系列的具体芯片EP1K10TC100-3。
(4)选择仿真器和综合器类型。
单击Next按钮,这时弹出的窗口是选择仿真器和综合器类型,如果都选默认的“NONE”。
在此都选择默认项“NONE”(不作任何打勾选择)。
(5)结束设置。
单击Next按钮后,即弹出“工程设置统计”窗口,上面列出了此项工程相关设置情况,最后单击Finish按钮。
3. 编译前设置
选择FPGA目标芯片。
目标芯片的选择也可以这样来实现:选择Assignmemts菜单中的settings项,进入选择窗,这将弹出Device窗口.
4 . 全程编译
5.时序仿真
6、引脚设置和下载
7、配置文件下载
8、编程配置器件
四、项目实验结果
功能仿真图
时序仿真图
五、项目实验分析
通过这个实验让我对半整数分频器有了了解,对于这个分频系数为2.5的分频器,是设计一个模为3的计数器,再设计一个扣除脉冲电路,加在模3计数器输出之后,两个脉冲就扣除一个脉冲,就得到分频系数为2.5的小数分频器。
六、项目实验参考资料
《EDA技术与实验》陈立万陈强编著
七、小组验收记录及评价。