800*600 的TFT液晶
800*600 这个线性地址的话要10+10=20位地址了,即10位行地址,10位列地址,1M大的SRAM。
实际800*600,需要的多少空间呢? 800*600=480000字节=468.75K。
依照上面的思路,能不能转换成512K,即把原来的20位地址转换成19位地址呢。
Xs[9:0] 799 = 11,0001,1111
Ys[9:0] 599 = 10,0101,0111
转后后的19位地址为Xd,Yd。
(I).X9位Y10位 看上面的数据,Xs 按最高位是0是1来判辨 ,然后数据在进行拼接,Xs[9] = 1 or 0 ? 这个不行,地址有重复。
(II).X10位Y9位 再来看看Ys Ys 按最高位是0是1来判辨 ,然后数据在进行拼接, Ys[9] = 0 ,Yd[8:0]=Ys[8:0],Xs;
然后Ys[9]=1,我们来拼接下试试: Ys[6:0],Xs[9:8] , ? , Xs[7:0] 。?是个2位, 看来还是有地址重复 。不行,继续搞。
Ys[9]=0 , {Xd,Yd} = {Xs[9:0],Ys[8:0]};
Ys[9]=1, {Xd,Yd} = { {2'b11,Xs[9:2]} , {X[1:0],Y[6:0]} } ; 看前面一组数据Xd[9:0] = {2'b11,Xs[9:2]} 地址空间指向 768-967,有地址重复,在加个地址+32,就是800-999。在简单处理下Xs[9:2] + 32 = Xs[9:2] + 6'b10,0000; 即Xs[9:7]+3'b001;
整理下,Ys[9]=1, {Xd,Yd} = { {2'b11,{Xs[9:7]+3'b001} ,Xs[6:2]} , {X[1:0],Y[6:0]} } ;
最后 assign {Xd,Yd} = Ys[9]? { {2'b11,{Xs[9:7]+3'b001} ,Xs[6:2]} , {X[1:0],Y[6:0]} } : {Xs[9:0],Ys[8:0]};
It's so easy for FPGA ...
结果是出来了,可以了,就是除了一个判断Y[9]外,还要进行一个3位加法,还有什么办法仅仅进行拼接等简单的逻辑操作就能实现?