EDA课程设计-分频器-钟福茹17页_第1页
EDA课程设计-分频器-钟福茹17页_第2页
EDA课程设计-分频器-钟福茹17页_第3页
EDA课程设计-分频器-钟福茹17页_第4页
EDA课程设计-分频器-钟福茹17页_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、EDA课程设计设计题目: 竞赛抢答器姓名: 刘 云 龙 学号: 2010508140 班级: 10级2班 专业: 电子信息 院系: 信息科学与技术学院 指导老师: 田 敏 实验日期: 2013 年 1 月 13 日 一、前言21.1课程设计的意义21.2 VHDL语言简介2二、方案选择及原理分析32.1 通用可控分频器硬件方案选择32.2 通用可控分频器原理分析32.2.1 偶数分频器32.2.2奇数分频器4三、 软件设计53.1系统分析53.2系统的结构和模块划分53.2.1固定数值分频模块63.2.2按键和显示模块73.2.3占空比和分频系数可控分频模块73.3 可控分频的实现8四、软硬件

2、的系统测试8五、 心得体会8附录9参考文献16一、前言分频器是数字系统设计中的一种基本电路,我们往往需要通过分频器得到我们所需要的时钟频率。在实际设计中我们经常用到的为整数分频,有时要求等占空比,有时又要求非等占空比。在同一个设计中有时要求多种形式的分频,通常由计数器或计数器的级联结构构成各种形式的任意占空比偶数分频及非等占空比的奇数分频,实现起来比较简单,对于等占空比的奇数分频以及可控的分频实现起来会较为困难。本文利用VHDL硬件描述语言,使用Altera公司的FPGA芯片,设计了一种能够满足上述要求,而且较为通用的可控分频器。只需在分频器的输入端用按键输入相应的分频系数,就可以得到所需的频

3、率。1.1课程设计的意义随着电子技术的高速发展,FPGA/CPLD以其高速、高可靠性、串并行工作方式等突出优点在电子设计中受到广泛的应用,而且代表着未来EDA设计的方向。FPGA/CPLD的设计采用了高级语言,如VHDL语言AHDL语言等,进一步打破了软件与硬件之间的界限,缩短了产品的开发周期。所以采用先进的FPGA/CPLD取代传统的标准集成电路、接口电路已成为电子技术发展的必然趋势。EDA技术代表了当今电子设计技术的最新发展方向,采用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的

4、整个过程在汁算机上自动处理完成。由于现代电子产品的复杂度和集成度的日益提高,一般分离的中小规模集成电路组合已不能满足要求,电路设计逐步地从中小规模芯片转为大规模、超大规模芯片,具有高速度、高集成度、低功耗的可编程朋IC器件已蓬勃发展起来。1分频器是一种在 FPGA 的设计中使用效率非常高的设计,使用硬件描述语言进行设计消耗不多的逻辑单元就可以实现对时钟的操作,具有成本低、可编程等优点。1.2 VHDL语言简介VHDL(VHSIC(Very High Speed Integrated Circuit)Hardware Description Language)是超高速集成电路硬件描述语言,是一种

5、用于电路设计的高级语言。它出现于80年代后期,刚开始时它是由美国国防部开发出来的,是为了供美军用来提高设计的可靠性和缩减开发周期的一种使用范围比较小的设计语言 。VHDL语言主要应用于数字电路系统的设计。目前,国内对它的应用多数集中在FPGA/CPLD/EPLD的设计当中,除此之外,一些较为有实力的单位,也将它用来设计ASIC。VHDL语言具有多层次描述系统硬件功能的能力,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL还支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义

6、的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。VHDL语言具有自顶向下和基于库的设计特点。其开发流程:在顶层用方框图或硬件语言对电路的行为进行描述后,进行系统仿真验证和纠错,再用逻辑综合优化工具生成具体的门级逻辑电路的网表,然后通过适配器将网表文件配置于指定的目标器件,产生最终下载文件或配置文件。最后把适配后生成的下载或配置文件通过编程器或编程电缆下载到具体的FPGA/CPLD器件中去,以便进行硬件调试和验证,从而实现可编程的专用集成电路ASIC的设计。VHDL主要用于描述数字系统的结构,行为,功能和接口,除了含有许多具有硬件特征的语句外,VHDL的语言形式

7、和描述风格与句法是十分类似于一般的计算机高级语言。VHDL系统设计与其他硬件描述语言相比,具有比较强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言之一。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证.二、方案选择及原理分析2.1 通用可控分频器硬件方案选择分频器是数字电路中最常用的电路之一,在 FPGA 的设计中也是使用频率非常高的一种基本设计。基于 FPGA 实现的分频电路一般有两种方法:一种是使用FPGA 芯片内部提供的锁相环电路进行分频,如 ALTERA 提供的 PLL(Phase Locked Loop),Xilinx 提供的 D

8、LL(DelayLocked Loop);第二种是使用硬件描述语言,如VHDL、Verilog HDL 等。使用锁相环电路进行分频有许多的优点,例如可以实现倍频、相位偏移以及占空比可调等。但是由于 FPGA 内部提供的锁相环个数极为有限,不能满足使用时的要求。因此使用硬件描述语言实现分频电路在数字电路设计较为常用,因为它消耗不多的逻辑单元就可以实现对时钟的操作,具有成本低、可编程等优点。2.2 通用可控分频器原理分析实现分频电路最基础的东西是计数器,设计分频器的关键在于输出电平在何时进行翻转。计数器的种类分为普通计数器和约翰逊计数器两种,这两种计数器在分频电路中均可使用, 最普通的计数器是加法

9、或减法计数器。在同一时刻,加法计数器的输出可能有多位发生变化,因此,当使用组合逻辑对输出进行译码时,可能会导致尖峰脉冲信号。下面使用加法计数器来分别描述各种分频器的实现。2.2.1 偶数分频器偶数分频最易于实现,想要实现占空比为 50%的偶数 N 分频,一般来说有两种方案:一是当计数器计数到 N/2-1 时,将输出的电平进行一次翻转,并同时给计数器一个复位信号,使计数器重新开始计数,如此循环下去,便可实现占空比为50%的偶数N分频;二是当计数器的输出为 0到 N/2-1时,时钟的输出为 0或 1;当计数器的输出为 N/2到 N-1时,时钟的输出为 1或 0;当计数器计数到N-1 时,将计数器进

10、行复位,重新开始计数,如此循环下去,也能实现50%偶数分频。需指出的是,第一种方案只能实现占空比为 50%的分频器,而第二种方案还可以对占空比进行有限度的调整。图2.1 50%占空比2分频时序图 图2.2 4分之1占空比4分频时序图2.2.2奇数分频器想要实现非 50%占空比的奇数分频,比如实现占空比为 20%(1/5)、40%(2/5)、60%(3/5)、80%(4/5)的 5 分频器,我们可以采用类似于偶数分频的第二种方案;但如果要实现占空比为 50%的奇数分频,就不能采用偶数分频中所采用的方案了。图2.3 5分之1占空比5分频时序图 要产生50%占空比的奇数分频实现起来会比较麻烦一点,需

11、通过待分频的时钟下降沿触发计数,产生一个占空比为 40%(2/5)的 5 分频器。将产生的时钟与上升沿触发产生的时钟相或,即可得到一个占空比为 50%的5分频器。 推广为一般方法:欲实现占空比为 50%的 2N+1分频器,则需要对待分频时钟上升和下降沿分别进行 N/(2N+1)分频,然后将两个分频所得的时钟信号相或便可得到占空比为50%的2N+1分频器。4图2.4 50%占空比5分频时序图三、 软件设计3.1系统分析该分频系统可实现2到9999任意整数分频以及占空比1%到99%可调,被分频的时钟频率为1MHZ。由于硬件会产生时间延时,频率大到一定程度时输出的波形会有失真情况。对于奇数50%占空

12、比分频,软件处理需要对待分频时钟上升沿和下降沿分别进行 N/(2N+1)分频,然后将两个分频所得的时钟信号相或,这样输出的波形有可能会出现毛刺现象。3.2系统的结构和模块划分根据上面的分析,系统结构模块有:固定数值分频模块,按键和显示模块,两个占空比和分频系数可控分频模块。结构图如图4.1所示:图4.1 系统结构3.2.1固定数值分频模块固定数值分频模块将FPGA上的25MHZ时钟频率分别进行25分频和25000000分频得到1MHZ和1HZ时钟频率,其中1HZ作为按键的控制频率,1MHZ作为可控分频模块的输入频率。也就是说本系统是对1MHZ时钟频率进行分频,在实际中我们可以根据我们的需要改变

13、分频系数从而对其他时钟频率进行分频。对于按键的控制频率,1HZ的输入可以使我们按住按键时1秒钟改变一次数值,及进行一次加1操作。固定数值分频模块如图4.2所示:图4.2 固定数值分频3.2.2按键和显示模块该模块的输入为8个按键,其中2个按键为拨码开关,分别为复位按键和使能输出按键,当rst=1,及该按键按下时系统复位;当en=0,及该按键没按下时,按键的键值输出,en=1时为计数处理阶段。Key_fre3.0为设置分频系数的4个按键,输出的键值为0到9999。Key_ph1.0为设置占空比的2个按键,输出的键值为0到99。out_fre为按键的键值输入给可控分频模块以达到2到9999任意整数

14、分频,out_cycle为按键的键值输入给可控分频模块以达到占空比1%到99%可调。该模块的输出为6个数码管,其中4个显示分频系数,2个显示占空比。系统分频后的频率和波形在示波器上显示。按键和显示模块如图4.3所示;图4.3 按键和显示3.2.3占空比和分频系数可控分频模块由于50%奇数分频处理起来比其他整数分频麻烦,所以将其作为单独分频模块进行处理,而偶数任意占空比分频和非50%奇数分频作为令一个分频模块进行处理。50%奇数分频的分频时钟为1MHZ,其中fre_in1和cycle_in1为按键键值,这样就达到了分频系数和占空比可控的目的。50%奇数分频模块如图4.4所示:图4.4 50%奇数

15、分频模块非50%奇数和任意占空比偶数分频模块的分频时钟也为1MHZ,其中fre_in 和 cycle_in为按键键值,这样也达到了分频系数和占空比可控的目的。非50%奇数和任意占空比偶数分频模块如图4.5所示:图4.5 非50%奇数和任意占空比偶数分频 3.3 可控分频的实现可控分频系统是由硬件描述语言VHDL 来描述实现的。其系统的各个模块的VHDL程序见附录。由上面的系统结构图可以看出,将各个模块连接起来得到整个的可控分频软件工作过程。四、软硬件的系统测试把写好的VHDL程序进行引脚锁定,综合,适配,编程下载,调试。将FPGA模块、显示模块、按键及电源模块连接好,被分频的时钟频率fpga内

16、部时钟进行分频提供,然后通过JTAG下载模式在线将生成的配置文件写入芯片中。通过不断的反复调试,修改,最终完成本项方案设计。软硬件的系统数据测试结果如附录。五、 心得体会 FPGA 最大的特点就是比较灵活,它可以实现你所需要的任何数字电路,同时也可以制定出各种电路,这样就大大减少了受制于专用芯片的束缚,真正达到了为自己的产品量身定做。FPGA在设计过程中可以灵活的更改,并且它强大的逻辑资源和寄存器资源可以让你轻松的去发挥设计理念,硬件实现的方式可以应对设计中大量的高速电子线路设计需求。在此基础上,我们完全可以不必修改硬件电路,直接通过修改VHDL 源程序,来增加一些新功能,满足不同用户的需要,

17、实现数字系统硬件的软件化。 该可控分频系统的设计过程中,出现的比较麻烦的问题就是利用VHDL语言编写按键模块时,数据类型跟算数运算出现冲突,本身VHDL语言进行乘除运算时限制比较多。我一开始按键数据类型设置为进制数,这样需调用quartusII本身的乘除模块才能实现乘除运算,但没有达到按键模块所要实现的功能。在这问题上浪费了很多时间,最后只有通过改变所以模块上的数据类型,将其改为整型才顺利的完成了所要达到的功能。附录附录测量的数据表分频系数测得频率值/Hz2500.00KHZ3333.33KHZ10100.00KHZ5119.608KHZ10010.000KHZ5011.9960KHZ1000

18、1.0000KHZ2001499.75HZ3000333.33HZ4001249.94HZ5000200.00HZ6001166.64HZ7000142.85HZ8001124.98HZ9000111.11HZ9999100.01HZ附录程序顶层文件设计二分频:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fenpin_2 isport(clk:in std_logic; data:in std_logic_vector(7

19、 downto 0); q:out std_logic);end fenpin_2;architecture one of fenpin_2 is signal data1,data2:std_logic_vector(7 downto 0); signal data3,data4:std_logic_vector(7 downto 0); signal q1,q2,q3:std_logic;begin data1=data-1; data2=0&data1(7)&data1(6)&data1(5)&data1(4)&data1(3)&data1(2)&data1(1)when data(0)

20、=1 else 0&data(7)&data(6)&data(5)&data(4)&data(3)&data(2)&data(1);process(clk) begin if clkevent and clk=1 then if data3data1 then data3=data3+1; else data3=00000000; end if ; end if;end process;process(clk) begin if clkevent and clk=0 then if data4data1 then data4=data4+1; else data4=00000000; end

21、if ; end if;end process;process(data3,data2) begin if(data3data2) then q1=1; else q1=0; end if ;end process;process(data4,data2) begin if(data4data2) then q2=1; else q2=0; end if ;end process;process(q1,q2)begin q3=q1 or q2;end process;q= clk when data=00000001 else q3 when data(0)=1 else q1;end one

22、 ;(1)分频得到1M和10HZ频率library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity clk_b is port(clk: in std_logic; clk1M,clk10: out std_logic);end entity; architecture behave of clk_b is signal clk1,clk3, clk4: std_logic;signal temp1,temp2: integer ra

23、nge 0 to 24; signal temp:integer range 0 to 1249999;begin process(clk)-上升沿 begin if(rising_edge(clk) then if(temp1 24) then temp1 = temp1 + 1; else temp1 = 0; end if; if(temp1 12) then clk3 = 1; else clk3 = 0; end if; end if; end process; process(clk)-下降沿 begin if(falling_edge(clk) then if(temp2 24)

24、 then temp2 = temp2 + 1; else temp2 = 0; end if; if(temp2 12) then clk4 = 1; else clk4 = 0; end if; end if; end process; process(clk)-10HZbeginif clkevent and clk=1 thentemp=temp+1;if temp=1249999 thenclk1=not clk1;temp=0;end if; end if;end process;clk1M = clk3 or clk4; -duty 50% out:1MHzclk10 = clk

25、1;-out10HZend behave;(2)按键跟显示模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;use ieee.numeric_std.all;entity key_fp isport(clk10,rst,en:in std_logic; key_fre:in std_logic_vector(3 downto 0); key_ph:in std_logic_vector(1 downto 0); led_fre1,led_

26、fre2,led_fre3,led_fre4:out integer range 0 to 9; led_ph1,led_ph2:out integer range 0 to 9; out_cycle:out integer range 0 to 9900; out_fre:out integer range 0 to 9999);-std_logic_vector(14 downto 0);end entity;architecture behave of key_fp issignal a1,a2,a3,a4,a5,a6:integer range 0 to 9;-signal q1,q2

27、,q3,q4:integer range 0 to 9;signal duty_out:integer range 1 to 99;signal reg_out:integer range 0 to 9999; beginprocess(clk10,key_fre,rst) beginif rst=1 thena1=0;a2=0;a3=0;a4=0;a5=0;a6=0;-a1=0000;a2=0000;a3=0000;a4=0000;elsif clk10event and clk10=1 thenif (key_fre=0001) thenif a19 then a1=a1+1;else a

28、1=0;end if; end if;if (key_fre=0010) thenif a29 then a2=a2+1;else a2=0;end if; end if;if (key_fre=0100) thenif a39 then a3=a3+1;else a3=0;end if; end if;if (key_fre=1000) then if a49 then a4=a4+1;else a4=0;end if;end if;if (key_ph=01) then if a59 then a5=a5+1; else a5=0;end if; end if;if (key_ph=10)

29、 then if a69 then a6=a6+1; else a6=0;end if; end if;if en=0 thenreg_out= a4*1000+a3*100+a2*10+a1;duty_out= a6*10+a5;end if;end if;end process;led_fre1=a1;led_fre2=a2;led_fre3=a3;led_fre4=a4;led_ph1=a5;led_ph2=a6;out_fre=reg_out;out_cycle=(duty_out*reg_out)/100);-q1=a1;q2=a2;q3=a3;q4=a4;-out4=q1 * 00

30、000000001+q2 * 00000001010+q3 * 00001100100+q4 * 01111101000;end behave;(3) 偶数任意占空比和非50%奇数分频library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity fre_duty is port(clk1M: in std_logic; fre_in:integer range 0 to 9999;cycle_in:integer range 0 t

31、o 9900;fp_out: out std_logic);end entity; architecture behave of fre_duty is signal reg_out: std_logic :=0;signal temp :integer range 0 to 9999;-temp,aa,bb: std_logic_vector(14 downto 0):=000000000000000; begin process(clk1M) begin if(clk1Mevent and clk1M=1) then if(temp fre_in-1) then temp =temp+1; else temp =0;-000000000000000; end if; end if; end process;(4)占空比50%奇数分频library ieee; use ieee.std_logic_1164.all; use ieee.std_logic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论