URL
https://opencores.org/ocsvn/qaz_libs/qaz_libs/trunk
Subversion Repositories qaz_libs
[/] [qaz_libs/] [trunk/] [video/] [src/] [avf_line_buffer.sv] - Rev 49
Compare with Previous | Blame | View Log
////////////////////////////////////////////////////////////////////////// //////// Copyright (C) 2019 Authors and OPENCORES.ORG //////// //////// This source file may be used and distributed without //////// restriction provided that this copyright statement is not //////// removed from the file and that any derivative work contains //////// the original copyright notice and the associated disclaimer. //////// //////// This source file is free software; you can redistribute it //////// and/or modify it under the terms of the GNU Lesser General //////// Public License as published by the Free Software Foundation; //////// either version 2.1 of the License, or (at your option) any //////// later version. //////// //////// This source is distributed in the hope that it will be //////// useful, but WITHOUT ANY WARRANTY; without even the implied //////// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //////// PURPOSE. See the GNU Lesser General Public License for more //////// details. //////// //////// You should have received a copy of the GNU Lesser General //////// Public License along with this source; if not, download it //////// from http://www.opencores.org/lgpl.shtml //////// //////////////////////////////////////////////////////////////////////////moduleavf_line_buffer #(N, U, L, AW)(axis_if axis_in,axis_if axis_out,input aclk,input aresetn);// --------------------------------------------------------------------localparam W = (N*8) + U + 1; // tdata + tuser + tlastlocalparam F = 2; // fanout for the buffer row output// --------------------------------------------------------------------axis_if #(.N(N), .U(U)) row_out[L][F](.*);axis_if #(.N(N), .U(U)) buffer_out[L-1](.*);wire [L-2:0] zero_pad;wire [L-2:0] initialized;wire all_initialized = &initialized;wire enable;wire eof_trailing = row_out[0][0].tready & row_out[0][0].tvalid & row_out[0][0].tuser[2];wire eof_leading = row_out[L-1][0].tready & row_out[L-1][0].tvalid & row_out[L-1][0].tuser[2];// --------------------------------------------------------------------generatefor(genvar j = 0; j < L-1; j++)begin: buffer_genavf_line_buffer_row #(N, W, AW, j)row_i(.axis_in(row_out[j+1][1]),.axis_out(buffer_out[j]),.zero_pad(zero_pad[j]),.initialized(initialized[j]),.*);endendgenerate// --------------------------------------------------------------------generatefor(genvar j = 1; j < L-1; j++)begin: middle_fanout_genaxis_fanout #(F)fanout_i(.axis_in(buffer_out[j]), .axis_out(row_out[j]), .*);endendgenerate// --------------------------------------------------------------------axis_fanout #(F) trailing_row_i(.axis_out(row_out[L-1]), .*);axis_alias leading_row_i(buffer_out[0], row_out[0][0]);// --------------------------------------------------------------------enum reg [3:0]{INITIALIZE = 4'b0001,ACTIVE = 4'b0010,// READY = 4'b0100,FLUSH = 4'b1000} state, next_state;// --------------------------------------------------------------------always_ff @(posedge aclk)if(~aresetn)state <= INITIALIZE;elsestate <= next_state;// --------------------------------------------------------------------always_combcase(state)INITIALIZE: if(all_initialized)next_state = ACTIVE;elsenext_state = INITIALIZE;ACTIVE: if(eof_leading)next_state = FLUSH;elsenext_state = ACTIVE;FLUSH: if(eof_trailing)next_state = INITIALIZE;elsenext_state = FLUSH;default: next_state = INITIALIZE;endcase// --------------------------------------------------------------------assign enable = (state == ACTIVE);// --------------------------------------------------------------------wire init = ((state == INITIALIZE) & (next_state == INITIALIZE));wire flush = ((state == FLUSH) & (next_state == FLUSH));axis_if #(.N(N), .U(U)) merge_in[L](.*);generatefor(genvar j = 0; j < L; j++)begin: merge_genaxis_alias row_i(row_out[j][0], merge_in[j]);endendgenerateavf_line_buffer_merge #(N, U, L) merge_i(.*);// --------------------------------------------------------------------endmodule
