[笔记]ALTLVDS_TX和ALTLVDS_RX及Modelsim使用技巧
LVDS OUTPUT只能锁定在BANK0或者BANK2上,而LVDS INPUT无此要求。
由于在仿真ALTLVDS_RX中发现信号线rx_dpa_locked并没有锁住。后来发现是我初始化出错了。在洪鸿榕的调试下,我学到了modelsim中用字母I、O可以放大和缩小波形,在输入信号端口上右击可以强制对输入信号进行赋值,这样可以不受testbench的影响(要能灵活应用,GOOD!)。在《ug_altlvds.pdf》文档中第36/105页中语句1如图1所示,再结合第38/105页初始化步骤(程序的步骤就要严格按照这个来写,所以一定要吃透并理顺),可以发现我自己对信号rx_fifo_reset的理解是有着致命的错误。也明白了并非所有的复位信号一开始就让其有效是对的。这边就出现rx_fifo_reset信号开始要为0,等到rx_dpa_locked信号有效再置有效且只能一个时钟的脉冲,这样才能达到复位功能。
建议在对LVDS_RX进行初始化请一定要按照《ug_altlvds.pdf》第38/105页,如果严格按照上面的要求就会得到正确的结果。其中字调整需要4个脉冲,这是参考《arriav_hankbook.pdf》第157/426页串行与并行关系得到。
Modelsim中常用到restart -f; run 5us; radix -hex等语句,及向上箭号来寻找之前的命令。调试中要善于对输入信号进行强制赋值来对比。
常用到的命令有cat,pwd,cd等,有些指令与Linux底下的使用类似。
Modelsim下方时间单位ps改为us的方法:Tools-->Window Preferences...-->Grid & Timeline中Time units选择us即可。
dir可以查看文件目录列表,notepad filename可以以写字板打开文件看里面的东西 。
Modelsim保存wave中自己设置好的信号方法:File-->Save Format...即可。
Modelsim的wave中信号针对某个值进行查找时方法是:Edit-->Wave Signal Search...-->Search for Signal Value输入所需的值就可以定位。
Modelsim的wave中对某些信号线进行合并,即提取所需的信号总线,方法是:Tools-->Combine Signals...-->Result Name输入所取的名字就可以。
Modelsim的wave中信号针对某个值进行查找时方法是:Edit-->Wave Signal Search...-->Search for Signal Value输入所需的值就可以定位。
Modelsim的wave中信号线颜色和命名颜色的改变方法是:在该信号上右击-->Properties...-->View-->Wave Color / Name Color就可以。
使用ModelSim do文件实现仿真(Verilog)http://www.eetop.cn/blog/html/51/806951-29326.html 这篇文章写得很好,很价值。
modelsim批处理和do文件 来源: http://blog.21ic.com/user1/8510/archives/2012/91124.html
批处理后缀是*.bat文件,使用类似GCC,可以参考GCC使用手册
在Altera的ArriaV中也有ALTLVDS_TX和ALTLVDS_RX宏功能模块。由于之前在做Xilinx器件时,有用过将LVDS的差分信号转成单端信号的相关源语。以为在Altera器件上也需要,其实Altera完全可以不用,只需要定义和锁定P引脚就可以,但需要将IO Standard定义成LVDS形式,如下所示:
# | module altera_lvds_rx_1
set_instance_assignment -name IO_STANDARD LVDS -to LVDS_RX1_p[0]
set_location_assignment PIN_F16 -to LVDS_RX1_p[0]
这样就可以省去一大堆的差分转单端的源语了,太给力了。
###################################################################################################
对于LVDS_TX和LVDS_RX宏功能模块中PLL的共享一定要保证所要求的信号源一致,就是采用同一根信号。我之前一直没能理解过来,且不会转变,后来还是洪鸿榕做出来了。其实我是定位对了,但没能理解过来。语文!!
文档《ug_altlvds.pdf》第51/105页中有提到:when both use identical input clock sources, identical pll_areset sources, identical deserialization factors, and identical output settings.
我在用LVDS_TX和LVDS_RX宏功能模块时,出现如下三个问题:
第一问题:我对LVDS_RX宏功能模块分别进行功能仿真和时序仿真,在输入时钟为74.25MHZ,占空比是4/7,串行因子是7bit的条件下,功能仿真是将7个拆开成3个和4个输出的,而时序仿真却是将7个拆开成4个和3个输出的。我们不确定哪种是正确的,请问文档中哪边有提到吗?下面这张是当串行因子为8bit时的接收情况,它是8个拆开成4个和4个接收的。而7个的话就不知道如何拆开呢?
第二个问题:我们PANNEL上LVDS发送格式如下图所示。那么我们要如何使用Arria LVDS_RX宏功能模块去正确接收?
第三问题:还有LVDS_TX宏功能模块的发送格式是如下所示,我们要如何处理才能变成上图的格式输出呢?