zoukankan      html  css  js  c++  java
  • JPEG解码:反DCT变换(四)

    反DCT变换的整个模块要经过2次矩阵相乘2次转秩,其实这两个矩阵相乘和转秩都是类似的,不同的是位宽有点区别,大同小异。

    反DCT变换的最顶层模块:

    idc
     1 `timescale 1ps / 1ps
    2 module idct (
    3 clk,
    4 rst_n,
    5 datain_en,
    6 datain,
    7 idct_dataout_en,
    8 idct_dataout
    9 );
    10
    11
    12 input clk;
    13 input rst_n;
    14 input datain_en;
    15 input [11:0]datain;
    16
    17 output idct_dataout_en;
    18 output [13:0]idct_dataout;
    19 //---------------------------------------------------------------
    20 wire OutEnable_1d;
    21 wire [13:0]OutData_1d;
    22 idct_1d u1 (
    23 .clk (clk ),
    24 .rst_n (rst_n ),
    25 .datain_en (datain_en ),
    26 .datain (datain ),
    27 .dataout_en (OutEnable_1d ),
    28 .dataout (OutData_1d )
    29 );
    30
    31 //---------------------------------------------------------------
    32 wire RamOutEnable;
    33 wire [13:0]RamOutData;
    34 idct_ram_control u2 (
    35 .clk (clk ),
    36 .rst_n (rst_n ),
    37 .datain (OutData_1d ),
    38 .datain_en (OutEnable_1d ),
    39 .dataout (RamOutData ),
    40 .dataout_en (RamOutEnable )
    41 );
    42 //---------------------------------------------------------------
    43 wire OutEnable_2d;
    44 wire [7:0]DataOut_2d;
    45 idct_2d u3 (
    46 .clk (clk ),
    47 .rst_n (rst_n ),
    48 .datain_en (RamOutEnable ),
    49 .datain (RamOutData ),
    50 .dataout_en (OutEnable_2d ),
    51 .dataout (DataOut_2d )
    52 );
    53
    54 //--------------------------------------------------------------
    55 wire [13:0]q;
    56 idct_ram_control u4 (
    57 .clk (clk ),
    58 .rst_n (rst_n ),
    59 .datain ({6'b000000,DataOut_2d}),
    60 .datain_en (OutEnable_2d ),
    61 .dataout ( q ),
    62 .dataout_en (idct_dataout_en )
    63 );
    64
    65 assign idct_dataout=q[7:0];
    66 endmodule
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79

    idct_1d和idct_2d分别表示第一次和第二次反DCT变换,比较类似,

    2d
     1 //------------------------------------------------------------------------------
    2 //计算结果
    3 always@(posedge clk or negedge rst_n)
    4 if(~rst_n)
    5 suma_out<=32'b0;
    6 else
    7 suma_out<=(suma1_reg+suma2_reg)+(suma3_reg+suma4_reg);
    8
    9
    10 //IDCT转换的结果必须在 -128-127之间。
    11 assign dataout=((!suma_out[31]&suma_out[23]))?8'h7f:
    12 ((suma_out[31]&(!suma_out[23]))?8'h80:suma_out[23:16]);
    13

    不同的地方除了位宽不同还有就是上面的第10行开始,取结果的8位,并且判断-128—127之间。

  • 相关阅读:
    解决无法进入安全模式
    解决SQLite找不到数据表的问题
    利用js的垃圾回收原理来理解闭包(Closure)问题
    《降级论》《按时交作业的学生何以常穿脏袜子》读后感
    ie6下出现“缺少标识符、字符串或者数字”
    两个想法
    WdatePicker.js帮助文档
    最近一直在研究网站的推广。。。
    这个。。。。我不知道说什么。。。
    今天忽然发现,最近做的网站的一个目标关键字已经实现了。。。
  • 原文地址:https://www.cnblogs.com/tony1224/p/2415548.html
Copyright © 2011-2022 走看看