Подключаю 1M x 16Bit x 4Banks SDRAM (K4S641632K) через эту штучку к микроблейз. Все замечательно, кроме одного - при смене банка/столбца происходит ошибка (одна), а далее до конца банка/столбца все пучком. Вот кусочек тестовой программки:
Xuint16 i;
for (i=0; i<0xffff; i++)
{
*BaseAddr++=i;
}
X=0;
BaseAddr=0x90000000;
for (i=0; i<0xffff; i++)
{
Temp=*BaseAddr++;
if (Temp!=i)
X=1;
}
Но если делать тупо так:
Xuint16 i;
for (i=0; i<0xffff; i++)
{
*BaseAddr=i;
*BaseAddr++=i;
}
X=0;
BaseAddr=0x90000000;
for (i=0; i<0xffff; i++)
{
Temp=*BaseAddr;
Temp=*BaseAddr++;
if (Temp!=i)
X=1;
}
то ошибок 0!
Я понимаю что в этом виноват параметр PARAMETER C_MEM_PART_TRCD = 24000. Я же его пробовал увеличить - результат тот же.
Я конечно сильно сомневаюсь-может причина в том , что у данного SDRAM максимальная чатота работы 133 МГц, а тут он пашет на 125 МГц.
Может кто подскажет - вот параметры:
BEGIN mpmc
PARAMETER INSTANCE = SDRAM_64Mbx16
PARAMETER HW_VER = 3.00.a
PARAMETER C_MEM_PARTNO = CUSTOM
PARAMETER C_MEM_TYPE = SDRAM
PARAMETER C_DDR2_DQSN_ENABLE = 0
PARAMETER C_MEM_CE_WIDTH = 1
PARAMETER C_MEM_CS_N_WIDTH = 1
PARAMETER C_MEM_CLK_WIDTH = 1
PARAMETER C_MEM_NUM_RANKS = 1
PARAMETER C_MEM_DATA_WIDTH = 16
PARAMETER C_MEM_DM_WIDTH = 2
PARAMETER C_ARB0_ALGO = CUSTOM
PARAMETER C_ARB0_NUM_SLOTS = 1
PARAMETER C_ARB0_SLOT0 = 0
PARAMETER C_MEM_PART_DATA_WIDTH = 16
PARAMETER C_MEM_PART_NUM_BANK_BITS = 2
PARAMETER C_MEM_PART_NUM_ROW_BITS = 12
PARAMETER C_MEM_PART_NUM_COL_BITS = 8
PARAMETER C_MEM_PART_TRAS = 48000
PARAMETER C_MEM_PART_TRASMAX = 100000000
PARAMETER C_MEM_PART_TRC = 72000
PARAMETER C_MEM_PART_TRCD = 24000
PARAMETER C_MEM_PART_TWR = 16000
PARAMETER C_MEM_PART_TRP = 24000
PARAMETER C_MEM_PART_TRRD = 24000
PARAMETER C_MEM_PART_TRFC = 112000
PARAMETER C_MEM_PART_TREFI = 7800000
PARAMETER C_MEM_PART_TRTP = 7500
PARAMETER C_MEM_PART_TAL = 0
PARAMETER C_MEM_PART_CAS_A_FMAX = 125
PARAMETER C_MEM_PART_CAS_A = 3
PARAMETER C_MPMC_CLK0_PERIOD_PS = 8000
PARAMETER C_MPMC_BASEADDR = 0x90000000
PARAMETER C_MPMC_HIGHADDR = 0x91FFFFFF
BUS_INTERFACE SPLB0 = mb_plb
PORT SDRAM_Addr = fpga_0_MPMC3_SDRAM_CUSTOM_SDRAM_Addr
PORT SDRAM_BankAddr = fpga_0_MPMC3_SDRAM_CUSTOM_SDRAM_BankAddr
PORT SDRAM_CAS_n = fpga_0_MPMC3_SDRAM_CUSTOM_SDRAM_CAS_n
PORT SDRAM_RAS_n = fpga_0_MPMC3_SDRAM_CUSTOM_SDRAM_RAS_n
PORT SDRAM_WE_n = fpga_0_MPMC3_SDRAM_CUSTOM_SDRAM_WE_n
PORT SDRAM_CE = fpga_0_MPMC3_SDRAM_CUSTOM_SDRAM_CE
PORT SDRAM_CS_n = fpga_0_MPMC3_SDRAM_CUSTOM_SDRAM_CS_n
PORT SDRAM_Clk = fpga_0_MPMC3_SDRAM_CUSTOM_SDRAM_Clk
PORT SDRAM_DM = fpga_0_MPMC3_SDRAM_CUSTOM_SDRAM_DM
PORT SDRAM_DQ = fpga_0_MPMC3_SDRAM_CUSTOM_SDRAM_DQ
PORT MPMC_Clk0 = sys_clk_s
PORT MPMC_Clk90 = MPMC3_SDRAM_CUSTOM_mpmc_clk_90_s
PORT MPMC_Rst = sys_bus_reset
END