FPGA设计心得(12)如何正确使用 in_system_ibert ?
- ?in_system_ibert IP定制要点
- ?串行收发器的位置
- ?如何例化in_system_ibert?
- ?结尾
in_system_ibert IP定制要点
串行收发器的位置
在ISI定制中,需要选择所使用的串行收发器的位置,如下:
在这里插入图片描述
对应的IP端口处也会出现相应的端口,例如上图选择了2个Quad,也就是8个通道的串行收发器,那么对应的drp接口就有8个。
但这个对应关系让人很迷惑,具体的通道和drp端口信号是如何对应的呢?
如果有着严格的对应关系,那么数据手册或者其他形式有必要给出必要的说明,而不是让用户去猜测!人们常常犯着经验主义的错误,认为既然让你选择了Quad和通道,那么就应该对应连接?我在拿不准的时候也听过如此的论调,并信以为然,这花费了我很多的时间去寻找对应关系,并最终一无所获,当你使用了大量的通道,例如几十个,那么这种对应关系的寻找会更加消耗你的时间,特别是当项目中需要被测眼图的transceiver一方,有着混乱的通道使用!不管是什么原因,为了原理图布线方面也好,或者是任性使用,例如:如下定义的rx:
input [31:0] rx;
每4位使用一个Quad,也就是4个通道,对应关系如下:rx[0] 对应通道x1y39 rx[1] 对应通道x1y38 rx[2] 对应通道x1y37 rx[3] 对应通道x1y36
rx[4] 对应通道x1y35 rx[5] 对应通道x1y34 rx[6] 对应通道x1y33 rx[7] 对应通道x1y32
看起来已经有点意思了,这种还是倒过来约束的,还行,能接受。如果是下面这种对应关系:rx[0] 对应通道x1y36 rx[1] 对应通道x1y37 rx[2] 对应通道x1y38 rx[3] 对应通道x1y39
rx[4] 对应通道x1y32 rx[5] 对应通道x1y33 rx[6] 对应通道x1y34 rx[7] 对应通道x1y35
这就必须谴责了。如果有几十个通道,你说怎么玩吧,如果in_system_ibert又需要严格的通道对应关系,那么信号的连接将变得十分不直观,让接盘开发者面临青筋暴裂的危险。
还是去看数据手册吧,那么一个不起眼的IP核,拿不准的时候也需要阅读数据手册!如果有现场支持工程师,这种问题也不要问了,因为他很可能自家的数据手册都没有阅读,就按照惯性思维告诉你,如果不需要严格通道对应,人家IP核让你选择干嘛,然后你深信不疑,胡乱猜测,呃呃呃,gt1对应x1y39,或者gt1对应x1y0,白白浪费时间,项目做到最后,还对自己隐隐怀疑。或者最后结果没有问题,还以为,自己的运气是好的,选择是对的,并输出文档,告诉队友,就得这样干,我试过!!!
来看数据手册:The ISI core has no transceiver location constraints, nor are any attributes updated for selected transceivers. The selected transceiver information is only used to create an ISI template and group/display the selected transceiver in the Serial IO analyzer after downloading the bit file.
翻译一下:
ISI内核没有收发器位置约束,也没有为所选收发器更新任何属性。所选的收发器信息仅用于创建ISI模板,并在下载bit文件后在串行IO分析器中分组/显示所选的收发器。
很明显了,没有位置约束,所选择的收发器信息仅仅用于创建例化模板。告诉你有多少个gt,你接进去就完事了。
总结:最接近真理的地方在数据手册上,我们(除了制定者,设计者)外都是阅读者,各色各样的阅读者容易忽略部分信息,或者根据惯性思维来判断,因此,带着问题去数据手册寻找答案。
如何例化in_system_ibert?
由于这个IP没有提供例子程序,所以要正确无误地使用这个IP,还有一定的疑惑点?这个时候谁也别问,因为你可能问的人也只是听说过,或者见过,真正手把手体验过,实践过的人,也许很难精确遇到。如果你问了,他们会告诉你,把drp接口连接上去就好了,然后你看看你自己的应用场景,已经定制好的aurora,或者jesd,srio等等,我了个去,怎么没有drp端口,如何和in-system-ibert的drp接口连接? 当你找不到drp接口的时候,他们也许又会告诉你,在ip核内部有,引出来?你若怀疑,甚至还怪你资历不够的意思?
我来告诉你,IP核是不要轻易改动的,或者说不要改动,如果你找不到drp接口,可以尝试看看数据手册,或者试试去掉某些选项,或者添加某些选项,但我建议还是看看收据手册,数据手册会有那个接口的描述,你会得到答案。
这里就已经可能解决很多疑惑了,但是还不够,没有个示例来参考,又没有例子工程,我会不放心我连接的对不对,或者说对这个IP核使用的对不对,因为我一旦例化进去,并生成bit流,工程大了会消耗大量的时间,怎么办呢?
为了提高成功率还是要找到一个这个ip核使用的例子程序来研究研究,这里建议可以使用transceiver IP,内部有例化in-system-ibert的选项,你勾选之后随便生成一个例子程序,就可以看到这个ip核到底怎么使用的,照葫芦画瓢,是最直接的方式。
例如:
生成例子程序:
加粗样式
对着程序看看如何无误地使用in-system-ibert,并且如何配合VIO IP核来使用,都可以清晰地看到解决办法!
这些都是需要自己去发现的,而不是去问xxx。
结尾
这里只是告诉自己,也告诉迷茫的你方法,而没有提供一个具体的实例,自己去探索吧,数据手册,求知欲,才是王道。
- Oracle基础知识-SQL简单命令
- 【java开发系列】—— spring简单入门示例
- JavaMelody应用监控使用指南
- 记录安装oracle的那些事(四)之oracle 缺包安包
- 【面试虐菜】—— JAVA面试题(1)
- JAVA增删改查XML文件
- javascript去掉字符串前后空格
- 构建通用的 React 和 Node 应用
- 有趣的 CSS 像素艺术
- 【插件开发】—— 11 窃听风云(Java事件监听原理-GEF实例讲解)
- 【面试虐菜】—— JAVA面试题(2)
- JavaMelody监控spring、struts
- 《JavaScript语言精粹》—— 读书总结
- 视差滚动技术的简介及运用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS7下源码安装MySQL 8.x
- 最新!中国天气网api接口调用,key获取方式,数据请求秘钥获取,城市id获取方法
- Jmeter接口压测快速入门
- 超简单!Qt Designer插入图片,styleSheet加入图片,Qt加入背景图片
- 关于领域模型转换的那些事儿
- Windows图标显示异常解决方法。桌面图标异常,开始菜单图标异常,任务栏图标异常。图标缓存位置。
- Python基本语法与数字类型
- Qt Designer设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承,styleSheet设置样式。
- 搭建高可用的Harbor
- PyQt5 技术篇-控件长宽度、高度设置,组件大小设置,组件尺寸查看。
- python基本数据类型
- Python 技术篇-PyQt5动画功能演示,组件移动、尺寸改变动画演示
- 搭建k8s高可用集群 - 二进制方式
- DeepWalk:图网络与NLP的巧妙融合
- 基于kubeadm搭建k8s高可用集群