ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:440.80KB ,
资源ID:20405087      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20405087.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(EDA四位十进制频率计课程设计报告解析Word格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

EDA四位十进制频率计课程设计报告解析Word格式.docx

1、2、四位十进制频率计顶层文件原理图如下: 图3.2 顶层文件生成4位十进制频率计外部接口图3、本设计中重要端口说明:Clk_1hz: 给Tctl模块提供1hz的频率输入。Fin;被测频率输入。scan_led:给scan_led模块提供扫描输入频率输入。bt1.0:片选信号输出。Sg6.0:译码信号输出。Cout:进位输出四、各个模块的设计说明及设计步骤1、顶层文件原理图设计: 图 4.1 顶层文件原理图2、x4Cnt10 模块说明x4Cnt10为含异步清零和同步时钟使能的十进制计数器,采用级联的方法进行计数,计数范围与所用x4cnt10级联个数有关,本次设计采用的是4个cnt10的级联,所有

2、测频范围是09999hz。仿真时序图如下: 图 4.2 x4Cnt10仿真波形图3、 Tctl 模块说明根据频率的定义和测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器信号和为下一测频计数周期做准备的计数器清零信号。这三个信号可以由一个测频控制信号发生器Tctl产生,其设计要求是Tctl的计数使能信号en能产生一个一秒脉宽的周期信号,并且对频率计的每一计数器cnt10的en使能进行同步控制,当en高定平时,允许继续:低电平时停止计数,并保持其所计数的脉冲数,在停止计数期间,首先需要一个锁存信号load的上升沿将计数器前一秒钟的计

3、数值锁存进各锁存器reg16中,并由外部的译码器译出并显示计数值,锁存信号之后,必须有一个清零信号rst对计数器进行清零,为下一秒的计数操作做准备。控制模块Tctl时序仿真: 图4.3 频率计测频控制器Tctl侧可控时序图图中clk的频率为1hz,en的高电平程序时间为1秒,此时计数器开始工作,当en低电平时停止计数,并将计数值经过load锁存的reg16中最后通过scan_led译码器显示输入,en的计时长度为一秒,即en的周期为2秒,计数器在en高电平计数完成即en从高电平跳跃到低电平时将计数结果锁存在reg16中,rst在满足clk和en均为低电平的时候对已锁存入锁存器的计数信号进行清零

4、工作,为下一个计数周期作准备。4、锁存器reg16模块的说明设置锁存器的目的是使显示的数据稳定,不会由于周期性的清零信号而不断闪烁,每次显示数据位上一计数周期锁存的计数值。 Reg16锁存器时序仿真图: 图4.4 reg16锁存器仿真波形图5、scan_led 模块说明动态显示是把所有的led管的输入信号连在一起,每次向LED写数据时,通过片选信号选通其中一个Led管并把数据写入,因此每一个时刻只有一个Led是亮的。为了能够程序看到led上面的显示内容,必须对led管进行扫描,即一次循环点亮各个led管,利用人眼的视觉暂留,加上发光器件的余晖效益,在一定的扫描频率下,人眼就会看到多个led管一

5、起点亮。扫描的大小必须合适才能达到很好的效果。如果扫描频率太低,就会产生闪烁;而扫描频率太高会造成Led的频率开启和关断,增加led的功耗。通常扫描频率选择50Hz比较合适。本次设计为4为led动态扫描输出,clkwie扫描时钟,考虑到cnt8的分频作用,此时设计采用的频率为200hz:sg6.0为当前正在显示的led地址的已译码数据;bt1.0为输出的片选信号,决定某led在某时某刻显示数据:din15.0为4为一组的bcd码,共4位供显示输出的数据输入,scan_led的内部以下三个进程:计数模块扫描时钟发生器,多路选通器模块和译码模块。led动态扫描输出scan_led时序仿真图; 图4

6、.5 动态扫描仿真波形图Clk_1hz输入周期为1hz;Fin为测量频率,频率范围是100-9999hz,此次波形仿真设计时间为1khz;Clk为扫描时钟,周期为200hz;Sg为输出led七段显示译码结果,bt为输出片选信号,由波形仿真图可以看出片选0(00)时led显示为0,片选1(01)时led显示为0,片选2(10)时led显示为0,片选3(11)时led显示为1;即此时频率计计数频率为1000hz,与实际输入频率相同。Clk_1hz的1hz输入频率通过DE2内部clock_50的50M晶振分频来实现。输入频率信号和扫描频率也由50M晶振分频得到,又由于仿真设计中采用的是一个led现实

7、动态数据,所以下载到DE2板上是还要进行动态显示电路的设计。6、分频器:(可以通过改变不同的cout值来进行不同的分频)分频器时序仿真图:图4.6 分频仿真波形图7、动态显示时序仿真图 图4.7 动态显示仿真波形8、调用各子模块编译仿真,时序仿真图如下 图4.8 调用各子模块时序仿真图9、编译仿真完成后,定义管脚,如下图所示: 图4.9 引脚定义10、定义完引脚后,开始下载设计文件,在试验箱进行硬件测试并完善设计。11、预测结果:试验箱选择模式6,1HZ测频控制信号由clock0输入控制,待测信号由clock5输入,可选择相应的频率值,在数码管显示器上显示相应的频率值。五、总结通过这次的eda

8、设计使我更加的了解了vhdl语言的应用,由于书上设计的是由数码管进行动态显示,但是这种情况下不利于读取数据,所以我们后来设计成由四个七段数码管静态输出结果的方式,但书上没有源程序可以参考,所以只能通过自己在网上查找资料并尝试,在这其过程中出现了很多错误,我们一步步更改,要求我们修改编写程序时要细心,谨防出现细小的错误。尤其是实用语句的时候要考虑全面,不能前面写过忘记结尾,例如在使用if语句时要注意end if的个数与前相对应,不能少也不能多。在设计时还要考虑到设计引脚是否能够在试验箱上找到。最后在老师的指导下我们总算是顺利地完成了这次的课程设计。参考文献1 潘松,黄继业.EDA技术实用教程(第

9、二版).科学出版社,1998。2 宋万杰,罗丰,吴顺军.CPLD技术及其应用.西安:西安电子科技大学出版社,1999。3 徐志军 王金明.EDA技术与PLD设计.人民邮电出版社。4 康华光.电子技术基础(数字部分).高等教育出版社。5XX文科4位十进制频率计设计。附录:四位十进制频率计顶层文件源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dc isport(fin,clk_1hz:in std_logic; ledout:out std_logic_vector(27

10、downto 0);end dc;architecture one of dc iscomponent Tct1 -Tct1元件声明 port( clk: in std_logic; en,rst,load :out std_logic);end component;component x4cnt10 -x4cnt10元件声明port(clk,rst,en: q0,q1,q2,q3 :out std_logic_vector(3 downto 0); cout:component reg16 -reg16元件声明 port(load: di : in std_logic_vector(15 d

11、ownto 0); dout : out std_logic_vector(15 downto 0) );component scan_led -scan_led元件声明port(din: sg :out std_logic_vector(6 downto 0); bt: out std_logic_vector(1 downto 0);signal x,z,f:std_logic;signal h:std_logic_vector(3 downto 0);signal g0,g1,g2,g3:signal h0,h1,h2,h3:signal leds:std_logic_vector(27

12、 downto 0);begin -元件例化产生电路,完成设计u1: Tct1 port map(clk=clk_1hz, en=x,rst=z,load=f);u2: x4cnt10 port map(clk=fin,rst=z,en=x,q0=g0,q1=g1,q2=g2,q3=g3);u3:reg16 port map(load=f,di(3 downto 0)=g0,di(7 downto 4)=g1,di(11 downto 8)=g2,di(15 downto 12)=g3,dout(3 downto 0)=h0,dout(7 downto 4)=h1,dout(11 downto

13、 8)=h2,dout(15 downto 12)=h3);u4: scan_led port map(din(3 downto 0)=h0(3 downto 0),sg(6 downto 0)=leds(6 downto 0);u5: scan_led port map(din(7 downto 4)=h1(3 downto 0),sg(6 downto 0)=leds(13 downto 7);u6: scan_led port map(din(11 downto 8)=h2(3 downto 0),sg(6 downto 0)=leds(20 downto 14);u7: scan_le

14、d port map(din(15 downto 12)=h3(3 downto 0),sg(6 downto 0)=leds(27 downto 21);ledout=leds;end;计数模块x4cnt10的源代码程序:entity x4cnt10 isport(clk,rst,ena: -端口定义 buffer std_logic_vector(3 downto 0); -分别定义四个计 数端口,用于4 end x4cnt10; 个cnt10的设计 architecture three of x4cnt10 issignal en1,en2,en3 : std_logic; -使能信号声

15、明beginprocess(clk,rst,ena,q0) -控制q0端的十进制计数if rst=1 then q0 = 0000; elsif clkevent and clk= then if ena= if q0=1001 then q0=else q0=q0+1;end if; end if; then en1 = else en1 0 end process;process(clk,rst,en1,q1) -控制q1端的十进制计数 begin if rst= then q1 if en1= if q1= then q1else q1=q1+1; then en2 else en2 p

16、rocess(clk,rst,en2,q2) -控制q2端的十进制计数 then q2 if en2= and en1=then if q2= then q2else q2=q2+1; then en3 else en3 process(clk,rst,en3,q3) -控制q3端的十进制计数 then q3 if en3= and en2= if q3= then q3else q3=q3+1; then cout else coutend three; -将设计元x4cnt10的声明装入my_pkg程序包中package my_pkg1 iscomponent x4cnt10 end co

17、mponent; end;控制模块Tctl源代码程序;Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity Tct1 is Port(clk: -端口定义 ena,rst,load: End Tct1;Architecture one of Tct1 is Signal divclk : -divclk信号声明BeginProcess(clk)if clk then divclk=not divclk; -clk上升沿时,divclk取反end if ;End process;Proces

18、s(clk,divclk)If clk= and divclk= then -clk和divclk同时为0时,rst置1,否则rst清0rstElse rstEnd if;Load -将divclk取反赋值到load端,将divclk的值赋给enaena=divclk;end one;Reg16锁存器源代码程序:Entity reg16 is Port(load: -端口定义 din:in std_logic_vector(15 downto 0); dout:out std_logic_vector(15 downto 0);End reg16;Architecture one of reg

19、16 is Process(load,din)if(loadevent and load=) then -load为上升沿时,把din值锁存到dout中doutbtqnull;end case;end process p1;p2: process(clk) -计数模块扫描时钟发生器begin -时钟信号clk有效上升沿时,cnt8开始计数 then cnt8=cnt8+1;end process p2;p3: process(q) -译码模块case q(3 downto 0) is -通过q的值来选择sg的 led地址的已译码数据sg01111110001000011000101011011

20、0011100111101001100110010111011010110111110101110000111100011111111101111end process p3;分频的主要源程序:Entity count is Port(clk50: qlk:End count;Architecture one of count is HZ:process(clk50)Variable cout:integer:=0; -设置变量cout,且其初值为0If clk50event and clk50= then -时钟信号clk50上升沿时,cout值就增1cout:=cout+1;If cout=24999 then qlk -cout=249999时,qlk置0Else if cout=49999 then qlk -24999cout=49999时,qlk置1Else c

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1