RAM读写时序限制解决方案

发布者:京玩儿最新更新时间:2011-11-15 来源: 电子产品世界关键字:RAM 手机看文章 扫描二维码
随时随地手机看文章

      本文为了提高AVS解码器的处理速度,综合了国内外学者的设计思想提出了一种逆扫描、反量化与反变换模块结构,在消耗逻辑资源允许的情况下提高了处理速度,做到速度和面积的平衡。

  本文将逆扫描、反量化和反变换模块结合在一起进行设计,在实现了块内部优化的同时采用了乒乓缓存寄存器组来实现块之间流水线,提高了速度;采用寄存器组复用技术实现逆块扫描中寄存器组与反变换中的转置寄存器组的复用,节省了寄存器资源。

  1 硬件结构
 

  根据AVS解码标准,本文提出了一种高效简洁的逆扫描、反量化与反变换系统结构,该结构主要由四部分组成。反量化模块完成量化系数向变换系数的转变;逆扫描与寄存器组选择模块根据逆扫描表完成变换系数的存储;寄存器组用来存储变换系数及反变换中的转置数据;反变换模块将变换系数转换成残差样值,为后续的重构做好准备。硬件结构及数据流程如图1所示。

  

 

  其中输入为VLD模块解析出的(run,level)对、块结束标志及一些模式判别的信息。反量化模块对Level数据进行反量化,逆扫描与寄存器组选择模块采用依据轮流使用的规则产生寄存器组选择信号,同时对Run进行累加,并根据累加结果查表得到需要存储的寄存器,等所有量化后的Level值存储完毕后,由It_start信号连续读取8次寄存器进入反变换模块,反变换模块采用内部流水线结构经过22个时钟周期处理完一个块。反变换模块中的转置寄存器复用了前端的寄存器组。

  本设计通过乒乓结构实现了块与块之间的流水。图2是本设计的总体时序安排,图中考虑到变换编码后一个块内的有效系数一般小于25。其中以一个块数据输入反量化模块作为起始时刻,当反变化模块读取一个寄存器组并将其作为转置寄存器使用时,另一个寄存器组用于存储下一个块的反量化结果。如图2,寄存器组1用来存储当前块反量化后的变换系数值,而寄存器2被用于上一个块的反变换中。另外,读取转置后的数据时,通过对移位最初的寄存器赋零对寄存器2清零,从而用于下一个块的变换系数的存储。

  

 

  1.1 逆扫描与寄存器组选择模块

  该模块先对Run值进行累加,并根据扫描方式查表,得到当前Level值所对应的寄存器号,控制将反量化后的变换系数存入相应寄存器中,重复以上工作直到读到块结束标志。当前块不为零的所有变换系数均根据逆扫描表存储在相应的位置,因为每次从寄存器中读取转置数据时都会对寄存器清零,为下次使用做好准备,所以对于变换系数为零的情况就不用单独存储,从而提高了设计的处理速度。

  1.2 反变换模块

  反变换模块是将当前块的变换系数矩阵转换为残差样值矩阵的一个过程,为了节约硬件成本,此设计采用一维变换和转置矩阵实现二维变换,参考文献[2]中提出了一种快速有效的方法,本文对其方法进行了优化,节约了不必要的硬件资源和时钟。

  下面主要介绍一维变换过程。

  设AVS的一维反变换的输入输出变量分别为:

  X=[X0,X1,X2,X3,X4,X5,X6,X7]T

  Y=[Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7]T

  根据Y=T8×X,把8个输出元素展开成以下组合,其中T8为8×8的反变换矩阵。

  M0=8X0+8X4;M1=8X0-8X4

  M2=4X1+4X5;M3=9X1-10X5

  M4=6X1+2X5;M5=2X1+9X5

  M6=10X2+4X6;M7=4X2-10X6

  M8=9X3+2X7;M9=2X3+6X7

  M10=10X3-9X7;M11=4X3+4X7

  其中所有的乘法均可化为移位操作,再定义8个中间变量N0~N7:

  N0=M0+M6;N1=M2+M8+M4

  N2=M1+M7;N3=M3-M9

  N4=M1-M7;N5=M4-M10

  N6=M0-M6;N7=M5-M11-M9

  重新整理后得到的输出:

  Y0=N0+N1;Y1=N2+N3;Y2=N4+N5;Y3=N6+N7

  Y4=N6-N7;Y5=N4-N5;Y6=N2-N3;Y7=N0-N1

  由以上算法可以看出,一维反变换模块只需要移位和加法操作,既方便硬件实现还节省了硬件资源。经计算此一维反变化模块共需要40个加法器。

  反变换模块的时序见图2,第1时钟周期进行并行读取数据,2个时钟周期进行一维反变换,第4个时钟周期开始向转置矩阵中存入一维反变换后的数据,第12周期开始读取转置矩阵中的数据,第15个时钟周期开始输出数据,第22个时钟周期结果输出完毕。

1.3 寄存器组复用

 

  在逆块扫描顺序中,一些后续的系数可能需要在一开始时就准备好,而一些在前面次序的系数则可能在后续的时间使用,所以只有一个块的所有数据都存储完成后,才能进行后续的反变换,故至少要对一个块的变换系数进行存储。为了提高处理速度,后续的反变换模块中将采用并行流水线输入,因此存储模块此时不能采用有时序限制的RAM,本文采用了寄存器组实现。同时为了消除块数据的准备延时,还采用了乒乓结构,即在设计中用了两个寄存器组,这样就可在处理当前一个块系数的同时,用另一个寄存器组来存储下一个块反量化后的数据。

  在反变换中也需要用到转置存储。为了节省资源,本设计采用了寄存器复用技术,即反变换中用到的转置矩阵与逆扫描后用于存储变换系数的矩阵复用,具体复用方法如图3所示。

  

 

  以上为一个寄存器组,包含64个13 bit的寄存器。最后一列为反变换模块输入,即当一个块变换系数根据逆扫描顺序存储完后,连续8个时钟周期读取寄存器组最后一列,在每个时钟周期向反变换模块并行输入8个13 bit的数据。第一列为转置数据输入端。考虑到反变换流水线及复用的问题,在连续2个时钟周期读取寄存器组最后一列输入到反变换模块后,转置数据开始从第一列输入,这样可以满足反变换内部的流水线问题,也可以达到寄存器复用的目的。第一行为转置数据的输出,最后一行在转置数据输出时赋值为零,这样可以使转置输出和寄存器赋零同时进行,从而可以减少不必要的时钟周期和资源。

  2 仿真结果及分析

  根据上述思想,采用Verilog HDL语言对算法进行了RTL级电路描述,并采用Altera公司的软件Quartus II 8.0 对此算法进行了实现和仿真验证,并将仿真结果与rm52j软件的输出结果进行了比较。Quartus II仿真结果如图4所示,波形图给出了一个块的反量化和反变换输出结果。rm52j的输出结果如图5所示,比较可见输出结果相同。

  

 

  

 

  本设计采用的是自顶向下和自下而上的混合设计方法,逆扫描、反量化和反变换过程是AVS系统中的一个模块,局部的测试很难判断出该模块是否可以应用到整个解码系统中去,所以此模块亦在自己搭建的基于SoPC的AVS验证平台上进行了验证。加入此模块前,软件处理一帧码流时间与用此硬件模块代替软件模块后的解码时间如图6所示,通过计算可知解码速度提高约15%。

  

变换编码后一个块内的有效系数一般小于25,所以逆扫描、反量化的时钟一般小于25个时钟周期,而反变换的时钟周期为22个,所以处理一个块的时钟周期大约为25个,大大提高了速度。由于寄存器的复用及设计的优化,节省了硬件资源,本设计采用的FPGA为EP2C35F672C6,资源使用情况如图7所示,可见使用的总的LE为3 059个。

 

  

 

  本设计为了解决RAM读写时序限制的影响,采用了两组寄存器阵列代替RAM实现乒乓操作,同时为了减少硬件资源,采用寄存器组复用技术,即反变换中的转置矩阵与逆扫描后存储寄存器组复用。最后给出了波形仿真结果,并与rm52j的输出结果比较,验证了结果的正确性。通过在基于Nios II的SoPC系统上进行测试,证明该设计能够正确快速实现逆扫描、反量化及反变换功能。

关键字:RAM 引用地址:RAM读写时序限制解决方案

上一篇:图形化系统设计加速应用实现和创新
下一篇:基于DSP的IP电话设计

推荐阅读最新更新时间:2024-03-30 21:50

打破高带宽内存墙,国产一站式高速接口IP巅峰之作
12月22日(周二)20:00,来自中国一站式IP和定制芯片领军企业芯动科技的两位技术大牛将作客国内知名的集成电路及手机行业门户网站集微网直播间,通过公开课为您带来一系列前沿技术的分享。干货满满,不容错过! 众所周知,SOC芯片的核心、也是最复杂的性能瓶颈之一,在于内存和互联带宽。目前业界最前沿的各类DDR和Chiplet技术的挑战和发展趋势如何,又是如何成功打破“内存墙”?怎样选择合适的Chiplet新技术,突破CPU/GPU/NPU等大型计算芯片的算力瓶颈,实现产品核心竞争力?从DDR5/4、LPDDR5/4到GDDR6/6X,以及HBM3/2E、高性能Chiplet,在各种跨工艺、跨封装挑战下,如何选型IP实现高可靠性、高
[手机便携]
STM32在Keil MDK5环境下RAM上代码调试
步骤与图示: 1.先给个CPU的数据,需要注意的是三个红圈的地方,架构,型号,Flash和SRAM大小如图1 (STM32F107VC 256KB FLASH,64KB SRAM) 图1 2.Target的设置 1)勾上可以用微库,减小生成代码的大小 2,3)分别定义ROM区位置及大小和RAM区位置和大小。在这里需要说明的是,Cortex-M3的架构有4G的寻址空间,而Flash的起始地址在0x08000000,RAM地址在0x20000000,在这里进行了第一次相关地址的更改;如图2 0x1000为4K,这里的0xc000则为48K的ROM分配;RAM的为16K;基本上移植个uCOS-II都够用了 图2
[单片机]
STM32在Keil MDK5环境下<font color='red'>RAM</font>上代码调试
基于NiosII的嵌入式网络通信系统
1  引言       随着internet技术的发展,在许多领域都引起了飞跃性的变化。嵌入式系统应用领域中一个新的趋势就是开始在嵌入式设备上集成网络通信功能,比如网络监控、网络数据采集系统等,以便于通过网络与远程设备进行信息的交互和增强系统的互连性,仅仅需要一根网线就可以轻轻松松完成系统的互连。       目前市场上的嵌入式处理器的种类很多。altera公司推出了第二代片上可编程嵌入式软核处理器nios ii,再配上其低成本、高性价比的fpga器件,使得嵌入式系统的开发变得越发方便。再者由于nios ii可配置和fpga器件可编程的特点,与专用硬件相比灵活性得有很大的优势,从而使得fpga器件在现代电子设计中得到广泛的
[嵌入式]
如何正确的划分51单片机中的RAM
前边介绍单片机资源的时候,我们提到过 STC89C52 共有 512 字节的 RAM,是用来保存数据的,比如我们定义的变量都是直接存在 RAM 里边的。但是单片机的这 512 字节的 RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此我们在使用的时候,也要注意一些问题。 51 单片机的 RAM 分为两个部分,一块是片内 RAM,一块是片外 RAM。标准 51 的片内 RAM 地址从 0x00H~0x7F 共 128 个字节,而现在我们用的 51 系列的单片机都是带扩展片内 RAM 的,即 RAM 是从 0x00~0xFF 共 256 个字节。片外 RAM 最大可以扩展到 0x0000~0x
[单片机]
内存技术IP进化 LPDDR5潮起
内存技术的进阶就如一道“指挥棒”,指引着应用焕发新生机。随着小米10全球首发LPDDR5成为热点,成功让LPDDR5站上了“热搜”。 作为Low Power Double Data Rate(低功耗内存),小米首发LPDDR成为LPDDR5浪潮兴起的一重浪花,而其必然是内外合力的诉求所致。一方面,AI、5G和云计算等新兴应用带来数据吞吐量的成倍增长,需要更高的内存带宽加以“成全”,成为推动LPDDR向前进阶的驱动力;另一方面,上下游厂商齐齐助力,无论是新思科技(Synopsys)等IP厂商,还是内存厂商如三星、美光以及合肥长鑫等,以及小米、三星等下游厂商,皆协同共促产业链,让LPDDR5发展进入了快车道。随之而来的是,如何选择理想
[手机便携]
技术文章—AWorks编程:嵌入式C语言的内存管理
摘要:工程师都知道,C/C++语言与其他语言不同,它需要开发者自己管理内存资源,对于动态内存使用不当,容易造成段错误或者内存泄漏,因此内存管理至关重要。本文将以C语言为例介绍动态内存管理的原理。 C/C++语言与其他语言不同,它需要开发者自己管理内存资源。对于动态内存的使用不当容易造成段错误或者内存泄漏。尤其是内存泄漏,内存泄漏往往是在程序运行一段时间才会被发现,使得开发人员无法第一时间定位错误。 而相比于个人计算机,嵌入式系统的内存资源更是稀缺。作为嵌入式C的开发人员,了解其内存管理的原理能使其更加正确地使用内存资源以及定位程序的bug。本文将以C语言为例介绍动态内存管理的原理。 一、动态内存的原理 栈空间
[嵌入式]
技术文章—AWorks编程:嵌入式C语言的<font color='red'>内存</font>管理
iPhone 5内存信息曝光:容量1GB频率1066MHz
iPhone 5内存信息曝光:容量1GB频率1066MHz   北京时间9月16日上午消息,美国科技网站AnandTech报道称,通过对iPhone 5中A6芯片照片的研究,可以了解这款手机内存的接口、容量和频率信息。iPhone 5的内存容量为1GB,频率为1066MHz。   与此前的苹果处理器一样,A6芯片通过PoP堆叠技术将嵌入式处理器和DRAM内存整合在一起。这节约了空间,对于智能手机这样的小尺寸设备来说尤为重要。在当代智能手机中,PoP堆叠技术很常见。   在发布会上,苹果并未模糊A6芯片的细节信息,而芯片上出现了三星的一个元件型号:K3PE7E700F-XGC2。通过对三星产品说明的查询,可以发现,K3P表明
[手机便携]
iPhone 5<font color='red'>内存</font>信息曝光:容量1GB频率1066MHz
单片机的累加器A与片外RAM之间的数据传递类指令简介
MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A 说明: 1)在51系列单片机中,与外部存储器RAM打交道的只能是A累加器。所有需要传送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们能看出内外部RAM的区别了,内部RAM间能直接进行数据的传递,而外部则不行,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再传送到0200H单元中去。 2)要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条单片机 指令 中,地址是被直接放在DPTR中
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新工业控制文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved