当前位置: 首页 > article >正文

官方源码,LVDS中判断数据是否对齐时钟上升沿的方法解析



/*----时钟上升沿与滞后半个周期检测----*/
generate

for (i = 0 ; i <= S-2 ; i = i+1) begin : loop0

assign msxoria[i+1] = ((~s_ovflw & ((mdataouta[i] & ~mdataouta[i+1] & ~sdataouta[i])   | (~mdataouta[i] & mdataouta[i+1] &  sdataouta[i]))) | 
	               ( s_ovflw & ((mdataouta[i] & ~mdataouta[i+1] & ~sdataouta[i+1]) | (~mdataouta[i] & mdataouta[i+1] &  sdataouta[i+1])))) ; // early bits                   
assign msxorda[i+1] = ((~s_ovflw & ((mdataouta[i] & ~mdataouta[i+1] &  sdataouta[i])   | (~mdataouta[i] & mdataouta[i+1] & ~sdataouta[i])))) | 
	               ( s_ovflw & ((mdataouta[i] & ~mdataouta[i+1] &  sdataouta[i+1]) | (~mdataouta[i] & mdataouta[i+1] & ~sdataouta[i+1]))) ;	// late bits
end 
endgenerate

//判断分为两种情况
//情况1就是没有溢出:~s_ovflw
//情况2就是溢出:s_ovflw
//msxoria代表信号到达太早,需要将信号延时一下
assign msxoria[0] = ((~s_ovflw & ((mdataoutb & ~mdataouta[0] & ~sdataoutb)    | (~mdataoutb & mdataouta[0] &  sdataoutb))) | 			// first early bit
	             
				 ( s_ovflw & ((mdataoutb & ~mdataouta[0] & ~sdataouta[0]) | (~mdataoutb & mdataouta[0] &  sdataouta[0])))) ;



//msxorda代表信号到达太晚,需要将信号减小延时
assign msxorda[0] = ((~s_ovflw & ((mdataoutb & ~mdataouta[0] &  sdataoutb)    | (~mdataoutb & mdataouta[0] & ~sdataoutb)))) | 			// first late bit
	             ( s_ovflw & ((mdataoutb & ~mdataouta[0] &  sdataouta[0]) | (~mdataoutb & mdataouta[0] & ~sdataouta[0]))) ;

 数据延时模块实现数据延时的理论思路是什么样的?

注意:以下只是理论,区别与具体实现。具体实现会有差别

先采一个值,延时半个周期再次采一个数值

  1. 采样的值相同,则增大数据的延时
  2. 采样的值不同,则减小数据的延时

如果前一个采样值相同,改变延时后采样值不同了,那么就确定在中心附近了。

如果前一个采样值不相同,改变延时后采样值相同了,那么也能确定在中心附近了。

注意:以下只是理论,区别与具体实现。具体实现会有差别

先采一个值,延时半个周期再次采一个数值(记住下面的两句口诀)

  1. 采样的值相同,则增大数据的延时
  2. 采样的值不同,则减小数据的延时

如果前一个采样值相同,改变延时后采样值不同了,那么就确定在中心附近了。

如果前一个采样值不相同,改变延时后采样值相同了,那么也能确定在中心附近了。

数据延时模块实现数据延时的具体实现思路是什么样的?

FPGA内部实际只能单沿操作,理想的情况下需要双边沿检测,不好始实现。
故:首先对P端的延时调整快半个周期或者慢半个周期,
        (这里我们认为P端与~N端信号是一模一样的)
       那么P端与~N端之间就会有半个周期差,在时钟上升沿同时采样P端和~N端信号,效果上就是对一个信号隔半个周期采样一次了。

重点:为了让前后周期的数据不一样,便于检测是是都是采样同一周期还是非同一周期的数据,因此源码上面用的是边沿检测的方法。只对前后数据产生跳变的数据进行判断。

  1. 如果~N 端 是超前P端 的那么,我们重点关注P端边沿的数据与~N端采样数据的关系
  2. 如果~N 端 是滞后P端 的那么,我们重点关注P端边沿的数据与~N端采样数据的关系

 

然后用前面记的两个公式来判断数据应该增大延时还是减小延时。(刚开始的时候对数据都有初始延时)


http://www.kler.cn/a/375981.html

相关文章:

  • 基于Python可视化的热门微博数据分析系统
  • YoloV8改进策略:Block改进|RFE模块,提高小物体的识别精度|即插即用|代码+修改过程
  • 【ROS的TF系统】
  • 电脑小白必看|电脑安装常用软件简单小技巧
  • 信息隐藏技术概述
  • Unity性能优化(简略版)
  • kkfileview4.2.1 LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz
  • 【25届秋招】蚂蚁集团 0825算法岗笔试
  • Nginx开发实战——网络通信(一)
  • 免费开放商用!Stability AI推轻量级AI绘画利器 Stable Diffusion 3.5 Medium模型
  • 在线体验Sketch中文版,免费下载即刻上手!
  • ubuntu怎么查看端口占用进程
  • Vue3访问页面时自动获取数据
  • 真题与解析 202112三级 青少年软件编程(Python)考级
  • SpringBoot 如何同时接收文件以及json参数
  • Spring Boot应用MongoDB
  • RabbitMQ的原理和集成使用
  • 秘钥认证与分发脚本(免密码登录)
  • Node.js——fs模块-同步与异步
  • 从语法到AI率:用ChatGPT润色论文的3个误区
  • Linux之实战命令63:ip应用实例(九十七)
  • LeetCode - 3259. 超级饮料的最大强化能量
  • 小林渗透入门:burpsuite+proxifier抓取小程序流量
  • Linux补基础之:系统和进程
  • 最新整理:Selenium自动化测试面试题
  • 24/11/2 算法笔记 拆解LDA