MyFPGA Forum
标题:
DE2_70_TV里面的SDRAM读写地址的问题—求高手指点江山啊!!
[打印本页]
作者:
chenyianhfut
时间:
2011-10-25 09:17
标题:
DE2_70_TV里面的SDRAM读写地址的问题—求高手指点江山啊!!
always@(posedge CLK or negedge RESET_N)
begin
if(!RESET_N)
begin
rWR1_ADDR <= 0;
rWR1_MAX_ADDR <= 640*576;
rWR1_MAX_ADDR_MAX <= 2*640*576;
rWR2_ADDR <= 22'h100000;
rWR2_MAX_ADDR <= 22'h100000+640*576;
rRD1_ADDR <= 640*0;
rRD1_ADDR1 <= 0;
rRD1_MAX_ADDR <= 640*240;
rRD1_MAX_ADDR_MAX <= 640*240+640*576;
rRD2_ADDR <= 640*288;
rRD2_ADDR2 <= 640*288;
rRD2_MAX_ADDR <= 640*528;
rRD2_MAX_ADDR_MAX <= 640*528+640*576;
rWR1_LENGTH <= 128;
rRD1_LENGTH <= 128;
rWR2_LENGTH <= 128;
rRD2_LENGTH <= 128;
end
else
begin
// Write Side 1
if(WR1_LOAD)
begin
rWR1_ADDR <= WR1_ADDR;
rWR1_LENGTH <= WR1_LENGTH;
end
else if(mWR_DONE&WR_MASK[0])
begin
if(rWR1_ADDR<rWR1_MAX_ADDR_MAX-rWR1_LENGTH)
rWR1_ADDR <= rWR1_ADDR+rWR1_LENGTH;
else
rWR1_ADDR <= WR1_ADDR;
end
// Write Side 2
if(WR2_LOAD)
begin
rWR2_ADDR <= WR2_ADDR;
rWR2_LENGTH <= WR2_LENGTH;
end
else if(mWR_DONE&WR_MASK[1])
begin
if(rWR2_ADDR<rWR2_MAX_ADDR-rWR2_LENGTH)
rWR2_ADDR <= rWR2_ADDR+rWR2_LENGTH;
else
rWR2_ADDR <= WR2_ADDR;
end
// Read Side 1
if(RD1_LOAD)
begin
rRD1_ADDR1 <= RD1_ADDR;
rRD1_LENGTH <= RD1_LENGTH;
end
else if(mRD_DONE&RD_MASK[0])
begin
if(rRD1_ADDR1<rRD1_MAX_ADDR-rRD1_LENGTH)
rRD1_ADDR1 <= rRD1_ADDR1+rRD1_LENGTH;
else if(rRD1_ADDR1==rRD1_MAX_ADDR-rRD1_LENGTH)
rRD1_ADDR1 <= 640*576;
else if((640*576<=rRD1_ADDR1)&&(rRD1_ADDR1<rRD1_MAX_ADDR_MAX-rRD1_LENGTH))
rRD1_ADDR1 <= rRD1_ADDR1+rRD1_LENGTH;
else if(rRD1_ADDR1==rRD1_MAX_ADDR_MAX-rRD1_LENGTH)
rRD1_ADDR1 <= RD1_ADDR;
end
// Read Side 2
if(RD2_LOAD)
begin
rRD2_ADDR2 <= RD2_ADDR;
rRD2_LENGTH <= RD2_LENGTH;
end
else if(mRD_DONE&RD_MASK[1])
begin
if(rRD2_ADDR2<rRD2_MAX_ADDR-rRD2_LENGTH) rRD2_ADDR2 <= rRD2_ADDR2+rRD2_LENGTH;
else if(rRD2_ADDR2==rRD2_MAX_ADDR-rRD2_LENGTH)
rRD2_ADDR2 <= 640*576+640*288;
else if(((640*576+640*288)<=rRD2_ADDR2)&&(rRD2_ADDR2<rRD2_MAX_ADDR_MAX
-rRD2_LENGTH))
rRD2_ADDR2 <= rRD2_ADDR2+rRD2_LENGTH;
else if(rRD2_ADDR2==rRD2_MAX_ADDR_MAX-rRD2_LENGTH)
rRD2_ADDR2 <= 640*288;
end
end
end
上面程序是在范例上修改过的,其他部分未做改变,修改的主要目是想把范例中写一帧的缓存数据改成写两帧的缓存数据,即写的最大地址增加到2*640*576(两帧图像的容量),读地址就变成先读rRD1_ADDR1=0~640*240,rRD2_ADDR2=640*240~640*528,然后读取rRD1_ADDR1=640*576~640*576+640*240,rRD2_ADDR2=640*576+640*240~640*528+
576*528,读完后读地址回归到初始值,以此循环重复,未修改钱的视频图像是连续变化的,不存在拖影,修改之后仍有视频图像,但是存在很强的拖影,不连续,只有在摄像头静止时,效果和未修改时的一样,一直没搞懂,希望高手指点下,是什么原因,在能写两帧的缓存数据的前提下怎么修改,谢谢!!!!!!!!
作者:
chenyianhfut
时间:
2011-10-25 22:44
求求高手啊!!
作者:
chenyianhfut
时间:
2011-10-25 22:45
急急!!
作者:
chenyianhfut
时间:
2011-10-25 22:50
也没做什么修改,就是使得地址可以写到2*640*576,然后再归0,读的时候就可以先读0~640*240,640*288~640*528,后读640*576~640*576+640*240,再重复640*576+640*288~640*576+640*528,其他都没修改,但是显示为什么会这么大的变化呢
作者:
chenyianhfut
时间:
2011-10-25 23:01
用在DE2也是一样的问题
作者:
chenyianhfut
时间:
2011-10-25 23:13
希望研究过这个程序的大侠不吝赐教啊
作者:
陈邦勇
时间:
2012-5-30 15:26
支持~~顶顶~~~
作者:
戴晋爱我
时间:
2012-9-18 12:30
同学,你有没有弄清楚这个问题,如果弄清楚了,能给个解答吗
欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/)
Powered by Discuz! X3