Ps.1:Quartus中添加IP核的步骤如下:
1、打开Quartus工程下的目录:
可以看见有一个ip_core文件夹,里面就是工程里添加的官方ip核了。
找到 .qip 后缀的文件,它就是ip核的内容文件。
把它复制,添加到自己的Quartus工程中即可。
Ps.2:分配引脚时报错:Error (169218): I/O standard LVDS on output or bidirectional pin lvds_txdb is not supported by the device at location M9 (PAD_78) -- only input pins of this I/O standard are allowed at this location.
Info (169217): Consider using I/O standard LVDS_E_3R or mini-LVDS_E_3R instead of LVDS for pin at location M9; board resistor(s) will be needed.
译为:错误(169218):位置M9(PAD_78)的设备不支持输出或双向引脚LVDS_txdb上的I/O标准LVDS——该位置仅允许该I/O标准的输入引脚。
信息(169217):考虑使用I/O标准LVDS_E_3R或mini-LVDS_E_3R代替LVDS用于位置M9的引脚;需要板电阻器。
原因是由于所用FPGA的引脚划分输入输出,不能将tx_clk与tx_data接到输入引脚上。
Ps.3:布局布线时报错:Error (176394): Can't fit 3 PLLs in the device -- only 2 PLLs are available。
由于FPGA中只有两个PLL资源而lvds_tx与lvds_rxIP核各占用一个导致PLL资源紧张,只需将lvds_tx与lvds_rxIP核中的PLL勾选使用外部PLL即可。
Ps.4:关于分配引脚:对于FPGA的输出管脚只要是输出I/O 即可,但是输入的时钟必须接到时钟管脚上,复位必须接到复位管脚上,否则布局布线报错。
Ps.5:问题:程序下载到ALTERA板子运行异常。
解决步骤:(1)将程序下载到Xilinx板子:运行正常;
(2)使用signaltap抓取信号一直显示waiting for clock:时钟引脚连接问题,看的原理图是开拓者V2资料但板子是开拓者V1(已停产),两个板子除晶振和个别引脚不同外基本一致;
(3)在signaltap中下载程序正常但使用programmer下载就异常:signaltap中下载的是.sof文件但在programmer中下载的还是例程里V2板子的.jic文件。
Ps.6:分析综合时报错:The DDIO_OUT WYSIWYG primitive "lvds_tx_top:u3_lvds_tx_top|lvds_tx_mega:u3_2_lvds_tx_mega|altlvds_tx:ALTLVDS_TX_component|lvds_tx_mega_lvds_tx:auto_generated|lvds_tx_mega_ddio_out:ddio_out|wire_ddio_outa_dataout[0]" feeding the node "dbobf:dbobf_0|dbobf_iobuf_out_40t:dbobf_iobuf_out_40t_component|obufa_0" has multiple fan-outs.
在IP核lvds_tx_mega_lvds_tx模块中wire_ddio_outa_dataout连接了两根线删掉其中不输出的一根即可解决。
Ps.7:分析综合时报错: Clock input port inclk[0] of PLL "lvds_rx_top:u4_lvds_rx_top|lvds_rx_mega:u4_1_lvds_rx_mega|altlvds_rx:ALTLVDS_RX_component|lvds_rx_mega_lvds_rx:auto_generated|lvds_rx_pll" must be driven by a non-inverted input pin or another PLL, optionally through a Clock Control block
Info (15024): Input port INCLK[0] of node "lvds_rx_top:u4_lvds_rx_top|lvds_rx_mega:u4_1_lvds_rx_mega|altlvds_rx:ALTLVDS_RX_component|lvds_rx_mega_lvds_rx:auto_generated|lvds_rx_pll" is not connected.
Ps.8:在Ps.1中修改了ALTLVDSIP核自动生成的源代码,可能导致新的bug产生,所以另辟蹊径,取消LVDS收发模块IP核里的差分时钟,直接采用如同Xilinx芯片数据线相连,时钟由外部PLL提供的方式。
Ps.9:取消差分时钟后报错:Error (176059): The Receiver, driven by I/O pin lvds_rxdb at data rate 800 Mbps, exceeds maximum allowed data rate of 640 Mbps for LVDS input.
将ALTLVDS_RX里的输入时钟由400MHz改为50MHz解决报错。
Ps.10:Cyclone IV E中,ALTLVDS_TX中clk_in=clk_fast/2;ALTLVDS_RX中clk_in=clk_slow;tx_syncclock=clk_fast/串化因子。(clk_fast指串行数据频率,clk_slow指并行数据速率)
Ps.11:关于在Quartus中使用ALTLVDS的好文章:lvds在FPGA中的使用1 - lvds介绍 - 爱码网
Ps.12:FPGA未使用引脚的配置:
在使用FPGA过程中,未使用引脚的配置是很重要的。一般未用管脚设置成三态输入或弱上拉输入。
以Altera FPGA为例,一般是将没使用的管脚设置为三态输入比较安全。利用Quartus II 将未使用管脚设置为三态输入
选择Assignments→Settings→Devices and Pin Options,打开一个选项卡,选项卡中选择Unused Pins就可以对未定义的管脚配置了As input tri-stated。
Ps.13:未添加端接100Ω电阻时tx_db:非差分信号
添加 100Ω端接电阻时tx_db:差分信号
说明Cyclone IV E:EP4CE10F17C8上的差分输入端没有配置100Ω端接电阻。
Ps.14:tx_syncclock影响tx_in,添加tx_syncclock使tx_in数据稳定。
Ps.15:B(ALTLVDS_TX的IP核里outclock设置),J(串化因子)
Ps.16:ALTLVDS_TX与ALTLVDS_RX的时钟源如果是系统时钟则报错:
①Error (15065): Clock input port inclk[0] of PLL "lvds_tx_top:u3_lvds_tx_top|lvds_tx_mega:lvds_tx_mega_0|altlvds_tx:ALTLVDS_TX_component|lvds_tx_mega_lvds_tx1:auto_generated|lvds_tx_pll" must be driven by a non-inverted input pin or another PLL, optionally through a Clock Control block
Info (15024): Input port INCLK[0] of node "lvds_tx_top:u3_lvds_tx_top|lvds_tx_mega:lvds_tx_mega_0|altlvds_tx:ALTLVDS_TX_component|lvds_tx_mega_lvds_tx1:auto_generated|lvds_tx_pll" is driven by clk_out_r which is Q output port of Register cell type node clk_out_r.
②Error (15065): Clock input port inclk[0] of PLL "lvds_tx_top:u3_lvds_tx_top|lvds_tx_mega:lvds_tx_mega_0|altlvds_tx:ALTLVDS_TX_component|lvds_tx_mega_lvds_tx1:auto_generated|lvds_tx_pll" must be driven by a non-inverted input pin or another PLL, optionally through a Clock Control block
Info (15024): Input port INCLK[0] of node "lvds_tx_top:u3_lvds_tx_top|lvds_tx_mega:lvds_tx_mega_0|altlvds_tx:ALTLVDS_TX_component|lvds_tx_mega_lvds_tx1:auto_generated|lvds_tx_pll" is driven by clk_out_r which is Q output port of Register cell type node clk_out_r.
但是不管使用外部PLL时钟还是内部PLL时钟则不报错。
Ps.17:注意硬件是否满足实验需求!!!!!!
ex:使用ALTERA的EP4CE10F17C8时,盲目配置LVDS,但是一直不能正常传输,根本原因在于该芯片的差分对没有2.5V或1.8V供电电压,在以后做实验时需要先看原理图看看硬件设备是否满足实验需求。
Ps.18:开发板芯片众多,连接紧密,切记将金属物接触开发板,可能会导致短路从而损坏开发板。
Ps.19:
NC:未焊接的意思,上图如果需要转换电压需要将R68 0Ω电阻焊掉,在R69上焊接。
Ps.20:在LVDS接口供电电压满足2.5V且能够配置差分时钟管脚,且将端接电阻焊接在接收端之后,实现了基于Quartus平台的LVDS数据回环实验。
Ps.21:在ALTLVDS的IP核配置中,如果IP核使用内部PLL,ALTLVDS_TX中tx_inclock与data_rate无关,仅仅是驱动PLL的时钟,而tx_outclock=data_rate÷outclock divide factor(B),ALTLVDS_RX的rx_inclock=tx_inclock。如果tx_inclock与设置的rx_inclock不匹配会造成ALTLVDS_RX的rx_locked无法拉高,也就是IP核内部锁相环无法锁定的问题。
Ps.22:报错:(170048 )Selected devicehas46RAMlocation(s)oftypeM9K.However, the current design needs more than 46 to successfully fit.
(171000 )Can't fit design in device.
原因是signaltap时钟采样深度过大,FPGA资源不满足。