VHDL作业题目2014(终稿)要点

上传人:奇异 文档编号:213255170 上传时间:2021-11-21 格式:DOCX 页数:30 大小:348.18KB
返回 下载 相关 举报
VHDL作业题目2014(终稿)要点_第1页
第1页 / 共30页
VHDL作业题目2014(终稿)要点_第2页
第2页 / 共30页
VHDL作业题目2014(终稿)要点_第3页
第3页 / 共30页
VHDL作业题目2014(终稿)要点_第4页
第4页 / 共30页
VHDL作业题目2014(终稿)要点_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《VHDL作业题目2014(终稿)要点》由会员分享,可在线阅读,更多相关《VHDL作业题目2014(终稿)要点(30页珍藏版)》请在金锄头文库上搜索。

1、VHDL作业1、写出消抖的程序,通过仿真或下载得出对应的波形,并分析。FPGA对于输入的信号一般都要经过消抖处理,以消除干扰信号。对于两个 设备之间的数据传输,这一点显得尤为重要。消抖一般通过记录脉冲的个数,对输入信号的尖峰宽度进行限制,达不到预 定的宽度,即认为是干扰,必须加以滤除,部分代码如下。因此,信号经过消抖 去除干扰信号以后,必然产生延迟,延迟时间与系统晶振频率以及计数脉冲个数 有关。例如:设系统晶振为 40MHz,消抖时间为 4个CLK, 一个脉冲时间为 1/40M=25ns,所以信号延时为25*4=100ns,如图1所示。时的巴JLJLLL - -干扰尖峰输入信号75J 卜一延时

2、 100nsA消抖后的信号图1信号消抖示意图代码示例:(a)延时 4clkprocess (gclk,rst)一群信号消抖beginif rst=1 thensig_out=0;elsif gclkevent and gclk = 1 thensig_0 = sig_in;sig_1 = sig_0;sig_2 = sig_1;sig_3 = sig_2;if (sig_3 = sig_2) and (sig_2 = sig_1) and (sig_1 = sig_0) and (sig_0 = sig_in) thensig_out = sig_3;end if;end if;end pro

3、cess;仿真结果如图2:Current RiEU(日lionTime! 1 (HM ns,侬100 nsI I I 1 I I 1LJ_200 ns300 ns40(1 I I I I 1 I I I I 1Jn宕&00 ns6&0 ns700 ns800i i i i L.i i i 1 i _i i 1 i i i i Ins900 ns1 1 1 1 1 11止in11111 1闾11丁京 slg_lnQq.丽0tu& period2L.Z 皿 0000A duty_cyd0.5奇X 口传值iaaaa图2消抖程序仿真图(b)延时4msprocess (gclk)beginif rst=

4、1 thensignal_out=0;psignal=0;ppsignal=0;signal_cnt=0;elsif (gclk=1) and (gclkevent) then ppsignal = psignal;psignal = signal_in;if psignal /= ppsignal thensignal_cnt = 0;elsesignal_cnt 159999 then 消抖时间为 4ms-if signal_cnt 99 then signal_out = psignal;end if;end if;end if;end process;仿真结果;图3延时仿真图2、测试在

5、不同主频、分频下逻辑处理上的不同,并分析。分频器是数字系统设计中的基本电路,根据不同设计的需要,我们会遇到偶 数分频、奇数分频、半整数分频等,有时要求等占空比,有时要求非等占空比。 在同一个设计中有时要求多种形式的分频。 通常由计数器或计数器的级联构成各 种形式的偶数分频及非等占空比的奇数分频, 实现较为简单。但对半整数分频及 等占空比的奇数分频实现较为困难。本文利用VHDL硬件描述语言,可设计了一种能够满足上述各种要求的较为通用的分频器。现通过设计一个可以实现8.5分频,等占空比的17分频,2、4、8、16、32 分频,及占空比为1 : 8和4: 5的9分频等多种形式分频的分频器。分频器由带

6、 使能端的异或门、模N计数器和一个2分频器组成,本设计用D触发器来完成2分频的功能,实现方法是:将触发器的 Q反输出端反馈回输入端D,将计数器 的一个计数输出端作为D触发器的时钟输入端。各功能模块的 VHDL语言实现 如下。1) .模N计数器的实现一般设计中用到计数器时,我们可以调用lpm库中的计数器模块,也可 以采用VHDL语言自己设计一个模 N计数器。本设计采用VHDL语言设计一个 最大模值为16的计数器。输入端口为:使能信号 en,复位信号clr和时钟信号 clk;输出端口为:q& qb、qc、qd。其VHDL语言描述略。2) .带使能控制的异或门的实现输入端为:xor_en:异或使能,

7、a和b:异或输入;输出端为:c:异或输 出。当xor_en为高电平时,c输出a和b的异或值。当xor_en为低电平时,c输 出信号bo其VHDL语言略。3) .分频(触发器)的实现输入端为:时钟信号clk,输入信号d;输出端为:q:输出信号a, q1: 输出信号a反。其VHDL语言略。以下是几种分频器的分析:偶数分频器频最易于实现,欲实现占空比为50%的偶数N分频,一般来说有两种方案:, 分频器的基础是计数器,设计分频偶数分 N/2-1时,将输出电平进行一次翻转, 同时给计数器一个复位信号,如此循环下去;二是当计数器输出为0到N/2-1时, 时钟输出为0或1,计数器输出为N/2到N-1时,时钟

8、输出为0或1,计数器输 出为N/2到N-1时,时钟输出为0或1,计数器输出为N-1时,复位计数器,如 此循环下去。图4偶数分频仿真结果图图5偶数分频仿真结果图奇数分频器实现非50%占空比的奇数分频,如占空比为 20%、40%、60%、80%的5 分频器,可以采用类似偶数分频的第二种方案; 但如果实现占空比为50%的奇数 分频,就不能使用偶数分频中所采用的方案了。下面就以实现占空比40%的5分频分频器为例,说明非50%占空比的奇数分 频器的实现。该分频器的实现对于我们实现50%占空比的分频器有一定的借鉴意 义。一下是奇数分频仿真结果图。图6占空比为40%的5分频仿真波形ffi-半整数分频器仅仅采

9、用数字分频,不可能获得占空比为 50%的N+0.5分频,我们只可以设计 出占空比为(M+0.5)/(N+0.5)或者M/(N+0.5)的分频器,M小于N。这种半整数分 频方法是对输入时钟进行操作,让计数器计数到某一个数值时,将输入时钟电平 进行一次反转,这样,该计数值只保持了半个时钟周期,因此实现半整数分频。如上所述,占空比为50%的奇数分频可以帮助我们实现半整数分频,将占空 比为50%的奇数分频与待分频时钟异或得到计数脉冲,下面的代码就是依靠占空 比为50%的5分频实现2.5分频器的。仿真结果如图所示。J*d *Aju比11 nB/agiMuHe出FcX-MJbM廿El2J ,冷_振,1_n

10、* -ZtK_dM_bAul/a41 J FdjMjbgMZ J 牡#L4AjuAW 3 FcfcjkLBWcU “ Fdc_dk1JbAjwlA)clJ /k_i!kl_ifa/uLlM.图7 2.5分频仿真波形小数分频器小数分频是通过可变分频和多次平均的方法实现的。例如要实现 4.7分频,只要 在10次分频中,做7次5分频,3次4分频就可以得到。再如要实现5.67分频, 只要在100次分频中,做67 6分频,33次5分频即可。考虑到小数分频器要进 行多次两种频率的分频,必须设法将两种分频均匀。表1以2.7分频为例,小数部分进行累加,如果大于等于10,则进行3分频,如果小于10,进行2分频。

11、仿真波形如图 所示,我们可以清楚的看到2.7分频的实现。按照占空比的定 义,该分频器的占空比应为10/27图8 2.7分频仿真波形分数分频器将小数分频的方法进行扩展,可以得到形如M*(L/N)的分数分频的方法,例如,2*(7/13)等于分母的,进行分频,只要在13次分频中,进行7次3分频, 6次2分频就可以得到。同样,为了将两种分频均匀,将分子部分累加,小于分 母的,进行M分频,大于(M+1)分频。表2显示了 2*(7/13)的分频次序。仿真波形如图11所示。显然,该分频器的占空比为 13/33。图9 33/13分频器仿真波形积分分频器积分分频器用于实现形如 之的分频,例如8/3分频。我们当然

12、可以使用上面 N提到的分数分频的方法,但对于这种形式的分频,使用积分分频的方法综合往往占用更少的FPGA资源。积分分频法基于下述原理:一个 m位的二进制数字每次累加N,假定累加x次累加值最低 m位回到0,同时超过2my次,那么,当前累加的数字应该是Nx=2my ;每越过2m一次,最高位变化2次,所以,累加x次,最高位变化2yx 2m次,得到 区=分频的分频器,例如,取 m为4, N为3,当累加16次时,2y N累加值为48,最低m位变回到0,同时越过16三次,最高位变化6次,由此得 到16/6=8/3分频的分频器。分频仿真结果如图所示图10积分分频仿真波形3、写出异步串行通信的发送与接收程序,

13、并分析 。异步串行数据传输具有设计简单、传输稳定等优点。具两个主要参数是波特 率和数据位格式。数据位格式又称帧格式,一般包含一个起始位(逻辑0), 一个终止位(逻辑1)以及校验位。在发送空闲时,总线一般处于逻辑 1状态。这 样当接收端检测到总线上由高到低的电平跳变,即认为是数据开始传输。波特率 是用来约定通信双方的通信速率, 一般通过对系统时钟进行分频来实现,RS-232 协议中,常用的波特率有 11520R 9600等,RS-422与RS-232原理基本相同, 只是在传输线路上,为了抗干扰,采用了差分方式。在FPGA应用领域,串行数据传输一般采用422总线。通过对系统晶振分 频,得到对应的波

14、特率,比如对 40MHz经行4分频,得到10MBit的传输速率。 解码端会根据预先设定的波特率,对时钟进行分频,每隔相等时间读取总线上的 一位数据。流程如下:在检测到起始位低电平之后,接收端(即解码端)每隔一 位时间,采集总线上的电平,并写入移位寄存器中,直到将一帧数据全部接收, 然后判断校验位,如果正确,则接收、编帧,否则,丢弃。由于受温度等因素的影响,晶振会产生误差,串行数据在传输过程中,可能 会受到干扰而产生毛刺。所以在一些对数据准确度要求比较高的场合, 就得考虑 申行数据传输的容错能力。对于这种情况,第一种方法通常会采取对总线上的一 位分别采集三次,比较得到的三个电平,进而得到该位可信

15、度更高的值,如图 2 所示;第二种方法则会将电平的采集点放在每一位的靠近中间的位置,通过计算晶振的最大误差,则可以计算出系统的最大容错能力。设晶振误差 5%,频率为 40MHz, 1/40MHz=25ns,25*0.05=1.25ns设波特率为 4Mbit/s,所以又t于 40bit一帧的串行数据,累积误差最大会有 1.25*40*4*50%=100ns,而比特位宽只有100ns, 所以有可能会发生错位。波特率9600三次采样图11多次采样减小误差示意图部分代码如下(a) 422串行发送process (pClock, pReset)beginif pReset = 1 then-惯组信号源控制主进程

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号