|
<##//////////////////////////////////////////////////////////////////
|
|
//// ////
|
|
//// Author: Eyal Hochberg ////
|
|
//// eyal@provartec.com ////
|
|
//// ////
|
|
//// Downloaded from: http://www.opencores.org ////
|
|
/////////////////////////////////////////////////////////////////////
|
|
//// ////
|
|
//// Copyright (C) 2010 Provartec LTD ////
|
|
//// www.provartec.com ////
|
|
//// info@provartec.com ////
|
|
//// ////
|
|
//// 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.////
|
|
//// ////
|
|
//// 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. http://www.gnu.org/licenses/lgpl.html ////
|
|
//// ////
|
|
//////////////////////////////////////////////////////////////////##>
|
|
|
OUTFILE fir_MAC_NUMserial_TOPO.v
|
OUTFILE fir_MAC_NUMserial_TOPO.v
|
|
|
ITER CX COEFF_NUM
|
ITER CX COEFF_NUM
|
ITER MX MAC_NUM
|
ITER MX MAC_NUM
|
ITER DX SON_DELAY
|
ITER DX SON_DELAY
|
|
|
// Built In Parameters:
|
// Built In Parameters:
|
//
|
//
|
// Filter Order = ORDER
|
// Filter Order = ORDER
|
// Input Precision = DIN_BITS
|
// Input Precision = DIN_BITS
|
// Coefficient Precision = COEFF_BITS
|
// Coefficient Precision = COEFF_BITS
|
// Sum of Products Latency = LATENCY
|
// Sum of Products Latency = LATENCY
|
// Number of serial FIR sons = MAC_NUM
|
// Number of serial FIR sons = MAC_NUM
|
// Number of multiplayers = MAC_NUM
|
// Number of multiplayers = MAC_NUM
|
|
|
|
|
module fir_MAC_NUMserial_TOPO (PORTS);
|
module fir_MAC_NUMserial_TOPO (PORTS);
|
|
|
input clk;
|
input clk;
|
input reset;
|
input reset;
|
input clken;
|
input clken;
|
input [EXPR(COEFF_BITS-1):0] kCX;
|
input [EXPR(COEFF_BITS-1):0] kCX;
|
input [EXPR(DIN_BITS-1):0] data_in;
|
input [EXPR(DIN_BITS-1):0] data_in;
|
output [EXPR(DOUT_BITS-1):0] data_out;
|
output [EXPR(DOUT_BITS-1):0] data_out;
|
output valid;
|
output valid;
|
|
|
|
|
wire [EXPR(DIN_BITS-1):0] data_inMX;
|
wire [EXPR(DIN_BITS-1):0] data_inMX;
|
wire [EXPR(SON_DOUT-1):0] data_outMX;
|
wire [EXPR(SON_DOUT-1):0] data_outMX;
|
wire validMX;
|
wire validMX;
|
wire null;
|
wire null;
|
|
|
//delay inputs per son
|
//delay inputs per son
|
assign data_in0 = data_in;
|
assign data_in0 = data_in;
|
CREATE prgen_delayN.v DEFCMD(SWAP CONST(DELAY) SON_DELAY) DEFCMD(DEFINE CLKEN)
|
CREATE prgen_delayN.v DEFCMD(SWAP CONST(DELAY) SON_DELAY) DEFCMD(DEFINE CLKEN)
|
prgen_delaySON_DELAY_en #(DIN_BITS) delay_dinMX (clk, reset, clken, data_inMX, data_inEXPR(MX+1));
|
prgen_delaySON_DELAY_en #(DIN_BITS) delay_dinMX (clk, reset, clken, data_inMX, data_inEXPR(MX+1));
|
STOMP LINE
|
STOMP LINE
|
|
|
|
|
//the FIR sons
|
//the FIR sons
|
LOOP MX MAC_NUM
|
LOOP MX MAC_NUM
|
CREATE fir_serial.v def_fir_basic.txt DEFCMD(SWAP CONST(ORDER) EXPR(SON_DELAY-1)) DEFCMD(SWAP CONST(COEFF_BITS) COEFF_BITS) DEFCMD(SWAP CONST(DIN_BITS) DIN_BITS)
|
CREATE fir_serial.v def_fir_basic.txt DEFCMD(SWAP CONST(ORDER) EXPR(SON_DELAY-1)) DEFCMD(SWAP CONST(COEFF_BITS) COEFF_BITS) DEFCMD(SWAP CONST(DIN_BITS) DIN_BITS)
|
fir_serial_EXPR(SON_DELAY-1)_INPUT_BITS firMX
|
fir_serial_EXPR(SON_DELAY-1)_INPUT_BITS firMX
|
(
|
(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.reset(reset),
|
.clken(clken),
|
.clken(clken),
|
.kDX(kEXPR((MX*SON_DELAY)+DX)) ,
|
.kDX(kEXPR((MX*SON_DELAY)+DX)) ,
|
.data_in(data_inMX),
|
.data_in(data_inMX),
|
.data_out(data_outMX),
|
.data_out(data_outMX),
|
.valid(validMX)
|
.valid(validMX)
|
);
|
);
|
|
|
ENDLOOP MX
|
ENDLOOP MX
|
|
|
//Pipline the output additions
|
//Pipline the output additions
|
CREATE bintree_adder.v DEFCMD(SWAP INPUT_NUM MAC_NUM)
|
CREATE bintree_adder.v DEFCMD(SWAP INPUT_NUM MAC_NUM)
|
bintree_adder_MAC_NUM #(SON_DOUT) bintree_adder
|
bintree_adder_MAC_NUM #(SON_DOUT) bintree_adder
|
(
|
(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.reset(reset),
|
.data_inMX(data_outMX),
|
.data_inMX(data_outMX),
|
IF TRUE(ADD_DOUT!=DOUT_BITS) .data_out({null, data_out}),
|
IF TRUE(ADD_DOUT!=DOUT_BITS) .data_out({null, data_out}),
|
IF TRUE(ADD_DOUT==DOUT_BITS) .data_out(data_out),
|
IF TRUE(ADD_DOUT==DOUT_BITS) .data_out(data_out),
|
.valid_in(valid0),
|
.valid_in(valid0),
|
.valid_out(valid)
|
.valid_out(valid)
|
);
|
);
|
|
|
endmodule
|
endmodule
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|