Подключаю 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
|