|
各位大侠,我现在参考了无双版大给出的例程,SDRAM_CONTROL_4PORT跟原例程仅有分辨率设置不同,修改I2C_CCD_Config分辨率为160*120,然后编写控制电路,存某一帧图像,然后用NIOS读出来,发现读出的前258个数据不对,前面是0 255.。。。。255,往后的数据就对了,顶层模块关于SDRAM的部分如下:
Sdram_Control_4Port sdram0 (
// HOST Side
.REF_CLK(iCLK_50),
.RESET_N(1'b1),
.CLK(sdram_ctrl_clk),
// FIFO Write Side 1
.WR1_DATA({8'b0,wr_data}),
.WR1(wr_en),
.WR1_ADDR(0),
.WR1_MAX_ADDR(160*124),
.WR1_LENGTH(9'h100),
.WR1_LOAD(!DLY_RST_0),
.WR1_CLK(CCD_PIXCLK),
// FIFO Read Side 1
.RD1_DATA(CMOS_READDATA_1),
.RD1(CMOS_READ),
.RD1_ADDR(0),
.RD1_MAX_ADDR(160*124),
.RD1_LENGTH(9'h100),
.RD1_LOAD(!DLY_RST_0),
.RD1_CLK(CMOS_CLK),
// FIFO Read Side 2
.RD2_DATA(),
.RD2(),
.RD2_ADDR(),
.RD2_MAX_ADDR(),
.RD2_LENGTH(),
.RD2_LOAD(),
.RD2_CLK(),
// SDRAM Side
.SA(oDRAM0_A[11:0]),
.BA(oDRAM0_BA),
.CS_N(oDRAM0_CS_N),
.CKE(oDRAM0_CKE),
.RAS_N(oDRAM0_RAS_N),
.CAS_N(oDRAM0_CAS_N),
.WE_N(oDRAM0_WE_N),
.DQ(DRAM_DQ[15:0]),
.DQM({oDRAM0_UDQM1,oDRAM0_LDQM0})
);
是不是由于这部分代码的原因,:
always@(posedge CLK or negedge RESET_N)
begin
if(!RESET_N)
begin
rWR1_ADDR <= 0;
rWR2_ADDR <= 22'h200000;
rRD1_ADDR <= 0;
rRD2_ADDR <= 22'h200000;
rWR1_MAX_ADDR <= 160*124;
rWR2_MAX_ADDR <= 22'h200000+160*124;
rRD1_MAX_ADDR <= 160*124;
rRD2_MAX_ADDR <= 22'h200000+160*124;
rWR1_LENGTH <= 128;
rWR2_LENGTH <= 128;
rRD1_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-rWR1_LENGTH)
rWR1_ADDR <= rWR1_ADDR+rWR1_LENGTH;
else
rWR1_ADDR <= WR1_ADDR;
end
和读部分
// Read Side 1
if(RD1_LOAD)
begin
rRD1_ADDR <= RD1_ADDR;
rRD1_LENGTH <= RD1_LENGTH;
end
else if(mRD_DONE&RD_MASK[0])
begin
if(rRD1_ADDR<rRD1_MAX_ADDR-rRD1_LENGTH)
rRD1_ADDR <= rRD1_ADDR+rRD1_LENGTH;
else
rRD1_ADDR <= RD1_ADDR;
end
请各位大侠指教!! |
|