异步时钟域数据复用设计_第1页
异步时钟域数据复用设计_第2页
异步时钟域数据复用设计_第3页
异步时钟域数据复用设计_第4页
异步时钟域数据复用设计_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业异步时钟域数据复用设计5 吴艳兵1,设计思路: 在FIFO的输入端是两路数据同时输入,但要将第二路DIN的数据插入TS_IN的空帧当中,就需要将DIN进行存储,由于DIN的时钟频率比TS_IN的频率低,因此需要异步的FIFO来实现复用,而TS传输流中的空帧足够多,这就保证了能够将DIN的数据不丢失的插入到TS_IN的空帧中去,并输出,而且是按照TS传输流格式进行传输。这里因为TS_IN的空帧中有7个是空位,因此我选择FIFO的存储深度为16个8位的,这样能够保证在存到一

2、半左右的数据时就会从FIFO中读取数据输出,而保证了FIFO不会被存满的情况。2,设计流程:本次设计分为3个模块。第一个模块,分为四种状态。,CHECKOUTTWO(开始检测输出模式),此状态在SYNC高电平到来的时候就进入,然后检测后来数据是否是EE:是,则进入OUTTWO(模式二确定状态);不是,则进入OUTONE(输出模式一态),输出的是TS_IN的数据,并且FIFO继续存储DIN的数据。,OUTTWO(模式二确定状态),检测后来数据是否是EE,如果不是,进入OUTONE(输出模式一态),输出TS_IN的数据,并输出!en低电平;如果是EE,进入OUT_TWO(输出模式二态),并输出en

3、高电平,驱动FIFO输出,此时输出保存在FIFO中的数据。,OUTONE(输出模式一态),输出TS_IN的数据,并持续保持在该状态,维持输出!En低电平,直到下一个SYNC高电平的到来。,OUTTWO(输出模式二态),输出保存在FIFO中的数据,并持续保持该状态,未出输出en高电平,直到下一个SYNC高电平的到来。3,第二个模块,FIFO,我是直接调用的Quartus自带的异步时钟FIFO来处理DIN数据的存储。4,第三个模块,我编写的是一个两路选择模块,实现的是检测第一个模块的en输出,如果是高,则将通路切换到第二路,输出FIFO中存储的DIN数据。如果是低,则将通路切换到第一路,输出TS_

4、IN的数据,这样进行两路的切换也就相当于是实现了两路异步时钟数据的插入操作。5,状态转移图:,模块一MY状态转移:OUT_TWOOUTTWO EE EEOUT_TWOOUTTWOCHECKOUTTWOSYNC CHECKOUTTWO !EEOUTONEOUTONE !EE,模块三choose状态转移则比较简单:START SYNC START !en en输出第一路TS_IN输出第二路DIN输出第一路TS_IN输出第二路DIN6,Quartus硬件布局:7,仿真结果,由于Quartus的观察长度有限,我在这里只能设定另外的clk和clk_w时钟。为了区别两路数据,我将第一路TS_IN都设置为有

5、A-F的字母组成的16进制数据,第二路DIN都设置为有0-9组成的16进制数据。可以看到,TS_IN和d两路输入和各自在模块一和FIFO的处理之后的输出,以及经过choose选择模块选择通路之后的输出,当enr变高时,d路数据完全插进到TS_IN数据的空帧当中输出了。4,程序代码: /*模块一MY代码*module MY( clk_in, ts_in,state, en_out, sync, ts_out );inputsync,clk_in;/同步表示及时钟input7:0ts_in; /输入数据流outputen_out;/使能输出output7:0 ts_out;/数据输出口output

6、3:0 state;/状态寄存器/*状态定义*parameterCHECKOUTTWO = 3b001;/开始检测输出模式parameterOUTTWO = 3b010;/模式二确定态parameterOUT_TWO = 3b011;/输出模式二态parameterOUTONE= 3b100;/输出模式一态/ regs & wiresreg3:0state;reg7:0 ts_out;reg en_out;/*状态转移部分*always ( negedge clk_in )if ( sync=1 )begin state = CHECKOUTTWO;en_out=0;ts_out=ts_in;

7、endelsecase ( state )/*开始检测输出模式*CHECKOUTTWO : begin ts_out=ts_in; if (ts_in = 8HEE)begin state = OUTTWO; /当检测到第一个EE时,进入模式二确定态,并抑制FIFO,不让他输出存在其中的DIN数据。 en_out=0;endelse state =OUTONE;/当没有检测到EE时,立刻进入输出模式一态。end/*模式二确定态*OUTTWO: begin ts_out=ts_in; if (ts_in = 8HEE)begin state = OUT_TWO; /搜索到第二个EE时,立刻进入输

8、出模式二态。end elsestate = OUTONE; /第三个字不是EE时,进入输出模式一态。 end/*输出模式二态*OUT_TWO: begin en_out=1; /输出一个使能,使能FIFO输出存储在其中的DIN数据,并维持在此状态直到下一个SYNC高的到来重新进行状态判断。 state=OUT_TWO;end/*输出模式一态*OUTONE:beginstate=OUTONE; /此时输出TS_IN数据,并输出一个低的en,让FIFO不输出,继续存数据直到下一个SYNC高电平的到来再重新进行状态的判断。ts_out=ts_in; en_out=0;endendcaseendmodule/*模块三choose代码*module choose(en,input_one,input_two,clk,sync,data);inputen,clk,sync;/使能,时钟,同步标志input7:0input_one;/第一路输入数据input7:0input_two; /第二路输入数据output7:0data; /输出数据reg7:0data; /数据输出口/*通路选择部分*always

温馨提示

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

评论

0/150

提交评论