热度 2
2015-11-18 17:44
998 次阅读|
0 个评论
仿真环境 QUARTUS13.1 仿真ip:altlvds_rx。 为了接收LVDS信号,FPGA可以使用自己的IP核,当然也可以直接用LVDS接收芯片。但是,往往为了节约成本,减小PCB面积等因素,可以使用IP核来处理。 IP核设置界面如下 这里factor最大为10.据说赛灵思的最大可到12,没有试过。 这里数据速率要和输入频率成一定的比例,这个比例就是上边Factor的数值,我们这里是10,所以data rate 是500mhz,输入clk是50mhz。之所以这样设置的原因是,为了数据对齐。这可以在官方的指导手册中看到详细的介绍。 关于数据对齐问题要注意 就是说,要保证串行数据的MSB和外部clk上升沿对齐,并且,要保证一个有效word中只有一个外部clk上升沿,那这就要求data rate/外部input clk =Factor。 verilog及testbench如下 testbench `timescale 1ns/1ps module LVDS_RX_tb; reg clk; reg lvds_sig; wire 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 仿真波形: 当rx_locked拉高后,ip核内部的pll会锁存时钟,也就是说这时候才会解串,将接收到的串行数据并行化,在一个外部clk周期内,会将10bit串行数据并行化,并行输出的数据会在rx_outlock的上升沿变化,下降沿锁存。 具体要自己分析ip核的用户指导手册。