2012年3月24日

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 ... 阅读全文

posted @ 2012-03-24 15:38 @火枪手@ 阅读(1198) 评论(0) 推荐(0) 编辑

2012年3月23日

JPEG解码:反DCT变换(三)

摘要: 2:矩阵的转秩在矩阵的相乘结束之后,要对矩阵转秩,转秩的效果就是行列转换。在此要用到2个ram,一个要做数据输入,另个用与数据输出。ram 1 `timescale 1ps / 1ps 2 module idct_ram ( 3 clk, 4 rst_n, 5 wr_rd, 6 datain, 7 wr_addr, 8 rd_addr, 9 ... 阅读全文

posted @ 2012-03-23 19:11 @火枪手@ 阅读(1276) 评论(0) 推荐(1) 编辑

JPEG解码:反DCT变换(二)

摘要: 1:矩阵与矩阵的乘法运算。8*8与8*8的矩阵相乘,第一次来的8个数据依次与矩阵的A的第i列相乘的结果相加作为第一行的第i个数,第二次来的8个数与矩阵A的第i列相乘的结果相加做为第二行的第i 个数。依次类推,直到64个数全部都运算结束。由于每次来一个数,所以需要一个8位的移位寄存器来保存每次来的数,直到8个数都来齐,才开始于矩阵A相称,由于乘法涉及到有符号乘法,解决的办法为放缩的方法,把矩阵A的系数全部房贷2^16倍,就是把A的系数向右移16位,转化为整数,但是结果也要还原,即向左移16位。代码如下:shift 1 //------------------------------------- 阅读全文

posted @ 2012-03-23 14:29 @火枪手@ 阅读(1790) 评论(0) 推荐(1) 编辑

2012年3月22日

JPEG解码:反DCT变换(一)

摘要: DCT(Discrete Cosine Transform)离散余弦变换是一种经典谱分析方法,属于离散傅立叶变换的一种特殊情况,即在变换后的傅立叶级数中只包括余弦项,变化后的数据比较集中。经过DCT变换可以将图片从色彩域转换到频率域,将原始图像的信息块转化为代表不同频率分量的系数集。它是一种广泛使用的压缩方法,首先把每个单独的彩色图像分量分成8×8图像块,然后经过二维DCT变换,其低频分量都集中在左上角,高频分量分布在右下角。变换之后还是8×8的数据块,也就是说DCT变换本身并没有起到压缩数据的作用,但是它为以后的数据压缩奠定了必不可少的基础。经过DCT变换的数据有2个优点 阅读全文

posted @ 2012-03-22 03:36 @火枪手@ 阅读(8013) 评论(4) 推荐(0) 编辑

2012年3月20日

JPEG解码:反zig_zag变换

摘要: 反量化模块就是对输入的64个数据进行重新排列,64个数据为8*8的数据,即8行8列。在进行编码的时候,DCT变换实际上是将图像从色彩域转向频频域,进过DCT变换的数据要经过量化,量化是实际上是对DCT系数的一个优化过程,它是利用人眼对高频部分不敏感的特性来实现数据的大幅度简化,具体操作时把频率域上的每个成分除以一个对于该成分的常数,去四舍五入接近的整数(已经在huffman解码模块实现反量化),是一种有损压缩。量化后的数据有个很大的特点,就是数列上的相邻点在图像上也是相邻的,还有个特点是直流分量对于交流分量来说要大,而且交流分量中含有大量的0,对于量化后的数据如何进行简化,从而再更大的进行数据 阅读全文

posted @ 2012-03-20 02:52 @火枪手@ 阅读(2625) 评论(4) 推荐(0) 编辑

2012年3月18日

JPEG解码:huffman解码

摘要: huffman解码是JPEG图片解码里面的关键步骤,也是最复杂的一步。在fsm模块中DHT状态下读取的不仅仅是huffman表,还有另外两个表,一个是存放1-16不同码长的最小编码的一个表,另一个是存放最小编码的地址的表。在huffman解码中需要用到这两个表,还有在本模块也集成了反量化模块。huffman解码的步骤:(1):判断解码数据的类型选择与之对应的表。(2):进行码长的判断。(3):计算DHT地址。(4):从DHT表中读取数据。(5):若为DC数据需要进行DPCM解码。对于一个huffman解码器应包含3个独立的存储器:(1):存放各个长度对应的最小编码。(2):存储各个长度对应码字 阅读全文

posted @ 2012-03-18 02:08 @火枪手@ 阅读(5136) 评论(3) 推荐(1) 编辑

2012年3月16日

JPEG解码:状态控制模块

摘要: 状态控制模块主要是对JPEG图像组成的各个部分进行识别,并读取其中的有效信息。主要有以下几个模块:(1)图像开始(SOI),标识为FFD8,标志一副jpeg图像的开始。(2)图像识别信息(APP),标识为FFE0,可以读取图像的各种信息,比如XY像素单位,密度等。(3)量化表(DQT),标识为FFDB,一个AC量化表,一个DC量化表,每个量化表64个数据。(4)图像信息段(SOF),标识为FFCO,可以读取图片精度,图片高度,图片宽度等信息。(5)huffman表(DHT),标识为FFC4,读取4个huffman表数据,分别是亮度DC表,亮度AC表,色度DC表,色度AC表。(6)图像数据段(S 阅读全文

posted @ 2012-03-16 03:51 @火枪手@ 阅读(1861) 评论(1) 推荐(0) 编辑

2012年3月13日

JPEG解码:桶型寄存器

摘要: JPEG解码总共分为:桶型寄存器模块,状态控制模块,huffman解码模块,反量化模块,反zig_zag模块,反idct模块,色彩空间变换模块。桶型寄存器的作用是控制数据流和去除冗余。对于数据的控制是要求桶型存储器能读取数据的任何宽度,输出的数据给状态控制模块和huffman解码模块,状态控制模块要求输入的数据有两种,一种是8位,另一种是16位,huffman解码模块要求输入的数据为不定位数,huffman编码是不定位数的编码,所以在解码的时候事先不知道被解码数据的位数。冗余信息的产生是由于在编码非标志位的数据FF 时,必须在其后加上00,而产生了冗余信息00。所以再遇到FF00的时候必须去除 阅读全文

posted @ 2012-03-13 00:29 @火枪手@ 阅读(1755) 评论(2) 推荐(1) 编辑

2012年2月28日

PLL的modelsim仿真

摘要: 看了好久的modelsim学习资料,写了一个简单的PLL仿真实验,该实验是仿真DE2板子上50MHz时钟输入,经PLL之后输出100MHz的时钟。同时用.do文件来代替烦躁的鼠标操作。首先在Quartus里面例化一个PLL模块,输入为clk,50MHz,输出为clk_100。打开pll.v文件,// ============================================================// File Name: pll.v// Megafunction Name(s):// altpll//// Simulation Library Files(s):/... 阅读全文

posted @ 2012-02-28 14:36 @火枪手@ 阅读(4358) 评论(0) 推荐(2) 编辑

2011年12月2日

Quartus 中快速分配器件管脚

摘要: 在quartus中分配器件管脚最笨的方法是对于器件手册一个一个的敲进去,这样做如果用到的管脚很好还没有发觉什么不好,但是当用到的器件管脚很多的时候就会发现很麻烦,而且容易出错。接下来我来介绍一种很方便的方法。首先在txt文档中建立管脚和端口对于名称。如下图:格式如上图。我用的器件是DE2开发板,器件是cyclone II ep2c35f672c6上图可以看到 第一个是端口clk 他是版子提供的50M时钟,他对于的管脚是PIN_N2。 第二个是复位信号 rst_n 他对应的引脚为PIN_N25. 把全部的端口对应好之后保存。然后打开quartus 点击assignments,选择 Import 阅读全文

posted @ 2011-12-02 19:44 @火枪手@ 阅读(2533) 评论(0) 推荐(1) 编辑

导航