EDA 半整数分频器的设计实验报告
EDA实验报告二
实验三分频器一.实验目的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分频器实验报告 含有实验程序、仿真图像 三分频 八分频
if(!rst_n) begin
t2<=0;
k2<=0;
end
else begin
if(t2==2'b10) begin
t2<=0;
k2<=k2;
end
else begin
t2<=t2+1;
k2<=!k2;
end
end
end
assign clk_out=k1|k2;
endmodule
2、八分频器程序:
moduleba(inclk,tick);
output tick;
input inclk;
reg [1:0] t;
reg tick;
always @ (posedge inclk)
begin
if(t==3)
begin
tick =~tick;
t=0;
end
else t=t+1;
end
endmodule
五、实验仿真波形
六、实验总结和感想
通过这次实验我对PLD的设计流程有了更深的感触,明白了其设计的一般步骤及方法,为以后的Quartus Ⅱ的综合设计奠定了基础。同时,对于分频器程序的编写有了更深的认识,这能更好的促进我们以后的理论学习。实验过程中也必须本着不骄不躁、耐心严谨,否则容易出错而达不到实验要求。
三、实验内容
1、根据要求设计三分频器、八分频器。
2、对设计的分频器进行波形仿真分析。
四、三位、八位简易频率计程序
1、三分频器程序
modulesan(clk_in,rst_n,clk_out);
input clk_in;
EDA分频器的设计
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课程设计---基于FPGA的半整数分频器设计
课程设计报告设计名称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设计半整数分频器的一般方法。
课程设计基于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分频值。
EDA实验数控分频器的设计
***大学本科实验报告(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实验报告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 文本设计过程。
EDA数控分频器设计的实验报告
实验报告
专业班级:电子092姓名:林明辉学号:200901122
实验课程:EDA技术实用教材
项目名称:
一.实验目的:1.了解并掌握QuartusⅡ使用方法
2.学Байду номын сангаас8位数码扫描器显示电路设计
3.实验箱的运用
实验原理:其中每个数码管的8个段:h、g、f、e、d、c、b、a(h是小数点)都分别连在一起,8个数码管分别由8个选通信号k1、k2、…k8来选择。被选通的数码管显示数据,其余关闭。如在某一时刻,k3为高电平,其余选通信号为低电平,这时仅k3对应的数码管显示来自段信号端的数据,而其它7个数码管呈现关闭状态。根据这种电路状况,如果希望在8个数码管显示希望的数据,就必须使得8个选通信号k1、k2、…k8分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
二.实验步骤:1.先编好底层文件—数控分频器程序
2.编好8位数码扫描显示电路程序
3.把两个底层文件设置成符号文件
4.调用以上两个符号文件连成以下电路图
三.实验仪器:电脑一台
实验箱一个
四.数据记录及处理:
基于CPLD的半整数分频器的设计
目录引言 (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实验报告(绝对有用)
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)波形分析由波形图可以知道实验成功。
EDA实用技术第8章 开发系统案例
图8.3 占空比为50%的3分频器原理图和仿真波形
2.带使能端的异或门设计
采用VHDL语言设计一个带使能控制端的 异或门,其输入端口为使能端en、输入a和b; 输出端口为y。 当en为高电平时,y输出a和b的异或值; 当en为低电平时,y输出信号a。
3.2分频器的设计
设计中用T触发器来完成2分频的功能, 实现方法是:将触发器的输入信号T直接接高 电平1,将计数器的一个计数输出端作为T触 发器的时钟输入端。
8.2.1 8.2.2 8.2.3 8.2.4
绘制原理图 检查原理图生成网络表 自制封装 双面板的制作
8.2.1 绘制原理图
新建原理图文件,命名为激光.sch,选 择图纸大小为A3,按图8.6绘制原理图(绘制 在一张电路图中)。
图8.6 子电路1
图8.7 子电路2
图8.8 子电路3
图8.9 子电路4
8.1.3 1.5分频器
在实际应用中经常会用到分频系数为1.5 的分频器,采用上面的半整数分频的方法没 有办法实现。 根据时序分析,可列出如下的卡诺图。
T 1.5T
图8.5 1.5分频器原理图和仿真波形
8.1.4 下载验证
将引脚clk和q锁定,综合适配后将原理 图和配置数据下载到EDA实验平台的FPGA中, 观察clk和q的波形,测试结果与仿真结果一 致。 采用硬件描述语言和原理图输入方式, 利用ALTERA公司的MaxplusII开发软件和 ACEX1K系列的EP1K系列FPGA,方便地完成了 2.5(N-0.5)、5(2N-1)、3(N)、6(2N)和l.5分 频器电路的设计。
8.1.2 N-0.5分频器的设计
进行N-0.5分频一般需要对输入时钟先进 行操作。首先进行模N的计数,在计数到N-1 时,将输出时钟赋为1,而当回到计数0时, 又赋为0,这样,当计数值为N-1时,输出时 钟才为1,因此,只要保持计数值N-1为半个 输入时钟周期,即可实现N-0.5分频时钟。 因此,保持N-1为半个时钟周期是设计的 关键。
EDA实验报告
批次序号: 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数字分频器的实验
现代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 等精度测频原理波形图首先,由控制线路给出闸门开启信号,此时,计数器并不开始计数,而是等到被测信号的上升沿到来时,来真正开始计数。
然后,两组计数器分别对被测信号子和标准信号分别进行计数,要等到被测信号下降沿到来时才真正结束计数,完成一次测量过程。
实验五 EDA 数控分频器的设计
实验五数控分频器的设计一、实验目的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半整数分频器课程设计
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的几个实验仿真图形
实验项目一:74LS318译码器的设计实验目的:1、通过一个简单的三-八译码器的设计,让学生掌握组合逻辑电路的设计方法。
2、掌握组合逻辑电路的静态测试方法。
3,初步了解QUARTUS II原理图输入设计的全过程。
二、实验的硬件要求:1、EDA2000实验箱(其他厂家具有同等配置试验箱均可),主要使用:输入:DIP拨码开关3位、输出:LED灯;2、主芯片:EP1K1OTC100-3(大于此规模的芯片亦可);3、计算机与QUARTUS 软件;三、实验原理三-译码器为三输入、八输出。
当输入信号按二进制方式的表示值为N时(输入端低电平有效),输出端从零到七,标号为N输出端输出低电平表示有信号产生,而其它则为高电平表示无信号产生。
因为三个输入端能产生的组合状态有八种,所以输出端在每种组合中仅有一位为低电平的情况下,能表示所有的输入组合,因此不需要像编码器实验那样再用一个输出端指示输出是否有效。
但可以在输入中加入一个输出使能端,用来指示是否将当前的输入进行有效的译码,当使能端指示输入信号无效或不用对当前信号进行译码时,输出端全为高电平,表示无任何信号。
本例设计中没有考虑使能输入端,自己设计时可以考虑加入使能输入端时,程序如何设计。
表8.1三-八译码器真值表输入输出A2 A1 A0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y00 0 0 0 0 0 0 0 0 0 10 0 1 0 0 0 0 0 0 1 00 1 0 0 0 0 0 0 1 0 00 1 1 0 0 0 0 1 0 0 01 0 0 0 0 0 1 0 0 0 01 0 1 0 0 1 0 0 0 0 01 1 0 1 0 0 0 0 0 01 1 1 1 0 0 0 0 0 0 0四、实验步骤:打开QUARTUS II,打开原理图编辑器,按图8.26进行原理图设计。
各逻辑符号放置在原理图上后,经检查保存原理图。
完成了原理图的输入后,我们就可以用前面介绍的软件的使用方法,对程序进行管脚的定义、编译、仿真、下载,完成整个实验的设计。
eda实验数控分频器
数控分频器一实验目的:学习数控分频器的设计,分析和测试方法。
二实验原理:数控分频器的功能就是当在输入端给定不同输入数值时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数器溢出位与预置数加载输入信号相接即可。
三实验内容:(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,仿真结束。
EDA 半整数分频器的设计实验报告
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 ISPORT (inclk: IN STD_LOGIC; --时钟源preset: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --预置分频值Noutclk1: OUT STD_LOGIC;outclk2: BUFFER STD_LOGIC ); --输出时钟END deccount;ARCHITECTURE deccount_arch OF deccount ISSIGNAL clk, divide2: STD_LOGIC;SIGNAL count: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINclk<=inclk XOR divide2; --inclk与divide2异或后作为模N计数器的时钟outclk1<=inclk;PROCESS(clk)BEGINIF(clk'event AND clk='1') THENIF(count="0000") THENcount<=preset-1; --置整数分频值Noutclk2<='1';ELSEcount<=count-1; --模N 计数器减法计数outclk2<='0';END IF;END IF;END PROCESS;PROCESS(outclk2)BEGINIF(outclk2'event AND outclk2='1') THENdivide2<=NOT divide2; --输出时钟二分频END IF;END PROCESS;END deccount_arch;三、项目实验工具软件的选用以及实验过程实验的软硬件要求:1、EDA2000实验箱(其他厂家具有同等配置试验箱均可),主要使用:输入:时钟源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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技术与实验》陈立万陈强编著
七、小组验收记录及评价。