Line 1... |
Line 1... |
//
|
/**********************************************************************
|
// File: mtx_trps_8x8_dpsram.v
|
* File : mtx_trps_8x8_dpsram.v
|
// Author: Ivan Rezki
|
* Author: Ivan Rezki
|
// Topic: RTL Core
|
* email : irezki@gmail.com
|
// 2-Dimensional Fast Hartley Transform
|
* Topic : RTL Core
|
//
|
* 2-Dimensional Fast Hartley Transform
|
|
*
|
// Matrix Transpose 8x8
|
*
|
// DPSRAM-based Double Buffer
|
* Matrix Transpose 8x8
|
// Buffer size is 64*2 words, each word is 16 bits
|
* DPSRAM-based Double Buffer
|
|
* Buffer size is 64*2 words, each word is 16 bits
|
// Matrix Transpose -> 64 clk delay
|
*
|
// - Double Buffer Solution:
|
* Matrix Transpose -> 64 clk delay
|
|
* - Double Buffer Solution:
|
|
*
|
|
* RIGHT TO USE: This code example, or any portion thereof, may be
|
|
* used and distributed without restriction, provided that this entire
|
|
* comment block is included with the example.
|
|
*
|
|
* DISCLAIMER: THIS CODE EXAMPLE IS PROVIDED "AS IS" WITHOUT WARRANTY
|
|
* OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED
|
|
* TO WARRANTIES OF MERCHANTABILITY, FITNESS OR CORRECTNESS. IN NO
|
|
* EVENT SHALL THE AUTHOR OR AUTHORS BE LIABLE FOR ANY DAMAGES,
|
|
* INCLUDING INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF THE
|
|
* USE OF THIS CODE.
|
|
**********************************************************************/
|
|
|
module mtx_trps_8x8_dpsram (
|
module mtx_trps_8x8_dpsram (
|
rstn,
|
rstn,
|
sclk,
|
sclk,
|
|
|
Line 51... |
Line 63... |
wire [15:0] wr_DATA;
|
wire [15:0] wr_DATA;
|
wire [ 6:0] wr_ADDR;
|
wire [ 6:0] wr_ADDR;
|
wire wr_CSN;
|
wire wr_CSN;
|
wire wr_WEN;
|
wire wr_WEN;
|
|
|
wire [15:0] rd_DATA;
|
|
wire [ 6:0] rd_ADDR;
|
wire [ 6:0] rd_ADDR;
|
wire rd_CSN;
|
wire rd_CSN;
|
|
|
|
`ifdef USE_FPGA_SPSRAM
|
|
wire [15:0] rd_DATA;
|
dpsram_128x16 u_dpsram(
|
dpsram_128x16 u_dpsram(
|
.addra (wr_ADDR),
|
.addra (wr_ADDR),
|
.addrb (rd_ADDR),
|
.addrb (rd_ADDR),
|
.clka (sclk),
|
.clka (sclk),
|
.clkb (sclk),
|
.clkb (sclk),
|
Line 69... |
Line 82... |
.ena (wr_CSN),
|
.ena (wr_CSN),
|
.enb (rd_CSN),
|
.enb (rd_CSN),
|
.wea (wr_WEN),
|
.wea (wr_WEN),
|
.web (1'b1)
|
.web (1'b1)
|
);
|
);
|
|
`endif
|
|
|
|
`ifdef USE_ASIC_SPSRAM
|
|
reg [15:0] rd_DATA = 16'd0;
|
|
reg [15:0] sram[0:127];
|
|
always @(posedge sclk)
|
|
if (~wr_WEN && ~wr_CSN) sram[wr_ADDR] <= wr_DATA; // Write
|
|
always @(posedge sclk)
|
|
if ( 1'b1 && ~rd_CSN) rd_DATA <= sram[rd_ADDR]; // Read
|
|
`endif
|
|
|
always @(posedge sclk or negedge rstn)
|
always @(posedge sclk or negedge rstn)
|
if (!rstn) cnt128d_wr <= #1 0;
|
if (!rstn) cnt128d_wr <= #1 0;
|
else if (inp_valid) cnt128d_wr <= #1 cnt128d_wr + 1;
|
else if (inp_valid) cnt128d_wr <= #1 cnt128d_wr + 1;
|
|
|
Line 113... |
Line 136... |
|
|
assign #1 mem_data = rd_DATA[N-1:0];
|
assign #1 mem_data = rd_DATA[N-1:0];
|
|
|
// synopsys translate_off
|
// synopsys translate_off
|
// <<<------------- DUMP Section
|
// <<<------------- DUMP Section
|
|
/*
|
// 2D FHT OUTPUT DUMP DATA
|
// 2D FHT OUTPUT DUMP DATA
|
parameter MEM_TRPS_DPSRAM_FILE = "./result/mem_trps_dpsram.txt";
|
parameter MEM_TRPS_DPSRAM_FILE = "./result/mem_trps_dpsram.txt";
|
integer mem_trps_dpsram_dump;
|
integer mem_trps_dpsram_dump;
|
initial mem_trps_dpsram_dump = $fopen(MEM_TRPS_DPSRAM_FILE);
|
initial mem_trps_dpsram_dump = $fopen(MEM_TRPS_DPSRAM_FILE);
|
|
|
always @(posedge sclk)
|
always @(posedge sclk)
|
if (mem_valid) $fdisplay(mem_trps_dpsram_dump,"%h",mem_data);
|
if (mem_valid) $fdisplay(mem_trps_dpsram_dump,"%h",mem_data);
|
|
*/
|
// synopsys translate_on
|
// synopsys translate_on
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|