Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 70 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
70
Dung lượng
1,97 MB
Nội dung
HA NOI UNIVERSITY OF SCIENCE AND TECHNOLOGY ELECTRICAL AND ELECTRONICS ENGINEERING Digital System Design II Pipelined 128 points FFT/IFFT Instructor: Nguyen Duc Minh Class: ET-E4 K63 Team: 11 Member 1: Le Bao Ngoc -20182930 Member 2: Vu Minh Nhat-20182931 Member 2: Vu Minh Duct-20182911 TABLE OF CONTENTS I)Overview of our project II)Specification III)FFT-128 Algorithm IV)ASMD and block diagram of FFT-128 V)Implement Algorithm on C++ VI)Implentation And Result VII)Acknowledgement I)Overview of our project 1)Introduction In our electronics and telecommunications industry, spectrum analysis such as energy spectrum, amplitude spectrum, phase spectrum of signals in general and spectrum of digital signals in particular in the frequency domain plays a very important role It tells us how the frequency components contribute to the signal, how their energy is, how to use energy effectively… From that we have a way to handle that signal appropriately The problem is how to transform the digital signal from the time domain to the frequency domain to observe its spectrum The simplest answer is to use the Discrete Fourier Transform (DFT) Discrete Fourier transform is used in many fields, it is used in speech processing, image processing, It would not be an exaggeration to say that anything related to digital signal processing requires Fourier transforms However, the use of discrete Fourier transform has a problem, that is, the computation is relatively complicated when the data length to be calculated increases But as we know an image file, or any signal, is usually quite long, so if you just calculate the DFT normally, the execution time will be very long and complicated, so it won't satisfied time requirements Although the DFT machine produces good products, but the speed is too slow, the manufacturer will certainly not be satisfied at all That is why the fast Fourier transform (FFT) algorithm Transform) was created 2)Overview of FFT The idea of the FFT algorithm is the divide-and-conquer technique Instead of calculating the DFT for an entire signal with a large length, we will perform a DFT calculation for each smaller signal segment in that signal and then from the obtained result we calculate the DFT of the original signal to be calculated first FFT has a very important role: - FFT has improved the speed and accuracy of digital signal processing - FFT opens up a very wide field of spectrum analysis: telecommunications, astronomy, geophysics management, medical diagnosis,… - The FFT has rekindled the interests of many branches of mathematics that were previously fully exploited - FFT has laid the foundation for computing other transformations such as Walsh transform,Hamadard transform, Haar transform,… => Idea: Center’s goal is a FFT algorithm/architecture with the programmability necessary to meet the variety of functional FFT demands of future wireless and other signal processing applications So, our project of the FFT128 core architecture to explain its proper use FFT128 soft core is the unit to perform the Fast Fourier Transform (FFT) It performs one dimensional 128 – complex point FFT The data and coefficient widths are adjustable in the range to 16 II)Specification 1)Interface: The FFT128 processor has the minimum multiplier number which is equal to This fact makes this core attractive to implement in ASIC When configuring in Xilinx FPGA, these multipliers are implemented in DSP48 units respectively The customer can select the input data, output data, and coefficient widths which provide application dynamic range needs This can minimize both logic hardware and memory volume *Signal Description: Signal CLK RST start n[6:0] DR[15:0] DI[15:0] fft_ready shift[3:0] DOR[19:0] DIR[19:0] k[6:0] Output_ready OVF1 OVF2 Type Input Input Input Input Input Input Input Input Output Output Output Output Output Output Description Global clock Global reset FFT Start Address of input data Input data real sample Input data imaginary sample Input data accepting fft ready Shift left code Output data real sample Output data imaginary sample Result number or address Output data of FFT ready Overflag of output data real Overflag of output imaginary real *Note: input and output data are represented by 16 and 20 bit twos complement complex integers, respectively The twiddle coefficients are 16bit wide numbers 2)Typical core interconnection The core interconnection depends on the application nature where it is used The simple core interconnection considers the calculation of the unlimited data stream which are inputted in each clock cycle The data source, for example, the analog-to-digital converter, FFT128 is the core, which is customized as one with inner data buffers The FFT algorithm starts with the impulse START The respective results are outputted after the READY impulse and followed by the address code ADDR The signal START is needed for the global synchronization, and can be generated once before the system operation The input data have the natural order, and can be numbered from to 63 When inner data buffers are configured then the output data have the natural order When inner data buffers are configured then the output data have the 8-th inverse order, the order is 0,8,16, 56,1,9,17, III)FFT-128 Algorithm 1)Basic of FFT algorithm *From the radix2 FFT, we now have other bases like radix 4, radix 8, along with various types of FFT calculation constructs such as parallelism, SDF(single delay feedback), MDC (multipath delay commutator), in-place (in-place),floods, increasingly affirm the important role of FFT Here we only study the DIF frequency division FFT Let x[n] be a sequence of length N The discrete Fourier transform DFT of x[n] is calculated according to the following formula: (1) 2π If we set W knN =e− j N kn , this coefficients is called twiddle factor, this formula ca nbe written as: a)FFT radix-2 Detail of FFT-radix 2: From formula (2),we can have: Divide X1 and X2 is N-points DFT Transform FFT radix-2 butterfly model The above architecture is called the butterfly architecture, which is a fundamental element in all FFT computing techniques Thus, the number of real multiplications N to be performed is the number of real calculation needed: 4( ¿ ¿ = N => Thus, the number of calculations to be performed has been significantly reduced compared to performing a direct DFT calculation of the sequence x[n] To achieve even more efficiency we divide the sequence x1(n) and x2(n) into subsequences Here is a comparison table of the number of complex calculations that need to be performed between calculating DFT directly and the use of FFT radix-2: b)FFT radix-4 The essence of this algorithm is to combine radix-2 bases into radix-4 base However, the radix-4 algorithm has advantage over the radix-2 algorithm We see that, for every radix-2 bases, we have to multiply the twiddle factor, which remains radix-4 We just multiply the twiddle factor after the 2nd layer and the previous layer just multiply with coefficient -j - trivial coefficient, so when done by computer will reduce the number of complex calculations and improve the complexity 2)Algorithm of FFT-128 An 128-point DFT computes a sequence x(n) of 128 complex-valued numbers given another sequence of data X(k) of length 128 according to the formula(k = to 127): (1) To simplify the notation, the complex-valued phase factor e –j2nk/128 is: W128 = cos(2/128) – j sin(2/128) =>The FFT algorithms take advantage of the symmetry and periodicity properties of W128n to greatly reduce the number of calculations that the DFT requires In an FFT implementation the real and imaginary components of twiddle factors The basic of the FFT is that a DFT can be divided into smaller DFTs In the processor FFT128 a mixed radix and 16 FFT algorithm is used It divides DFT into two smaller DFTs of the length and 16, as it is shown in the formula: b[7][4] = 98133.22+246292.69i 11111 0111111101 11111 1111111111 b[7][5] = 315524.47+234315.06i 11111 1111111111 11111 1111111111 b[7][6] = -62212.00+-26687.47i 11110 1110011000 11101 1010000100 b[7][7] = -194484.47+41739.19i 11111 1111111111 11110 0100011000 b[8][0] = -14545.19+-128961.22i 11100 1100011010 11111 1111011111 b[8][1] = 95847.44+-145785.47i 11111 0111011010 11111 1111111111 b[8][2] = -172053.22+199310.34i 11111 1111111111 11111 1111111111 b[8][3] = 26420.79+232521.31i 11101 1001110011 11111 1111111111 b[8][4] = -232156.75+238695.28i 11111 1111111111 11111 1111111111 b[8][5] = 265438.56+140123.47i 11111 1111111111 11111 1111111111 b[8][6] = -67068.81+164107.66i 11111 0000011000 11111 1111111111 b[8][7] = 98133.22+246292.69i 11111 0111111101 11111 1111111111 b[9][0] = 473152.00+378656.00i 11111 1111111111 11111 1111111111 b[9][1] = -119255760.00+-79477920.00i 11111 1111111111 11111 1111111111 b[9][2] = -44412144.00+107713128.00i 11111 1111111111 11111 1111111111 b[9][3] = -68875792.00+-13955128.00i 11111 1111111111 11111 1111111111 b[9][4] = 166352.00+215054688.00i 11111 1111111111 11111 1111111111 b[9][5] = 102260928.00+-20779862.00i 11111 1111111111 11111 1111111111 b[9][6] = 107616392.00+259506272.00i 11111 1111111111 11111 1111111111 b[9][7] = 597596288.00+-399871232.00i 11111 1111111111 11111 1111111111 b[10][0] = 521046.62+-325177.88i 11111 1111111111 11111 1111111111 b[10][1] = -349903.88+349044.12i 11111 1111111111 11111 1111111111 b[10][2] = -112325.67+316327.75i 11111 1011011011 11111 1111111111 b[10][3] = -39048.58+-26262.25i 11110 0011000100 11101 1001101001 b[10][4] = -82777.97+25873.89i 11111 0100001101 11101 1001010001 b[10][5] = 87888.97+13034.93i 11111 0101011101 11100 1001011101 b[10][6] = 10090.28+-41235.25i 11100 0011101101 11110 0100001001 b[10][7] = 315524.47+234315.06i 11111 1111111111 11111 1111111111 b[11][0] = 802654.00+290248.00i 11111 1111111111 11111 1111111111 b[11][1] = 2973330944.00+-591657984.00i 11111 1111111111 11111 1111111111 b[11][2] = 537231.38+4731880960.00i 11111 1111111111 11111 1111111111 b[11][3] = -2973127424.00+-591014784.00i 11111 1111111111 11111 1111111111 b[11][4] = 269118.00+812888.00i 11111 1111111111 11111 1111111111 b[11][5] = -885129472.00+-591250048.00i 11111 1111111111 11111 1111111111 b[11][6] = 467928.62+858560.00i 11111 1111111111 11111 1111111111 b[11][7] = -395038912.00+-591297536.00i 11111 1111111111 11111 1111111111 b[12][0] = 192538.27+-499212.94i 11111 1111111111 11111 1111111111 b[12][1] = -260158.02+-511264.12i 11111 1111111111 11111 1111111111 b[12][2] = 102383.93+219354.16i 11111 1001000000 11111 1111111111 b[12][3] = -30952.76+-241507.16i 11101 1110001111 11111 1111111111 b[12][4] = 60944.11+146385.39i 11110 1101110001 11111 1111111111 b[12][5] = 9795.65+-37228.34i 11100 0011001000 11110 0010001011 b[12][6] = -12323.17+3856.47i 11100 1000000100 11010 1110001000 b[12][7] = -62212.00+-26687.47i 11110 1110011000 11101 1010000100 b[13][0] = 645272.00+380984.00i 11111 1111111111 11111 1111111111 b[13][1] = -27354.38+47669.89i 11101 1010101110 11110 0111010010 b[13][2] = 909136.00+347344.00i 11111 1111111111 11111 1111111111 b[13][3] = 305379.62+20842.20i 11111 1111111111 11101 0100010111 b[13][4] = 176400.02+851808.00i 11111 1111111111 11111 1111111111 b[13][5] = 40534.06+6719.95i 11110 0011110011 11011 1010010000 b[13][6] = 442792.00+848920.00i 11111 1111111111 11111 1111111111 b[13][7] = 238008.66+3944.60i 11111 1111111111 11010 1110110100 b[14][0] = 266097.38+-119806.88i 11111 1111111111 11111 1101010000 b[14][1] = -1516922.62+1313029.12i 11111 1111111111 11111 1111111111 b[14][2] = 36940.27+-123510.10i 11110 0010000010 11111 1110001010 b[14][3] = -72998.95+-57996.77i 11111 0001110101 11110 1100010100 b[14][4] = -18900.14+-221693.56i 11101 0010011101 11111 1111111111 b[14][5] = 112692.78+79197.13i 11111 1011100001 11111 0011010101 b[14][6] = 88507.09+36214.27i 11111 0101100111 11110 0001101100 b[14][7] = -194484.47+41739.19i 11111 1111111111 11110 0100011000 b[15][0] = 549304.00+485144.00i 11111 1111111111 11111 1111111111 b[15][1] = -99656.21+45452.12i 11111 1000010101 11110 0110001100 b[15][2] = 768856.00+454880.00i 11111 1111111111 11111 1111111111 b[15][3] = -42461.36+12117.91i 11110 0100101111 11100 0111101011 b[15][4] = 76824.00+434080.03i 11111 0010110000 11111 1111111111 b[15][5] = 312264.66+-10280.56i 11111 1111111111 11100 0100000101 b[15][6] = 396856.00+947416.00i 11111 1111111111 11111 1111111111 b[15][7] = 248540.66+-19685.41i 11111 1111111111 11101 0011001110 VI)Implentation And Result 1)Main Verilog code for pipelined FFT-128(each module’s code in main modue of FFT-128 will be attach with my report) 2)Create testbench Input data waveform: Output data waveform: SQR Calculator Output Waveform On Modelsim RTL Schematic Of Design *Synthesis On Vivado: Synthesis overview on chip xc7a100tcsg324-3 Post-implementation after utilization The following table illustrates the performance of the FFT128 core with two data buffers based on BlockRAMs in Xilinx Virtex device when implementing 128point FFT for 10 and 16-bit data and coefficients Note that DSP48 units in all projects are used The results are derived using the Xilinx ISE 9.1 tool VII)Acknowledgement - Find out about the company structure, the positions that graduates can apply later recruit - Improve soft skills such as teamwork, planning, time division time, communication - Orientation to jobs after graduation, improve basic knowledge department, specializing in electronics - See the shortcomings and limitations of your own knowledge and skills to can be replenished in a timely manner - Applying knowledge learned in class and self-finding knowledge solve the problem - Learn more useful knowledge such as programming MatLab, C++, Verilog language - A preliminary understanding of the hardware verification process in IC design ... -ROTATOR128 – complex multiplier with twiddle factor ROM, described in ROTATOR128.v, WROM128.v; -CT128 – counter modulo 128 Below all the components are described more precisely *BUFRAM128: BUFRAM128... CONTENTS I)Overview of our project II) Specification III)FFT -128 Algorithm IV)ASMD and block diagram of FFT -128 V)Implement Algorithm on C++ VI)Implentation And Result VII)Acknowledgement I)Overview... Block diagram of the FFT128 core with two data buffers Components: -BUFRAM128 – data buffer with row writing and column reading, described in BUFRAM128C.v, RAM2x128C.v, RAM128.v -FFT8 – datapath,