[X]关闭

基于FDMA的PCIE传输HDMI信号

文档创建者:小白又白
浏览次数:4739
最后更新:2019-08-10
基于FDMA的PCIE传输HDMI: 从FIFO中取数据到FDMA传输过程:(FIFO例化如下)
W0_FIFO  W0_FIFO_0 (
  .rst(W0_FIFO_Rst),  // input wire rst
  .wr_clk(W0_wclk_i),  // input wire wr_clk
  .din(W0_data_i),        // input wire [31 : 0] din
  .wr_en(W0_wren_i),    // input wire wr_en
  .rd_clk(ui_clk),  // input wire rd_clk
  .rd_en(pkg_wr_en),    // input wire rd_en
  .dout(fifo_data),      // output wire [63 : 0] dout
  .rd_data_count(W0_rcnt)  // output wire [10 : 0] wr_data_count
);

视频中讲解: W0_rcnt达到256以后W0_REQ置1,然后pkg_wr_areq置1,pkg_wr_en输出1使能rd_en开始下次从FIFo取数,开始FDMA的brust计数直到256再开始一次brust,,,,



但是第一次的FIFO 读使能.rd_en(pkg_wr_en)从哪来?只有使能后才能读出来,才能读计数到达256,才能W0_REQ    <= (W0_rcnt    >= PKG_SIZE)置1,然后pkg_wr_areq置1,pkg_wr_en输出1。。。。。。或者说 W0_REQ怎么置1的。

不知道是不是我理解的问题,请汤老师详解一下??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

发表评论已发布 1

uisrc

发表于 2019-8-10 10:09:37 | 显示全部楼层

这个帖子前端时间肯定是沉入到海底了,我今天才看到
你可以看到我们设计了针对VS的采集滤波电路, 对VS进行可靠的采集和滤波,防止误触发

滤波电路如下
module fs_cap(
    input  clk_i,
    input  rstn_i,
    input  vs_i,
    input  s_rdy_i,
    output reg fs_cap_o
    );
   
//----CH0_CNT_FS信号电平计数 实际就是采样VS信号----------------
    reg[4:0]CNT_FS   = 6'b0;
    reg[4:0]CNT_FS_n = 6'b0;
    reg     FS       = 1'b0;
    reg[3:0]FS_TEM   =4'd0;
//----同步整形电路,之前没加整形电路导致总是采集vs出错-----
    always@(posedge clk_i) begin
        if(!rstn_i)begin
            FS_TEM <= 4'hf;
        end
        else begin
            FS_TEM <= {FS_TEM[3:0],vs_i};
        end
    end
     
    always@(posedge clk_i)begin
         if(!rstn_i) begin   
            CNT_FS    <= 5'd0;
            CNT_FS_n  <= 5'd0;
         end
         else if(FS_TEM[3]) begin
            CNT_FS   <= (CNT_FS <5'd30)? (CNT_FS+5'd1):5'd30;
            CNT_FS_n <= 5'd0;
         end
         else if(!FS_TEM[3])begin
            CNT_FS_n <= (CNT_FS_n <5'd30)?(CNT_FS_n+5'd1):5'd30;
            CNT_FS   <= 5'd0;
         end
    end
   
    always@(posedge clk_i) begin
         if(!rstn_i)begin
            FS <= 1'b1;
         end
         else if( CNT_FS  >= 5'd20)begin
            FS <= 1'b1;
         end
         else if( CNT_FS_n >= 5'd20)begin
            FS <= 1'b0;
         end
    end
   
    reg FS_r = 1'b0;
    always@(posedge clk_i) begin
         FS_r <= (!rstn_i) ?  1'b1 : FS;
    end
   
    always@(posedge clk_i) begin
         if(!rstn_i)begin
            fs_cap_o <= 1'd0;
         end
         else if({FS_r,FS} == 2'b01 && s_rdy_i == 1'b1 && fs_cap_o == 1'b0)begin
            fs_cap_o <= 1'b1;
         end
         else begin
            fs_cap_o <= 1'b0;
         end
    end
        
endmodule
从代码中可以看到VS从高电平到低电平就会产生一次VS的信号capture,之后,再读写各自的状态机中会对FIFO等做复位同步,这样设计的好处就是热插拔HDMI 视频信号就可以重新同步,而不会导致图像的错乱!
代码的设计非常合理,希望能够理解我的设计的思想!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
越努力越幸运!加油!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则