
FPGA SDI视频解码与PCIE传输工程:Xilinx开发板XC7K325T实现1920X1080@30Hz至H
DMI及PCIE X8传输
视频采集卡这玩意儿在广电和医疗领域算是刚需了,今天咱们来聊聊怎么用FPGA从零撸个带PCIE
传输的3G-SDI采集方案。整个系统用Xilinx家的7系FPGA扛大旗,既能实时解码SDI信号,还能通过PCIE把
视频流怼到电脑上,顺手再给HDMI输出个60帧的画面,这波操作绝对能治好多采集卡玩家的强迫症。
先看SDI解码这块硬骨头,Xilinx的SMPTE UHD-SDI IP核是真香。配置的时候注意这个参数得卡死:
```verilog
sdi_rx_inst u_sdi_rx(
.rx_clk (sdi_clk),
.rx_ce (1'b1),
.rx_sd (sdi_data),
.rx_line_a (line_count),
.rx_active_video(video_active)
);
```
这段代码里藏着门道——sdi_clk得用专用的GTX恢复时钟,video_active信号跟视频有效区域严丝
合缝对不上就等着花屏吧。实测发现把GTX的RXUSRCLK接到这里最稳当,毕竟原汤化原食嘛。
PCIE传输这块算是重头戏,DMA引擎得自己动手撸。看这个AXI Stream的桥接代码:
```verilog
always @(posedge pcie_clk) begin
if (axis_tvalid && axis_tready) begin
pcie_fifo[wr_ptr] <= axis_tdata;
wr_ptr <= wr_ptr + 1;
end
end
```
这双缓冲机制能抗住PCIE的突发传输,实测带宽能跑到6.4Gbps左右,喂饱1080p30的视频流绰绰有
余。不过要注意TLP包大小别超过4096字节,否则DMA控制器容易尥蹶子。
HDMI输出这边有个骚操作——把30帧输入插帧到60帧输出。用FPGA的BRAM搞了个乒乓缓存:
```systemverilog