原创 altlvds仿真

2015-11-18 17:44 997 2 2 分类: FPGA/CPLD

仿真环境 QUARTUS13.1

仿真ip:altlvds_rx。

为了接收LVDS信号,FPGA可以使用自己的IP核,当然也可以直接用LVDS接收芯片。但是,往往为了节约成本,减小PCB面积等因素,可以使用IP核来处理。

IP核设置界面如下

ip1.jpg
这里factor最大为10.据说赛灵思的最大可到12,没有试过。
ip2.jpg
这里数据速率要和输入频率成一定的比例,这个比例就是上边Factor的数值,我们这里是10,所以data rate 是500mhz,输入clk是50mhz。之所以这样设置的原因是,为了数据对齐。这可以在官方的指导手册中看到详细的介绍。
关于数据对齐问题要注意
ip5.jpg
就是说,要保证串行数据的MSB和外部clk上升沿对齐,并且,要保证一个有效word中只有一个外部clk上升沿,那这就要求data rate/外部input clk =Factor。
verilog及testbench如下
verilog5.jpg
testbench
 
`timescale 1ns/1ps
 
module LVDS_RX_tb;
 
reg clk;
 
reg lvds_sig;
 
wire [9:0] parallel_sig;
wire rx_locked;
wire rx_outclock;
 
 
 
initial
begin
clk = 1'b0;
lvds_sig = 1'b0;
#100
lvds_sig = 1'b1;
 
repeat(10)
begin
#2
lvds_sig = 1'b0;
#2
lvds_sig = 1'b1;
end
lvds_sig = 1'b0;
repeat(10)
begin
#2
lvds_sig = 1'b1;
#2
lvds_sig = 1'b0;
end
end
 
 
 
always #10 clk = ~clk; //50MHz inclk
 
LVDS_RX u1(
 
.clk(clk),
.lvds_sig(lvds_sig),
.rx_locked(rx_locked),
.parallel_sig(parallel_sig),
.rx_outclock(rx_outclock)
);
 
endmodule
 
仿真波形:
qq截图20151118173933.jpg
当rx_locked拉高后,ip核内部的pll会锁存时钟,也就是说这时候才会解串,将接收到的串行数据并行化,在一个外部clk周期内,会将10bit串行数据并行化,并行输出的数据会在rx_outlock的上升沿变化,下降沿锁存。
具体要自己分析ip核的用户指导手册。
 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
2
关闭 站长推荐上一条 /3 下一条