




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VHDL作业1、写出消抖的程序,通过仿真或下载得出对应的波形,并分析。FPGA对于输入的信号一般都要经过消抖处理,以消除干扰信号。对于两个 设备之间的数据传输,这一点显得尤为重要。消抖一般通过记录脉冲的个数,对输入信号的尖峰宽度进行限制,达不到预 定的宽度,即认为是干扰,必须加以滤除,部分代码如下。因此,信号经过消抖 去除干扰信号以后,必然产生延迟,延迟时间与系统晶振频率以及计数脉冲个数 有关。例如:设系统晶振为 40MHz,消抖时间为 4个CLK,一个脉冲时间为 1/40M=25ns,所以信号延时为25*4=100ns,如图1所示。时眦LKUIIUL十-一 干扰尖峰 / n,丿 输入信号I
2、_ |_J U 1 IX /* *吗 延时 100ns_卜I消抖后的信号图1信号消抖示意图代码示例:(a)延时 4clkprocess (gclk,rst)-群信号消抖begi nif rst=1 thensig_out=0;elsif gclkevent and gclk = 1 thensig_0 = sig_i n;sig_1 = sig_0;sig_2=sig_i;sig_3 = sig_2;if (sig_3 = sig_2) and (sig_2 = sig_1) and (sig_1 = sig_0) and (sig_0 = sig_i n) the nsig_out = si
3、g_3;end if;end if;end process;仿真结果如图2:图2消抖程序仿真图(b)延时4msprocess (gclk)begi nif rst=1 thensig nal_out=0;psig nal二0;ppsig nal=0;sig nal_c nt=0;elsif (gclk=1) and (gclkevent) thenppsig nal = psig nal; psig nal = sig nal_in;if psig nal /= ppsig nal the nsig nal_c nt = 0;elsesig nal_c nt 159999 then 消抖时间为
4、 4ms-if sig nal_cnt 99 the nsig nal_out = psig nal;end if;end if;end if;end process;仿真结果;Ctamfle tnJwlanTMK 1WM FW100勒M304 n*40Q hb樂nWasTO 1 1 1 1 J. J 1 I 1 11 _LJ_l 1 1 1 L_iffel弭CfW1 Ll L 1 1 II 11 1 1. e 呷Itii.申曲 wm: 图3延时仿真图2、测试在不同主频、分频下逻辑处理上的不同,并分析。分频器是数字系统设计中的基本电路,根据不同设计的需要,我们会遇到偶 数分频、奇数分频、半整数
5、分频等,有时要求等占空比,有时要求非等占空比。 在同一个设计中有时要求多种形式的分频。 通常由计数器或计数器的级联构成各 种形式的偶数分频及非等占空比的奇数分频, 实现较为简单。但对半整数分频及 等占空比的奇数分频实现较为困难。本文利用VHDL硬件描述语言,可设计了一种能够满足上述各种要求的较为通用的分频器。现通过设计一个可以实现8.5分频,等占空比的17分频,2、4、& 16、32 分频,及占空比为1 : 8和4: 5的9分频等多种形式分频的分频器。分频器由带 使能端的异或门、模N计数器和一个2分频器组成,本设计用D触发器来完成 2分频的功能,实现方法是:将触发器的 Q反输出端反馈回输入端D
6、,将计数器 的一个计数输出端作为D触发器的时钟输入端。各功能模块的 VHDL语言实现 如下。1) .模N计数器的实现一般设计中用到计数器时,我们可以调用lpm库中的计数器模块,也可 以采用VHDL语言自己设计一个模 N计数器。本设计采用VHDL语言设计一个 最大模值为16的计数器。输入端口为:使能信号 en,复位信号clr和时钟信号 elk;输出端口为:qa qb、qc、qd。其VHDL语言描述略。2) .带使能控制的异或门的实现输入端为:xor_en:异或使能,a和b:异或输入;输出端为:c:异或输 出。当xor_en为高电平时,c输出a和b的异或值。当xor_en为低电平时,c输 出信号b
7、。其VHDL语言略。3) .分频(触发器)的实现输入端为:时钟信号clk,输入信号d;输出端为:q:输出信号a,q1: 输出信号a反。其VHDL语言略。以下是几种分频器的分析:偶数分频器频最易于实现,欲实现占空比为50%的偶数N分频,一般来说有两种方案:, 分频器的基础是计数器,设计分频偶数分 N/2-1时,将输出电平进行一次翻转, 同时给计数器一个复位信号,如此循环下去;二是当计数器输出为0到N/2-1时, 时钟输出为0或1,计数器输出为N/2到N-1时,时钟输出为0或1,计数器输图5偶数分频仿真结果图奇数分频器实现非50%占空比的奇数分频,如占空比为 20%、40%、60%、80%的5分频
8、器,可以采用类似偶数分频的第二种方案; 但如果实现占空比为50%的奇数 分频,就不能使用偶数分频中所采用的方案了。下面就以实现占空比40%的5分频分频器为例,说明非50%占空比的奇数分频器的实现。该分频器的实现对于我们实现50%占空比的分频器有一定的借鉴意义。一下是奇数分频仿真结果图0fi-1 化卸少3融uuU* 矗mijhzj血1图6占空比为40%的5分频仿真波形半整数分频器仅仅采用数字分频,不可能获得占空比为 50%的N+0.5分频,我们只可以设计 出占空比为(M+0.5)/(N+0.5)或者M/(N+0.5)的分频器,M小于N。这种半整数分 频方法是对输入时钟进行操作,让计数器计数到某一
9、个数值时,将输入时钟电平 进行一次反转,这样,该计数值只保持了半个时钟周期,因此实现半整数分频。图72.5分频仿真波形如上所述,占空比为50%的奇数分频可以帮助我们实现半整数分频,将占空 比为50%的奇数分频与待分频时钟异或得到计数脉冲,下面的代码就是依靠占空 比为50%的5分频实现2.5分频器的。仿真结果如图所示。:一4*1 _taJdIuWjMmMM ck.4r1.MaMj! ei._-dhr1_ faAajipdh rb,*d,lbAjiJAiikl* .a _fcAwirt0k_Wi小数分频器小数分频是通过可变分频和多次平均的方法实现的。例如要实现4.7分频,只要在10次分频中,做7次
10、5分频,3次4分频就可以得到。再如要实现5.67分频, 只要在100次分频中,做67 6分频,33次5分频即可。考虑到小数分频器要进 行多次两种频率的分频,必须设法将两种分频均匀。表1以2.7分频为例,小数部分进行累加,如果大于等于10,则进行3分频,如果小于10,进行2分频。仿真波形如图 所示,我们可以清楚的看到2.7分频的实现。按照占空比的定 义,该分频器的占空比应为10/27m! k分数分频器将小数分频的方法进行扩展,可以得到形如M*(L/N)的分数分频的方法,例如,2*(7/13)等于分母的,进行分频,只要在13次分频中,进行7次3分频, 6次2分频就可以得到。同样,为了将两种分频均匀
11、,将分子部分累加,小于分 母的,进行M分频,大于(M+1)分频。表2显示了 2*(7/13)的分频次序。仿真波形如图11所示。显然,该分频器的占空比为 13/33。图9 33/13分频器仿真波形积分分频器积分分频器用于实现形如 二的分频,例如8/3分频。我们当然可以使用上面N提到的分数分频的方法,但对于这种形式的分频,使用积分分频的方法综合往往 占用更少的FPGA资源。积分分频法基于下述原理:一个 m位的二进制数字每次累加N,假定累加x 次累加值最低 m位回到0,同时超过2my次,那么,当前累加的数字应该是Nx 2my ;每越过2m一次,最高位变化2 次,所以,累加x 次,最高位变化2y 累加
12、值为48,最低m位变回到0,同时越过16三次,最高位变化6次,由此得次,得到2y N分频的分频器,例如,取m为4,N为3,当累加16次时,到16/6=8/3分频的分频器。分频仿真结果如图所示。图10积分分频仿真波形3、写出异步串行通信的发送与接收程序,并分析 。异步串行数据传输具有设计简单、传输稳定等优点。其两个主要参数是波特 率和数据位格式。数据位格式又称帧格式,一般包含一个起始位(逻辑0),个终止位(逻辑1)以及校验位。在发送空闲时,总线一般处于逻辑1状态。这样当接收端检测到总线上由高到低的电平跳变,即认为是数据开始传输。波特率 是用来约定通信双方的通信速率, 一般通过对系统时钟进行分频来
13、实现,RS-232 协议中,常用的波特率有 115200 9600等,RS-422与RS-232原理基本相同, 只是在传输线路上,为了抗干扰,采用了差分方式。在FPGA应用领域,串行数据传输一般采用422总线。通过对系统晶振分 频,得到对应的波特率,比如对 40MHz经行4分频,得到10MBit的传输速率。 解码端会根据预先设定的波特率,对时钟进行分频,每隔相等时间读取总线上的 一位数据。流程如下:在检测到起始位低电平之后,接收端(即解码端)每隔一 位时间,采集总线上的电平,并写入移位寄存器中,直到将一帧数据全部接收, 然后判断校验位,如果正确,则接收、编帧,否则,丢弃。由于受温度等因素的影响
14、,晶振会产生误差,串行数据在传输过程中,可能 会受到干扰而产生毛刺。所以在一些对数据准确度要求比较高的场合,就得考虑串行数据传输的容错能力。对于这种情况,第一种方法通常会采取对总线上的一 位分别采集三次,比较得到的三个电平,进而得到该位可信度更高的值,如图2所示;第二种方法则会将电平的采集点放在每一位的靠近中间的位置,通过计算晶振的最大误差,则可以计算出系统的最大容错能力。设晶振误差5%,频率为 40MHz,1/40MHz=25ns,25*0.05=1.25ns设波特率为 4Mbit/s,所以对于 40bit 帧 的串行数据,累积误差最大会有 1.25*40*4*50%=100 ns,而比特位
15、宽只有100 ns, 所以有可能会发生错位。波特率9600 川 山_川丨丨口 川三次采样图ii多次采样减小误差示意图部分代码如下(a) 422串行发送process (pCIock, pReset)-惯组信号源控制主进程beg inif pReset = 1 the nch_ClearBusyFlag = 1;ch_tx = 1;ch_send_reg =0000000000000000000000000000000000000000;ch_st = 0;ch_clock_fp = 0;elsif (pClock=1) and (pClockeve nt) the nif ch_st = 0
16、then-监测有无数据发送if (ch_s_busy_flag = 1) the nch_send_reg = ch_send_buf;-读取要发送的数到寄存器 ch_ClearBusyFlag = 0;-置忙标志清零 ch_bit_co un ter = 0;ch_clock_fp = 0;ch_st = 1;elsech_st = 0;end if;elsif ch_st = 1 then-串行发送-0 - 57, 每位 57 个ch_clock_fp = ch_clock_fp + 1;时钟,共 12 位,1起始, 1 停止, 2空闲if ch_clock_fp = 1 thench_t
17、x = ch_send_reg(39 - ch_bit_counter); elsif ch_clock_fp = 2 thenif ch_bit_counter = 39 thench_tx = 1;ch_st = 0;-跳转到监测 busy 标志,等待发送下一个数elsech_bit_counter = ch_bit_counter + 1; end if;elsif ch_clock_fp = 3 then if ch_bit_counter = 5 then ch_ClearBusyFlag = 1;-忙标志清零结束,4个elk,希望前一进程不会监测丢失end if;end if;en
18、d if;end if;end proeess;(b) 422串行接收*-命令接收主控制进程 * 异步接收, 40 位proeess (gCloek_160, g_reset) -flag=1 时,串并转换完成, beginif g_reset = 1 thenflag = 1;elsif (gCloek_160=1) and (gCloek_160event) thenif ent = 180 then -161到180等待发送进程取走 send_buf中的 数去发送flag = 1;elsif rx = 0 thenflag = 0;end if;end if;end proeess;pr
19、ocess (gClock_160, g_reset)-160MHz 采样 40Mbps,每个位采样4个点,40个位cnt计数达到160beginif g_reset = 1 thensoft_reset = 0;cnt = 0;RcvBuf = 0000000000000000000000000000000000000000; tmp_data = 0000000000000000000000000000000000000000; REG_WR_PIPE_ADD = 1111111111111111;REG_ID = 1111111100000001;led_show=1;elsif (gC
20、lock_160=1) and (gClock_160event) then - led_show= not led_show;if flag = 1 thencnt = 0; verify = 0;elsif flag = 0 then cnt = cnt + 1;end if;if cnt =1 thentmp_data(0)=rx;elsif cnt =5 or cnt = 9 or cnt =13 or cnt = 17 orcnt = 21 or cnt = 25 or cnt = 29 or cnt = 33 or cnt = 37 or cnt = 41 or cnt = 45
21、or cnt = 49 or cnt = 53 or cnt = 57 or cnt = 61 or cnt = 65 or cnt = 69 or cnt = 73 or cnt = 77 or cnt = 81 or cnt = 85 or cnt = 89 or cnt = 93 or cnt = 97 or cnt = 101 or cnt =105 or cnt =109 or cnt =113 or cnt = 117 or cnt =121 or cnt =125 or cnt =129 or cnt =133 or cnt = 137 or cnt = 141 or cnt =
22、 145 or cnt = 149 or cnt = 153 or cnt = 157 then -先发高位verify = verify xor rx;tmp_data(0)=rx;for I in 1 to 39 looptmp_data(I)= tmp_data(I-1);end loop;elsif (cnt = 160) and (tmp_data(39) = 0) and (tmp_data(1) = 1)and (tmp_data(0) = 1) then-判断起始停止位RcvBuf = tmp_data;wr_ch_add = CONV_INTEGER(REG_WR_PIPE_
23、ADD(2downto 0);FCA = CONV_INTEGER(tmp_data(36 downto 29);CA = CONV_INTEGER(tmp_data(31 downto 29);RW = tmp_data(28);RA = CONV_INTEGER(tmp_data(27 downto 21);CMD = tmp_data(20 downto 5);elsif (cnt = 161) and (verify = 0) and (RcvBuf(38) = notRcvBuf(4) and (RcvBuf(37) = not RcvBuf(3) then 接收数据测试用后删除 R
24、cvFlag_change = not RcvFlag_change;RcvFlag = RcvFlag_change;- 接收数据翻转testch = tmp_data(31 downto 29); -接收数据通道显示 led_show= not led_show; if RcvBuf(38) = 0 then数据流,转发对应管道if (CONV_INTEGER(REG_WR_PIPE_ADD) 16) and(REG_WR_CH_BUSY(wr_ch_add) = 0) thensend_buf(wr_ch_add) = RcvBuf; REG_WR_CH_BUSY(wr_ch_add)
25、= 1;-相应通道置忙,不允许再写入end if;elsif RcvBuf(38 downto 37) = 11 then-解析命令if FCA /= 255 then-发送给 16 个通道的命令if (CA 16) and (REG_WR_CH_BUSY(CA) = 0) then-如果忙,将丢失此包,否则送给某个端口send_buf(CA) = RcvBuf; REG_WR_CH_BUSY(CA) when 1 =-立即执行if CMD=0000000011000000 then-resetsoft_reset REG_WR_PIPE_ADD REG_RD_PIPE_ADD if (por
26、t_busy = 0) thenport_send_buf = 010111111111 & RcvBuf(27 downto 21) & 111100000000111101011; -失败port_busy - read idif (port_busy = 0) thenport_send_buf = 0101111111100000000 & REG_ID & 01011;port_busy when 2 =if (port_busy = 0) thenport_send_buf = 0101111111100000010 & REG_WR_PIPE_ADD & 01011;port_b
27、usy if (port_busy = 0) thenport_send_buf = 0101111111100000011 & REG_RD_PIPE_ADD & 01011;port_busy if (port_busy = 0) thenport_send_buf = 0101111111100000100 & REG_WR_CH_BUSY & 01011;port_busy if (port_busy = 0) thenport_send_buf = 010111111110 & RcvBuf(27 downto 21) & 111101010000101001011;-失败port_
28、busy = 1;end if;end case;end if;end if;-解析命令完成*end if;elsif cnt 160 thenREG_WR_CH_BUSY = REG_WR_CH_BUSY and (00000000 & ClearSndFlag_16ch);-清除 16 个通道忙标志port_busy = port_busy and port_ClearBusyFlag; - 清除主通道忙标志 end if;end if;end process;仿真结果:4、写出PCM通信的发送与接收程序,并分析。PCM脉冲编码调制是将模拟信号转换成二进制数字信号的编码过程。在无线遥测系统
29、中,遥测采编器对多路模拟信号通过特定的顺序(帧结构)进行模数转 换采样,然后再将采得的PCM码并串转换,串行送至无线发射机发射。地面站 通过无线接收机接收。解码后的 PCM码是一个由二进制数构成的串行序列。地 面接收设备的主要任务是将串行 PCM码中的数据解调出来,这就需要根据PCM 码流中特定的同步码确定数据的起始位,在位信号变化时的上升沿(或下降沿) 把PCM码流的位同步信号分离出来,再通过串行数据到并行数据的转换把数据 并行输出。PCM码的串并转换分为三步,第一步是提取同步信号,第二步是提取帧同 步信号,第三步是根据已得到的位同步和帧同步完成字同步和串并转换。PCM码在发送以及接收(解码
30、)过程中,都会用帧同步和码同步对 PCM码 进行同步,有些还会用到路同步信号,如图 13所示。一般是PCM码接收端发 送同步信号(即帧同步、码同步和路同步)。PCM码发送端根据接收到的同步信 号输出PCM码,比如在码同步的上升沿或者下降沿给出数据,接收端则根据自 己发出的同步信号接收PCM码。在实际数据传输过程中,考虑到信号的延时, 一般发送端在码同步上升沿给出 PCM数据,接收端在码同步下降沿读取 PCM 数据,而帧同步一般用作帧复位,路同步用作字节复位,如图14所示。接收端接收到PCM数据后,一般要经过编帧,加上帧头、帧尾以及帧计数, 然后上传给计算机。计算机则将数据解包,提取出有用的信息
31、。图13 PCM码接收发送过程中的信号示意图发送端码同步接收端码同步图14同步信号示意图部分参考代码:(a帧同步、路同步、码同步信号的产生process(gclk, rst)分频得到码同步时钟,3.05008us x 2=6.10016us 要求是6.1035usbegi nif rst = 1 thengclk_c nt=0;gclk_3us=60 thengclk_c nt=0;gclk_3us= not gclk_3us;else gclk_cnt=gclk_cnt+1;end if;end if;end process;process(gclk_3us, rst) 帧同步、码同步、路同
32、步信号产生begin if rst=1 then f_ztb=0;f_ltb=1;f_mtb=0;cnt2=0;cnt1=0;pcm_state ztb 上升沿与 mtb 下降沿对齐,路同步延迟一个周期后,开始发送码同步f_ztb=1;f_ltb=0;if cnt1=4 thencnt1=0; pcm_state=pst1;elsecnt1=cnt1+1; pcm_statef_ztb=0;if cnt1=2 thenpcm_state=pst2; cnt1=0;elsecnt1=cnt1+1;pcm_statef_ltb=1;if cnt1=7 thenpcm_state=pst3; cnt
33、1=0;elsecnt1=cnt1+1;pcm_statef_ltb=0;f_mtb=1; 1pcm_statef_mtb=0; pcm_statef_mtb=1; 2pcm_statef_mtb=0; pcm_statef_mtb=1; 3pcm_statef_mtb=0; pcm_statef_mtb=1; 4pcm_statef_mtb=0; pcm_statef_ltb=1;f_mtb=1; 5pcm_statef_mtb=0; pcm_statef_mtb=1; 6pcm_statef_mtb=0; pcm_statef_mtb=1; 7pcm_statef_mtb=0;pcm_st
34、atef_mtb=1; 8pcm_statef_mtb=0;pcm_state f_mtb 保持低,再产生 3 个周期的 f_ltbf_ltb=0; 第 2个 f_ltbif cnt1=7 then cnt1=0; pcm_state=pst20;else cnt1=cnt1+1; pcm_state f_ltb=1;if cnt1=7 then cnt1=0; pcm_state=pst21;else cnt1=cnt1+1; pcm_statef_ltb=0;第 3 个 f_ltbif cnt1=7 thencnt1=0;pcm_state=pst22;elsecnt1=cnt1+1;pc
35、m_statef_ltb=1;if cnt1=7 thencnt1=0;if cnt2=127 then 循环 128 次,产生 128路 f_mtbcnt2=0;pcm_state=pst0;elsecnt2=cnt2+1;pcm_state=pst23;end if;elsecnt1=cnt1+1; pcm_state f_ltb=0; 第 4个 f_ltbif cnt1=7 then cnt1=0;pcm_state=pst24;else cnt1=cnt1+1; pcm_state f_ltb=1;if cnt1=7 thencnt1=0;pcm_state=pst3;elsecnt1
36、=cnt1+1; pcm_statepcm_state=pst0;end case;end if;end process;(b) PCM 码接收process (f_mtb, rst, f_ztb)beginif rst = 1 or f_ztb=1 thenq_state=q0;f_data=00000000;f_flagf_data(7)=not qun_afxd;f_flag=0; q_statef_data(6)=not qun_afxd; q_statef_data(5)=not qun_afxd;q_state f_data(4)=not qun_afxd;q_state f_da
37、ta(3)=not qun_afxd;q_state f_data(2)=not qun_afxd;q_state f_data(1)=not qun_afxd;q_state f_data(0)=not qun_afxd;f_flag=1; q_state q_state=q0; end case;end if;end process ;(c) PCM 码编帧process (gclk, rst)-数据编帧, 128 Byte 群信号 + 2Byte 转发信号(前 11位,后 5 位为 0) + 2Byte 帧计数 + 2Byte 帧标志beginif rst = 1 thenfifo_data = 00000000;b_state=b0; z_cnt=X0000; cnt3=0; f_flag_tmpf_flag_tmp=f_flag;if f_flag_tmp=0 and f_flag=1 thenb_state=b1;elseb_st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版卫星通信系统建设项目合同
- 2025版工业自动化控制系统设备监造与维护合同
- 2025年度网络安全产品保密协议范本
- 2025建筑工程劳务合同样本
- 2025年私人住宅渗水修复合同协议
- 2025企业合同管理指南合同履行与监督实施细则文档模板
- 语文专业知识培训心得
- 红色船员基础知识培训课件
- 红色家书课件带稿
- 企业资产保理融资合同
- GB/T 5907.4-2015消防词汇第4部分:火灾调查
- GB 31701-2015婴幼儿及儿童纺织产品安全技术规范
- 健身理论与指导课件讲义
- 浙江省科学作业本2022版四年级上册作业本参考答案
- 2023年中远海运船员管理有限公司招聘笔试题库及答案解析
- 美国共同基金SmartBeta布局及借鉴
- 企业劳动用工法律风险与防范
- 普通逻辑ppt课件(完整版)
- 2022年08月安徽省芜湖市招考大学生科技特派员岗位冲刺题(带答案)
- 国家城镇救援队伍能力建设与分级测评指南
- DB32∕T 4065-2021 建筑幕墙工程技术标准
评论
0/150
提交评论