OpenCores
URL https://opencores.org/ocsvn/pipelined_fft_64/pipelined_fft_64/trunk

Subversion Repositories pipelined_fft_64

[/] [pipelined_fft_64/] [trunk/] [RTL/] [WROM64.v] - Rev 12

Compare with Previous | Blame | View Log

/////////////////////////////////////////////////////////////////////
////                                                             ////
////  Twiddle factor ROM for 64-point FFT                        ////
////                                                             ////
////  Authors: Anatoliy Sergienko, Volodya Lepeha                ////
////  Company: Unicore Systems http://unicore.co.ua              ////
////                                                             ////
////  Downloaded from: http://www.opencores.org                  ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
////                                                             ////
//// Copyright (C) 2006-2010 Unicore Systems LTD                 ////
//// www.unicore.co.ua                                           ////
//// o.uzenkov@unicore.co.ua                                     ////
////                                                             ////
//// 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 SOFTWARE IS PROVIDED "AS IS"                           ////
//// AND ANY EXPRESSED OR IMPLIED WARRANTIES,                    ////
//// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED                  ////
//// WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT              ////
//// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.        ////
//// IN NO EVENT SHALL THE UNICORE SYSTEMS OR ITS                ////
//// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,            ////
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL            ////
//// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT         ////
//// OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,               ////
//// DATA, OR PROFITS; OR BUSINESS INTERRUPTION)                 ////
//// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,              ////
//// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT              ////
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING                 ////
//// IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,                 ////
//// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.          ////
////                                                             ////
/////////////////////////////////////////////////////////////////////
// Design_Version       : 1.0
// File name            : WROM64.v
// File Revision        : 
// Last modification    : Sun Sep 30 20:11:56 2007
/////////////////////////////////////////////////////////////////////
// FUNCTION: 1-port synchronous RAM
// FILES:    RAM64.v -single ported synchronous RAM
// PROPERTIES:
//1) Has 64 complex coefficients which form a table 8x8,
//and stay in the needed order, as they are addressed
//by the simple counter 
//2) 16-bit values are stored. When shorter bit width is set
//then rounding	is not used
//3) for FFT and IFFT depending on paramifft	       
/////////////////////////////////////////////////////////////////////
 
`timescale 1ps / 1ps
`include "FFT64_CONFIG.inc"	 
 
module WROM64 ( WI ,WR ,ADDR );
	`USFFT64paramnw	
 
	input [5:0] ADDR ;
	wire [5:0] ADDR ;
 
	output [nw-1:0] WI ;
	wire [nw-1:0] WI ;
	output [nw-1:0] WR ;
	wire [nw-1:0] WR ;
 
	parameter signed  [15:0] c0 = 16'h7fff;  
	parameter signed  [15:0] s0 = 16'h0000;   
	parameter signed  [15:0] c1 = 16'h7f62;   
	parameter signed  [15:0] s1 = 16'h0c8c;   
	parameter signed  [15:0] c2 = 16'h7d8a;   
	parameter signed  [15:0] s2 = 16'h18f9 ;   
	parameter signed  [15:0] c3 = 16'h7a7d;   
	parameter signed  [15:0] s3 = 16'h2528;   
	parameter signed  [15:0] c4 = 16'h7642;   
	parameter signed  [15:0] s4 = 16'h30fc;   
	parameter signed  [15:0] c5 = 16'h70e3;   
	parameter signed  [15:0] s5 = 16'h3c57;   
	parameter signed  [15:0] c6 = 16'h6a6e;   
	parameter signed  [15:0] s6 = 16'h471d ;   
	parameter signed  [15:0] c7 = 16'h62f2;   
	parameter signed  [15:0] s7 = 16'h5134;   
	parameter signed  [15:0] c8 = 16'h5a82;   
 
	parameter[31:0] w0= {c0,-s0};   
	parameter[31:0] w1= {c1,-s1};
	parameter[31:0] w2= {c2,-s2};
	parameter[31:0] w3= {c3,-s3};
	parameter[31:0] w4= {c4,-s4};
	parameter[31:0] w5= {c5,-s5};
	parameter[31:0] w6= {c6,-s6};
	parameter[31:0] w7= {c7,-s7};
	parameter[31:0] w8= {c8,-c8};
	parameter[31:0] w9= {s7,-c7};
	parameter[31:0] w10= {s6,-c6};
	parameter[31:0] w12= {s4,-c4};
	parameter[31:0] w14= {s2,-c2};
	parameter[31:0] w15= {s1,-c1};
	parameter[31:0] w16= {s0,-c0};
	parameter[31:0] w18= {-s2, -c2};
	parameter[31:0] w20= {-s4, -c4};
	parameter[31:0] w21= {-s5, -c5};
	parameter[31:0] w24= {-c8, -c8};
	parameter[31:0] w25= {-c7, -s7};
	parameter[31:0] w28= {-c4, -s4};
	parameter[31:0] w30= {-c2, -s2};
	parameter[31:0] w35= {-c3, s3};
	parameter[31:0] w36= {-c4, s4};
	parameter[31:0] w42= {-s6, c6};
	parameter[31:0] w49= {s1, c1};
 
	reg [31:0] wf [0:63] ;	 
	integer	i;
 
	always@(ADDR) begin
			//(w0, w0, w0,  w0,  w0,  w0,  w0,  w0,	 	0..7 // twiddle factors for FFT
			//	w0, w1, w2,  w3,  w4,  w5,  w6,  w7,   	8..15
			//	w0, w2, w4,  w6,  w8,  w10,w12,w14,	16..23
			//	w0, w3, w6,  w9,  w12,w15,w18,w21,	24..31
			//	w0, w4, w8,  w12,w16,w20,w24,w28,	32..47
			//	w0, w5, w10,w15,w20,w25,w30,w35,
			//	w0, w6, w12,w18,w24,w30,w36,w42,
			//	w0, w7, w14,w21,w28,w35,w42,w49);																
			for( i =0; i<8; i=i+1) 	 wf[i] =w0;					
			for( i =8; i<63; i=i+8)  wf[i] =w0;					
			wf[9] =w1 ; wf[10] =w2 ;    wf[11] =w3 ;wf[12] =w4 ;
			wf[13] =w5 ;wf[14] =w6 ;   wf[15] =w7 ;
			wf[17] =w2 ;wf[18] =w4 ;   wf[19] =w6 ;wf[20] =w8 ;
			wf[21] =w10 ;wf[22] =w12 ;wf[23] =w14;
			wf[25] =w3 ;wf[26] =w6 ;   wf[27] =w9 ;wf[28] =w12 ;
			wf[29] =w15 ;wf[30] =w18 ;wf[31] =w21;
			wf[33] =w4 ;wf[34] =w8 ;	wf[35] =w12 ;wf[36] =w16 ;
			wf[37] =w20 ;wf[38] =w24 ;wf[39] =w28;
			wf[41] =w5 ;wf[42] =w10 ;	wf[43] =w15 ;wf[44] =w20 ;
			wf[45] =w25 ;wf[46] =w30 ;wf[47] =w35;
			wf[49] =w6 ;wf[50] =w12 ;	wf[51] =w18 ;wf[52] =w24 ;
			wf[53] =w30 ;wf[54] =w36 ;wf[55] =w42;
			wf[57] =w7 ;wf[58] =w14 ;	wf[59] =w21 ;wf[60] =w28 ;
			wf[61] =w35 ;wf[62] =w42 ;wf[63] =w49;
		end
 
	parameter[31:0] wi0= {c0,s0};   
	parameter[31:0] wi1= {c1,s1};
	parameter[31:0] wi2= {c2,s2};
	parameter[31:0] wi3= {c3,s3};
	parameter[31:0] wi4= {c4,s4};
	parameter[31:0] wi5= {c5,s5};
	parameter[31:0] wi6= {c6,s6};
	parameter[31:0] wi7= {c7,s7};
	parameter[31:0] wi8= {c8,c8};
	parameter[31:0] wi9= {s7,c7};
	parameter[31:0] wi10= {s6,c6};
	parameter[31:0] wi12= {s4,c4};
	parameter[31:0] wi14= {s2,c2};
	parameter[31:0] wi15= {s1,c1};
	parameter[31:0] wi16= {s0,c0};
	parameter[31:0] wi18= {-s2, c2};
	parameter[31:0] wi20= {-s4, c4};
	parameter[31:0] wi21= {-s5, c5};
	parameter[31:0] wi24= {-c8, c8};
	parameter[31:0] wi25= {-c7, s7};
	parameter[31:0] wi28= {-c4, s4};
	parameter[31:0] wi30= {-c2, s2};
	parameter[31:0] wi35= {-c3, -s3};
	parameter[31:0] wi36= {-c4, -s4};
	parameter[31:0] wi42= {-s6, -c6};
	parameter[31:0] wi49= {s1, -c1};		 
 
	reg [31:0] wb [0:63] ;	 
	always@(ADDR) begin
	//initial begin #10;	
			//(w0, w0, w0,  w0,  w0,  w0,  w0,  w0,	 	 // twiddle factors for IFFT
			for( i =0; i<8; i=i+1) 	 wb[i] =wi0;					
			for( i =8; i<63; i=i+8)  wb[i] =wi0;					
			wb[9] =wi1 ; wb[10] =wi2 ;    wb[11] =wi3 ;wb[12] =wi4 ;
			wb[13] =wi5 ;wb[14] =wi6 ;   wb[15] =wi7 ;
			wb[17] =wi2 ;wb[18] =wi4 ;   wb[19] =wi6 ;wb[20] =wi8 ;
			wb[21] =wi10 ;wb[22] =wi12 ;wb[23] =wi14;
			wb[25] =wi3 ;wb[26] =wi6 ;   wb[27] =wi9 ;wb[28] =wi12 ;
			wb[29] =wi15 ;wb[30] =wi18 ;wb[31] =wi21;
			wb[33] =wi4 ;wb[34] =wi8 ;	wb[35] =wi12 ;wb[36] =wi16 ;
			wb[37] =wi20 ;wb[38] =wi24 ;wb[39] =wi28;
			wb[41] =wi5 ;wb[42] =wi10 ;	wb[43] =wi15 ;wb[44] =wi20 ;
			wb[45] =wi25 ;wb[46] =wi30 ;wb[47] =wi35;
			wb[49] =wi6 ;wb[50] =wi12 ;	wb[51] =wi18 ;wb[52] =wi24 ;
			wb[53] =wi30 ;wb[54] =wi36 ;wb[55] =wi42;
			wb[57] =wi7 ;wb[58] =wi14 ;	wb[59] =wi21 ;wb[60] =wi28 ;
			wb[61] =wi35 ;wb[62] =wi42 ;wb[63] =wi49;
		end	  
 
	wire[31:0] reim;		
 
	`ifdef USFFT64paramifft
	assign reim = wb[ADDR];
	`else
	assign reim = wf[ADDR];
	`endif
 
	assign WR =reim[31:32-nw];
	assign WI=reim[15 :16-nw];
 
 
endmodule
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.