特权同学

非直接RAM地址映射转换思路

0
阅读(2016)

非直接RAM地址映射转换思路

         通常情况下,如果是320*240(X*Y)分辨率的图像,使用128K(17bit地址可寻址)的RAM做地址映射,分别取X寻址对应128K的低9bit(可使用地址为0-511)、Y寻址对应128K的高8bit(可使用地址为0-255)。

         但如果是480*272分辨率的图像,使用320*240类似的存储器映射方式,则需要至少9(可寻址0-511)+9(可寻址0-511)=18条地址线,128K无法满足要求,相应的需要256K的替代。本身这种直接映射存储的方式虽然大大简化运算以及坐标定位,但却从某种程度上浪费了一些存储空间,尤其是类似480*272的分辨率,做一个简单的计算:

320*240=76800

480*272=130560

对应的

64K=65536

128K=131072

        那么,320*240/480*272所需的存储量都居于64K和128K之间,64K肯定不够用,应该选用128K。但是理论上可以用128K存储的480*272在直接映射方式下却必须选用256K做存储,着实是一个很大的浪费。

        基于此,在480*272的映射中,特权同学做了一些处理,一部分图像还是直接映射,另一部分图像充分利用余下的地址空间巧妙的转换后进行存储,达到了物尽其用,并且简单方便的效果。

         假设1(X0,Y0)为图像坐标,取:

         X0:bit8-0,对应原始地址总线ADDB[8:0]

         Y0:bit8-0,对应原始地址总线ADDB[17:9]

         假设2(X,Y)为相应的RAM存储坐标,取:

         X:bit8-0,对应原始地址总线ADDR[8:0]

         Y:bit7-0,对应原始地址总线ADDR[16:9]

         映射变换如下:

         当Y0<256(即ADDB[17]==0)时,直接映射:

ADDR=ADDB[16:9];

         当Y0>=256(即ADDB[17]==1)时,转换映射:

         ADDR[16:0]={ADDB[12:9],ADDB[8:5],4’b1111,ADDB[4:0]}

         此类转换,用软件模拟自然有些繁琐,而FPGA逻辑实现却易如反掌,一条语句搞定。