• 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之间。

  • 相关阅读:
    手机号正则表达式精简
    如何查看ssl证书
    HTTPS原理教程
    收集了一些国外 DICOM 文件下载网站
    微前端总结
    react的路由的练习手册
    SSL证书伪造得了吗
    解密国内BAT等大厂前端技术体系美团点评之下篇(长文建议收藏)
    五大权威的SSL证书颁发机构(CA机构)介绍
    C#开发PACS医学影像处理系统(七):读取影像Dicom信息
  • 原文地址:https://www.cnblogs.com/tony1224/p/2415548.html
Copyright © 2020-2023  润新知