В устройстве применяется Artix-7 XC7A50TCSG325-2L. К ней подключены 2 микросхемы DDR3L (4Gb x8), запитаны от 1.5в (при возможных 1.35в). Соответственно предполагалось иметь 2 контроллера MIG для каждой памяти. Для тестов была пока запаяна только одна микросхема DDR3L. Инициализацию память проходит, memorytest тоже (тест прогонялся примерно 1 час).
Ситуации:
1. ПЛИС с включенным питанием без конфигурации потребляет ~0.7W (темп-ра кристалла ~45град)
2. ПЛИС с проектом microblaze (Helloworld в бесконечном цикле) ~0.9W (темп-ра кристалла ~52град)
3. ПЛИС с проектом microblaze + одна DDR3L (MemoryTest в бесконечном цикле) ~ 2.0W(!) (темп-ра кристалла ~82град!)
Сразу скажу, что даже в таких диких условиях память корректно работает. Однако, температура кристалла и энергопотребление никак не сопоставляется с тем, что
обещал XPE и тем, что было спрогнозировано компилятором:
>>Total On-chip Power 0.78W
>>Junction Temperature 28.7 град
Проверял напряжение всех линий питания под нагрузкой и без - всё в порядке.
Я нахожу ситуацию №3 неадекватной. Я не первый, кто столкнулся с этой проблемой, однако решения ей пока в сети не нашёл:
раз два три
Прикладываю конфиг MIGa для одной из DDR3L:
Цитата
MIG Output Options:
Module Name : SoC_my_mig_7series_0_0
No of Controllers : 1
Selected Compatible Device(s) : xc7a35t-csg325
FPGA Options:
System Clock Type : No Buffer
Reference Clock Type : No Buffer
Debug Port : OFF
Internal Vref : enabled
IO Power Reduction : ON
XADC instantiation in MIG : Enabled
Extended FPGA Options:
DCI for DQ,DQS/DQS#,DM : enabled
Internal Termination (HR Banks) : 40 Ohms
/*******************************************************/
/* Controller 0 */
/*******************************************************/
Controller Options :
Memory : DDR3_SDRAM
Interface : AXI
Design Clock Frequency : 2500 ps ( 0.00 MHz)
Phy to Controller Clock Ratio : 4:1
Input Clock Period : 10000 ps
CLKFBOUT_MULT (PLL) : 8
DIVCLK_DIVIDE (PLL) : 1
VCC_AUX IO : 1.8V
Memory Type : Components
Memory Part : MT41K512M8XX-125
Equivalent Part(s) : MT41K512M8RH-125
Data Width : 8
ECC : Disabled
Data Mask : enabled
ORDERING : Normal
AXI Parameters :
Data Width : 64
Arbitration Scheme : RD_PRI_REG
Narrow Burst Support : 0
ID Width : 1
Memory Options:
Burst Length (MR0[1:0]) : 8 - Fixed
Read Burst Type (MR0[3]) : Sequential
CAS Latency (MR0[6:4]) : 6
Output Drive Strength (MR1[5,1]) : RZQ/6
Controller CS option : Enable
Rtt_NOM - ODT (MR1[9,6,2]) : RZQ/6
Rtt_WR - Dynamic ODT (MR2[10:9]) : Dynamic ODT off
Memory Address Mapping : BANK_ROW_COLUMN
Module Name : SoC_my_mig_7series_0_0
No of Controllers : 1
Selected Compatible Device(s) : xc7a35t-csg325
FPGA Options:
System Clock Type : No Buffer
Reference Clock Type : No Buffer
Debug Port : OFF
Internal Vref : enabled
IO Power Reduction : ON
XADC instantiation in MIG : Enabled
Extended FPGA Options:
DCI for DQ,DQS/DQS#,DM : enabled
Internal Termination (HR Banks) : 40 Ohms
/*******************************************************/
/* Controller 0 */
/*******************************************************/
Controller Options :
Memory : DDR3_SDRAM
Interface : AXI
Design Clock Frequency : 2500 ps ( 0.00 MHz)
Phy to Controller Clock Ratio : 4:1
Input Clock Period : 10000 ps
CLKFBOUT_MULT (PLL) : 8
DIVCLK_DIVIDE (PLL) : 1
VCC_AUX IO : 1.8V
Memory Type : Components
Memory Part : MT41K512M8XX-125
Equivalent Part(s) : MT41K512M8RH-125
Data Width : 8
ECC : Disabled
Data Mask : enabled
ORDERING : Normal
AXI Parameters :
Data Width : 64
Arbitration Scheme : RD_PRI_REG
Narrow Burst Support : 0
ID Width : 1
Memory Options:
Burst Length (MR0[1:0]) : 8 - Fixed
Read Burst Type (MR0[3]) : Sequential
CAS Latency (MR0[6:4]) : 6
Output Drive Strength (MR1[5,1]) : RZQ/6
Controller CS option : Enable
Rtt_NOM - ODT (MR1[9,6,2]) : RZQ/6
Rtt_WR - Dynamic ODT (MR2[10:9]) : Dynamic ODT off
Memory Address Mapping : BANK_ROW_COLUMN
Что пробовал сделать:
1. Первоначально думал, что проблема с памятью. Благо запаял для тестов только одну микр-му. Сконфигал ядро на работу с незапянной памятью и наблюдал такое же высокое потребление. (стало быть дело в MIG?)
2. Пробовал отключать терминирование DQ\DSQ на ПЛИС - не помогло. Кстати работать не перестало, память всё так же инициализируется и проходит memorytest.
3. Версия ПЛИС с индексом -2L позволяет гонять её при напряжении ядра 0.9v. Что соответственно и сделал (1.0v -> 0.9v). Это помогло на ~10% снизить энергопотребление, но проблему не решило.
Заметил следующую одну очень странную особенность: ПЛИС зашита конфигурацией, но кода microblaze нет (ничего не гоняется и по идее DDR3 неактивна, кроме, наверное refresh). После загрузки кода, и запуска проекта (memorytest), потребление НЕ изменяется!! Тогда вопрос, чем занят MIG всё то время, когда я к нему не обращаюсь? Насколько это нормальное поведение контроллера? И почему вообще это ядро так много потребляет?
Сразу скажу, что решить проблему активным охлаждением в моём случае невозможно. Единственно, что возможно - пассивное охлаждение, но рассчитывать на него не хочется.
Спасибо!