六分频加法电路的设计.docx
六分汉频加法展电路的勺设计1相关原理分析1.1计数器计数器是实现分频电路的基础,计数器包括普通计数器和约翰逊计数器两种,这两种 电路均可用于分频电路中。最普通的计数器莫过于加法(减法)计数器。以3位二进制计数器为例,计数脉冲CP 通过计数器时,每输入一个计数脉冲,计数器的最低位(记为Q0,后面的依次记为Q Q2、)翻转一次,QQ2、都以前一级的输出信号作为触发信号。分析这个过程,不难得 出输出波形。图1-1 3位二进制计数器时序图由上很容易看出Q0的频率是CP的1/2,即实现了 2分频,Q1则实现了 4分频,同 理Q2实现了 8分频。这就是加法计数器实现分频的基本原理。约翰逊计数器是一种移位寄存器,采用的是把输出的最高位取非,然后反馈送到最 低位触发器的输入端。约翰逊计数器在每一个时钟下只有一个输出发生变化。同样以3为 二进制为例。假设最初值或复位状态是000,则依次是000、001、011、111、110、100、 000这样循环。由各位的输出可以看出,约翰逊计数器最起码能实现2分频。1.2两种计数器的比较从以上分析可以看出约翰逊计数器没有充分有效地利用寄存器的所有状态,而且如果由于噪声引入一个无效状态,如010,则无法恢复到有效循环中去,需要加入错误恢复处 理。但其较之加法计数器也有它的好处。同一时刻,加法计数器的输出可能有多位发生变 化,因此当使用组合逻辑对输出进行译码时,会导致尖峰脉冲信号。而约翰逊计数器可以 避免这个问题。1.3计数器的选择本次训练要求设计的是加法分频电路,选择的是加法计数器。加法计数器实现分频较 之约翰逊计数器简单,编程也容易理解一些,对于初学者也较容易上手。在前面已经讲过 加法计数器实现2n的分频的方法,现在就不在赘述。1.4偶数分频器如前所述,分频器的基础是计数器,设计分频器的关键在于输出电平翻转的时机。偶 数分频最易于实现,要实现占空比为50%的偶数N分频,一般来说有两种方案:一是当计 数器计数到N/2-1时,将输出电平进行一次翻转,同时给计数器一个复位信号,如此循环 下去;二是当计数器输出为0到N/2-1时,时钟输出为0或1,计数器输出为N/2到N-1 时,时钟输出为1或0,当计数器计数到N-1时,复位计数器,如此循环下去。可以根据 以上两种方案设计电路和程序。2六分频加法电路2.1电路的结构设计前面已经讲到过关于2n分频可以直接通过计数器获得。而对于一些非2的整数次幕 的分频,如本次课设的6分频,还需要在基本计数器电路描述中加上复位控制电路。cntQpO)图2-1加法分频电路的RTL视图2.2电路的程序设计由偶数分频器的设计原理我们可以得到两种设计方案:1) 当计数器计数到2的时候,将输出电平取反,同时给输出电路一个复位信号,如 此循环,这就是第一种方案;2) 当计数器输出为0到2时,时钟输出为0(或1),而当计数器输出为3到5时, 时钟输出为1(或0),且当计数器输出为5时,复位计数器,如此循环下去,此为第二种 方案。根据以上方案,设计出的程序如下:-filename clk_div1.vhd-description: 占空比为50%的6分频Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all ;entity clk_div1 is-定义实体 clk_div1port(clk_in: in std_logic; clk_out: out std_logic);-定义输入输出端口end clk_div1;-第一种方案architecture a of clk_div1 issignal clk_outQ: std_logic : ='0'-赋初始值仅供仿真使用signal countQ: std_logic_vector (2 downto 0) := "000"beginprocess(clk_in)beginif(clk_in'event and clk_in = '1') then-检测信号的上升沿if(countQ /= 2) thenCountQ <= CountQ + 1;-判断计数器是否计数到2,没有就加1elseclk_outQ <= not clk_outQ;-计数器计数到 2,取反CountQ <= (others=>'0');end if;end if;end process;clk_out <= clk_outQ;-计数器没有技术到2,保留原值 end a;-第二种方案architecture b of clk_div1 issignal countQ: std_logic_vector(2 downto 0);beginprocess(clk_in)beginif(clk_in'event and clk_in = '1') then -检测时钟信号的上升沿if (countQ < 5) thencountQ <= countQ +1;-计数器是否计数到5,没有则加1elsecountQ <='0'-计数器计数到5,复位end if;end if;end process;process(countQ)beginif(countQ < 3) thenclk_out <= '0'-计数器没有计数到3,则令计数器为0elseclk_out <= '1'-计数器计数到3以上,则令计数器为1end if;end process;end b;configuration cfg of clk_div1 is -把 a 配置到机构体 clk_div1for aend for;end cfg;2.3仿真结果两种方案得到的结果相同,具体结果见下图:图2-2仿真结果2.4方案比较第一种方案的适用性不强,不及第二种方案,它仅仅能实现占空比为50%的分频器。 第二种方案则可以有限度的调整占空比,通过调节输出段来实现。如调节计数器,当计数 器计数到0到3时,时钟输出为0(或1),当计数器计数到4到5是,时钟输出为1(或 0),当计数器计数到5时,复位计数器,如此循环。本次课设没有特别要求考虑占空比,所以两种方案都可以。第一种方案是大家最容易 想到,也是最容易理解的一种,实现起来的思路也比较明朗。第二种方案也比较容易理解, 但是它最大的优点是能有限度的调整占空比。在实际的应用中可操作性更强,更适合实际 的需要。3流程图3.1方案一流程图图3-1方案一流程图3.2方案二流程图开始图3-2方案二流程图4程序说明4.1 VHDL语言重点语句说明(1)Entity:实体,是VHDL语言程序设计的基本组成部分之一。用来描述设计实体 的外部接口信号(即输入/输出信号)。实体中的每一个I/O信号被称为端口,其功能对应 于电路图符号的一个引脚。端口说明则是对一个实体的一组端口的定义,即对基本设计 实体与外部接口的描述。端口是设计实体和外部环境动态通信的通道。实体的一般格式为:ENTITY 实体名 IS类属参数说明;端口说明;END;(2)Architecture:结构体,也是VHDL语言程序设计的基本组成部分之一。用来描述 实体的内部结构和逻辑功能。结构体的一般格式如下:ARCHITECTURE 结构体名OF 实体名IS结构体说明部分;BEGIN功能描述语句;END ARCHITECTURE结构体名;(3)Process:进程。PROCESS语句是一种并发处理语句,在一个构造体中多个 PROCESS语句可以同时并发运行.PROCESS语句是VHDL中描述硬件系统并发行为的最 常用、最基本的语句。进程语句的一般格式为;进程名:PROCESS (敏感信号表)进程说明语句BEGIN顺序描述语句;END PROCESS 进程名;(4)Library:库,是经编译后的数据的集合。库是用来放置可编译的设计单元(它 存放包定义、实体定义、构造定义和配置定义)的地方,通过其目录可查询和调用。VHDL中的库大致可归纳为5种:IEEE库、STD库、ASIC矢量库、WORK库和用户 定义库。IEEE库:常用的资源库。IEEE库包含经过IEEE正式认可的STD_LOGIC_1164包集 合和某些公司提供的一些包集合,如STD_LOGIC_ARITH (算术运算包集合)等。STD库:VHDL的标准库。库中存放有称为“standard”的标准包集合,其中定义了 多种常用的数据类型,均不加说明可直接引用。(5)Configuration:配置。配置语句描述了层与层之间的连接关系,以及实体与构造 体之间的连接关系。(一个实体(ENTITY)可以有多个构造体)设计者可以利用配置语句 选择不同的构造体,使其与要设计的实体相对应;在仿真某一个实体时,可以利用配置选 择不同的构造体进行性能对比实验,以得到性能最佳的构造体。配置的基本格式为:CONFIGURATION 配置名 OF 实体名ISFOR 选配结构体名END FOR;END配置名;4.2程序中主要语句说明本次课设中重点用到的语句莫过于If语句的使用了,现在具体说明一下此语句的用 法细则。IF语句是根据所指定的一种或多种条件来决定执行哪些语句的一种重要顺序语句, 因此也可以说成是一种控制转向语句。(1)跳转控制。格式如下:IF 条件 THEN顺序语句;END IF;当程序执行到IF语句时,先判断IF语句指定的条件是否成立。如果成立,IF语句所 包含的顺序处理语句将被执行;如果条件不成立,程序跳过IF语句包含的顺序语句,而执 行END IF语句后面的语句,这里的条件起到决定是否跳转的作用。(2)二选一控制。格式如下:IF 条件 THEN顺序语句;ELSE顺序语句;END IF;根据IF所指定的条件是否成立,程序可以选择两种不同的执行路径,当条件成立时, 程序执行THEN和ELSE之间的顺序语句部分,再执行END IF之后的语句;当IF语句的 条件不成立时,程序执行ELSE和END IF之间的顺序语句,再执行END IF之后的语句在本次课设中的应用举例:if(clk_in'event and clk_in = '1') then-检测时钟信号的上升沿if (countQ < 5) thencountQ <= countQ +1;-判断计数器是否计数到5,没有则加1elsecountQ <='0'-计数器计数到5,复位end if;end if;以最外面的If而论,它使用的是第一种作用,即跳转控制,只对时钟信号的上升沿起 作用。以内侧的If而论,它使用的是第二种作用,即二选一控制,当计数器计数到5时, 计数器被复位,回到0的初始状态。当计数器没有技术到5时,计数器自加1,然后转入 下一条语句。5结果分析和总结5.1设计结果cir'diviclk_in clk_outinst图5-1分频模块元件符号图5-2时序仿真结果5.2分析及总结使用方案一,遇上计数为2就翻转时钟信号,同时给输出电路一个复位信号。再根据 程序可知:初始时输出信号为0,在时钟信号的第一个上升沿,计数为1,输出前一个上 升沿的信号为0;在第二个上升沿,计数加1变为2,输出前一个上升沿的信号为0;接着 在第三个上升沿,由于计数为2,首先是输出信号翻转由0变为1,接着计数器被复位回 到0;再在得四个时钟信号的上升沿,计数加1变为1,输出前一个上升沿的信号为1 如此往复,会发现交替出现占时3个时钟信号周期0或1出现,折算成频率,即将时钟信 号进行了 6分频。方案二相对简单,就不再陈述了。6心得体会通过本次的暑期能力拓展训练,使我对电子设计自动化(EDA)技术有了更深刻的了 解。也使我掌握了 Quartus II软件的基本用法,同时对VHDL语言有了较深的认识。本次训练一开始,我便提前整理了一下SOPC课程的知识,重新温故之后,又仔细认 真的将Quartus II的操作知识看了一下,然后开始查阅关于分频电路的各种资料,有从网 上下载的,有从图书馆借来的。在经过了一定的了解之后,我又分析了6分频加法电路的 具体实现办法。考虑到计数器即可作为分频器,解决的重点在软件上时,我又进一步的查 阅VHDL语言的编程方法。经过这一番准备,6分频加法电路我已了然于胸,编好程序之 后我就开始完成报告。整个过程还算顺利。在训练的过程中,也遇到过不少问题,这时候,同学给了我很大帮助,再回忆上课时 老师的讲解,一切谜团渐渐地解开了。现在回想起来,那些问题在这结束时来看,都已经 不是问题了。仔细想来,和我们的人生也是这样。人生中会遇到很多槛,一时难以走过, 当难以继续的时候,一定要坚持,而当你咬牙挺过的时候,一切看来又那么的不值一提。这是这学期的最后一个课设了,它的结束也就是大三学年的结束。想想下学期就可以 开始找工作了,心里不免有些忐忑。以前的自信满满,在经过这学期的一系列训练之后, 开始变得担忧。看到的越多、越奇怪,越是觉得自己学得不够。在以后的日子里只有不断 提点自己要更加努力才行。这次拓展训练,让我不仅学到了 EDA的知识,也让我看到了 一个团队的团结互助所起到的巨大作用。在这次训练期间,大家经常一起讨论、交流。不 仅更增长了大家的见识,更让大家看到了相互间的不足。能够共同进步,我相信大家都会 感到高兴!在这最后,感谢帮助过的老师和同学!希望以后的学习生活里,大家仍能同进退,互 相扶持!参考文献1 王金明编著.数字系统设计与Verilog HDL (第 3版).电子工业出版社.2009年2 张睿、赵艳华、曹丙霞编著.基于Quartus II的FPGA/CPLD的设计与应用.电子工业 出版社.2007年3 江国强编著.EDA技术与应用.电子工业出版社.2010年4 王金明编著.Verilog HDL程序设计教程.人民邮电出版社.2005年5 康华光主著.电子技术基础数字部分(第五版).高等教育出版社.2006年6 周润景、苏良碧编著.基于Quartus II的数字系统Verilog HDL设计实例详解.电子 工业出版社.2010年7 谭会生、张昌凡编著EDA技术及应用(第二版)西安电子科技大学出版社.2006年8 康华光主编,邹寿彬、秦臻副主编电子技术基础数字部分(第五版)高等教育出版 社.2005年9 王冠、黄熙、王鹰编著Verilog HDL与数字电路设计.机械工业出版社.2006年