Advertisement
Guest User

Untitled

a guest
Jul 18th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns/1ps
  2.  
  3. module dct(clk, rst, in, out);
  4.  
  5.    parameter g_vec_size = 8;
  6.    parameter g_data_width = 16;
  7.  
  8.    input     clk;
  9.    input     rst;
  10.    input [g_vec_size*g_data_width-1:0] in;
  11.    output [g_vec_size*g_data_width-1:0] out;
  12.  
  13.    wire [g_data_width-1:0]              in_vec[0:g_vec_size-1];
  14.    wire [g_data_width-1:0]              out_vec[0:g_vec_size-1];
  15.  
  16.    reg [g_data_width-1:0]               matrix[0:g_vec_size-1][0:g_vec_size-1];
  17.    reg [g_data_width-1:0]               out_reg[0:g_vec_size-1];
  18.  
  19.    initial begin
  20.       matrix[0][0] = 23170;
  21.       matrix[0][1] = 23170;
  22.       matrix[0][2] = 23170;
  23.       matrix[0][3] = 23170;
  24.       matrix[0][4] = 23170;
  25.       matrix[0][5] = 23170;
  26.       matrix[0][6] = 23170;
  27.       matrix[0][7] = 23170;
  28.  
  29.       matrix[1][0] = 32138;
  30.       matrix[1][1] = 27245;
  31.       matrix[1][2] = 18204;
  32.       matrix[1][3] = 6392;
  33.       matrix[1][4] = -6392;
  34.       matrix[1][5] = -18204;
  35.       matrix[1][6] = -27245;
  36.       matrix[1][7] = -32138;
  37.  
  38.       matrix[2][0] = 30273;
  39.       matrix[2][1] = 12539;
  40.       matrix[2][2] = -12539;
  41.       matrix[2][3] = -30273;
  42.       matrix[2][4] = -30273;
  43.       matrix[2][5] = -12539;
  44.       matrix[2][6] = -12539;
  45.       matrix[2][7] = 30273;
  46.  
  47.       matrix[3][0] = 27245;
  48.       matrix[3][1] = -6392;
  49.       matrix[3][2] = -32138;
  50.       matrix[3][3] = -18204;
  51.       matrix[3][4] = 18204;
  52.       matrix[3][5] = -32138;
  53.       matrix[3][6] = 6392;
  54.       matrix[3][7] = -27245;
  55.  
  56.       matrix[4][0] = 23170;
  57.       matrix[4][1] = -23170;
  58.       matrix[4][2] = -23170;
  59.       matrix[4][3] = 23170;
  60.       matrix[4][4] = 23170;
  61.       matrix[4][5] = -23170;
  62.       matrix[4][6] = -23170;
  63.       matrix[4][7] = 23170;
  64.  
  65.       matrix[5][0] = 18204;
  66.       matrix[5][1] = -32138;
  67.       matrix[5][2] = 6392;
  68.       matrix[5][3] = 27245;
  69.       matrix[5][4] = -27245;
  70.       matrix[5][5] = -6392;
  71.       matrix[5][6] = 32138;
  72.       matrix[5][7] = -18204;
  73.  
  74.       matrix[6][0] = 12539;
  75.       matrix[6][1] = -30273;
  76.       matrix[6][2] = 30273;
  77.       matrix[6][3] = -12539;
  78.       matrix[6][4] = -12539;
  79.       matrix[6][5] = 30273;
  80.       matrix[6][6] = -30273;
  81.       matrix[6][7] = 12539;
  82.  
  83.       matrix[7][0] = 6392;
  84.       matrix[7][1] = -18204;
  85.       matrix[7][2] = 27245;
  86.       matrix[7][3] = -32138;
  87.       matrix[7][4] = 32138;
  88.       matrix[7][5] = -27245;
  89.       matrix[7][6] = 18204;
  90.       matrix[7][7] = -6392;
  91.    end
  92.  
  93.    genvar g;
  94.  
  95.    generate
  96.       for (g = 0; g < g_vec_size; g = g + 1) begin
  97.          assign in_vec[g] = in[g_data_width * (g + 1) - 1 : g_data_width * g];
  98.          assign out[g_data_width * (g + 1) - 1 : g_data_width * g] = out_vec[g];
  99.          assign out_vec[g] = out_reg[g];
  100.       end
  101.    endgenerate
  102.  
  103.    integer      i;
  104.    integer      j;
  105.  
  106.    always @(posedge clk or posedge rst)
  107.      begin
  108.         if (rst == 1)
  109.           for (i = 0; i < g_vec_size; i = i + 1) begin
  110.              out_reg[i] = 0;
  111.           end
  112.         else
  113.           for (i = 0; i < 8; i = i + 1) begin
  114.              for (j = 0; j < 8; j = j + 1) begin
  115.                 out_reg[i] = out_reg[i] + matrix[i][j] * in_vec[j];
  116.              end
  117.           end
  118.      end
  119. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement