SP605 Spartan 6 адресация DDR3

Следующий пост довольно длинный, но поскольку у меня были проблемы с тем, чтобы плата SP605 должным образом взаимодействовала с DDR3 уже более месяца, надеюсь, это будет полезно для других в той же ситуации, в которой я нахожусь. Я вполне уверен, что это простая конфигурация или концептуальная ошибка, но я был бы более чем рад, что это скоро решится.

=== СЦЕНАРИЙ ===

Я создал интерфейс USB-UART для связи с FPGA и управления DDR3. Используя генератор IP в ISE, я создал оболочку MIG, а затем разработал контроллер интерфейса памяти. Тем не менее, я ссылаюсь на руководства ug388 и ug416, но мне не удалось заставить DDR3 вести себя так, как ожидалось.

=== ПОСТАНОВКА ЗАДАЧИ ===

Играя с длинами пакета для команд записи и чтения, я могу получить данные от DDR3, но схема адресации, кажется, не верна, так как данные дублируются в адресах 0 и 1, 2 и 3, 4 и 5., и так далее. Кроме того, всякий раз, когда я пишу в адрес 0, например, ничего не меняется. Затем, когда я пишу в адрес 1, оба адреса 0 и 1 обновляются с использованием значения данных, которое я только что отправил. Кажется, из-за этого связанного эффекта я "теряю" половину пространства памяти.

=== DDR3 IP КОНФИГУРАЦИЯ ===

Настройка для DDR3 с использованием генератора IP - с учетом сценария платы SP605 - приведена ниже. В итоге я активировал DDR3 Bank 3 и настроил Port0 как 32-битный двунаправленный.

Выбор памяти:

  • Включить интерфейс AXI: не отмечено

  • Использовать расширенный диапазон производительности MCB: не проверено

  • Тип памяти для банка 3: DDR3 SDRAM

  • Тип памяти для банка 1: нет

Варианты для C3 - DDR3 SDRAM

  • Частота: 400 МГц

  • Часть памяти: MTJ41J64M16XX-187E

Варианты памяти для C3 - DDR3 SDRAM

  • Контроль полного сопротивления выходного драйвера: RZQ / 6

  • RTT (номинал) - ODT: RZQ/4

  • Автообновление: включено

Конфигурация порта для C3 - DDR3 SDRAM

  • Два 32-разрядных двунаправленных и четыре 32-разрядных однонаправленных порта

  • Port0: проверено

  • Порт 1: не проверено

  • Порт 2: не проверено

  • Порт 3: не проверено

  • Порт 4: не проверено

  • Port5: не проверено

  • Выбор отображения адресов памяти: строка-банк-столбец

Варианты ПЛИС для C3 - DDR3 SDRAM

  • Окончание контакта интерфейса памяти: калиброванное входное окончание

  • Выберите расположение контактов RZQ: R7

  • Выберите расположение контактов ZIO: W4

  • Сигналы отладки для контроллера памяти: отключить

  • Системные часы: дифференциальные

=== СТРУКТУРА ДАННЫХ ===

От Matlab я посылаю 64-битную команду, которая должна записать или прочитать DDR3 на основе адреса и данных, предоставленных в этой команде.

wire [00:00] cmd_instruction = usb_data[63:63];         // ‘0’ = write; ‘1’ = read
wire [27:00] cmd_address = usb_data[62:37];             // 26-bit address
wire [31:00] cmd_data = usb_data[31:00];                // 32-bit data

В ug388 можно извлечь следующее:

Страница 20: Адрес имеет ширину 26 бит.

C_MEM_ADDR_WIDTH = 13
C_MEM_BANKADDR_WIDTH = 3
C_MEM_NUM_COL_BITS = 10
C_P0_DATA_PORT_SIZE = 32  // 32-bit data ports
C_P0_MASK_SIZE = 4        // 4 bytes = 32 bits (1 mask bit = 1 entire data byte)

Стр. 26-27: Структура данных команд.

  • pX_cmd_addr [29: 0]: 30-битный адрес, однако последние два бита должны = "00", поскольку каждое слово (32 бита) состоит из 4 байтов.

  • pX_cmd_bl [5: 0]: длина пакета в 1 получается путем установки этого сигнала в 0.

  • pX_cmd_instr [2: 0]: используются только команды команды write=”000” и read=”001”.

Страница 28: Написать структуру данных.

  • pX_wr_mask [PX_MASKSIZE-1: 0]: для 4-битной маски установлено значение "0000", поэтому все 4 байта всегда записываются в память.

=== НАЗНАЧЕНИЯ СИГНАЛА ===

Используя всю эту информацию, я назначил свои сигналы следующим образом:

assign p0_mcb_cmd_instr = {2'b00, cmd_instruction};
assign p0_mcb_cmd_addr = {2’d0, cmd_address, 2'd0};
assign p0_mcb_cmd_bl = 6'd0;
assign p0_mcb_wr_data = cmd_data;
assign p0_mcb_wr_mask = 4'd0;

localparam C3_MEM_BURST_LEN = 8; 

=== ВЫВОДЫ ===

На основании конфигурации кто-нибудь знает, каким должно быть ожидаемое поведение моего контроллера? Если какая-либо дополнительная информация необходима для разъяснения, пожалуйста, дайте мне знать.

Большое спасибо, Бруно.

0 ответов

Другие вопросы по тегам