当前位置: 首页 > 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股票量化交易分析-开发属于自己的指标
  • 网管平台(进阶篇):路由器的管理实践
  • SpringMVC (1)
  • Flink链接Kafka
  • 15. 三数之和【力扣】--三指针
  • 升级 SpringBoot3 全项目讲解 — 为什么 SpringBoot3 应该抛弃 Maven,搭配 Gradle 来使用?
  • 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