Перейти к содержанию
    

Gowin: BSRAM byte_enable в режимах DPB, SDPB, SP

Хочу предупредить любителей (таких как я, например) ставить элементы соответствующими примитивами, а не использовать IP Core Generator. 

В даташите на говиновскую память (в доступной мне версии UG285-1.3.4E, 11/01/2022 по крайней мере) использование Byte Enable нигде явно не оговорено. Лишь однажды, в режиме SDPB, когда порт А используется только для записи, byte_en появляется в адресе в инстансе примитива. Больше никаких упоминаний. 

В prim_sim.v (когда уже приходится туда лезть) мы увидим, что в любом режиме с шириной данных больше или равной 8 битам по порту записи, младшие биты адреса используются как Byte Enable соответственно количеству байтов.

IP Core Generator сам подставляет в нужные биты перманентные единицы.

Надеюсь, сэкономлю кому-нибудь время, которое сам безвозвратно потратил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем генерить память КореГеном, если она прекрасно описывается в RTL? Или у Говина с этим проблемы? Или это какая-то хитро работающая память?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 1/30/2023 at 1:02 PM, fingertouch said:

Хочу предупредить любителей

А в чем предупреждение ?

В чем кроется опасность ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 часов назад, dimka76 сказал:

А в чем предупреждение ?

В чем кроется опасность ?

Так вроде же подробно рассказал...

Опасность не заметить, что существует byte enable, который в документации не описан. Если его не заметить - в память ничего записываться не будет.

Например, хотите вы поставить Dual Port, идёте в даташит, вытаскиваете оттуда инстанс (допустим, как и приведено в даташите, для 8-битной ширины шины данных) в виде

Спойлер

DPB bram_dpb_0 (
.DOA({doa[15:8],doa[7:0]}),
.DOB({doa[15:8],dob[7:0]}),
.CLKA(clka),
.OCEA(ocea),
.CEA(cea),
.RESETA(reseta),
.WREA(wrea),
.CLKB(clkb),
.OCEB(oceb),
.CEB(ceb),

.RESETB(resetb),
.WREB(wreb),
.BLKSELA({3'b000}),
.BLKSELB({3'b000}),
.ADA({ada[10:0],3'b000}),
.DIA({{8{1'b0}},dia[7:0]})
.ADB({adb[10:0],3'b000}),
.DIB({{8{1'b0}},dib[7:0]})
);

И видите там нули в младших битах адреса. Повторяете всё по чертежу. И какое-то время не можете отдуплить, почему из памяти читается какая-то фигня. Потом понимаете, что фигня - инициализационный массив. Ищите ошибку в автомате генерации адресов. Смотрите сигналы внутри примитива. А на самом деле при записи с соответствующего порта просто в младший бит адреса нужно было подсунуть единицу.

22 часа назад, andrew_b сказал:

Зачем генерить память КореГеном, если она прекрасно описывается в RTL? Или у Говина с этим проблемы? Или это какая-то хитро работающая память?

Честно говоря, я вообще не люблю кореген. Не только в отношении памяти. Тем более, что в говине я ещё ни разу не видел, чтобы он создавал какой-то хитросделанный код, отличающийся от простенького враппера с соответствующими настройками. Для тех, кому лень разбираться с настройками самостоятельно.

Однако, как показала практика, отсутствие нормальной документации у говина приходится восполнять в том числе и сравнением с корегеновскими поделками.  

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, fingertouch said:

Честно говоря, я вообще не люблю кореген. Не только в отношении памяти. Тем более, что в говине я ещё ни разу не видел, чтобы он создавал какой-то хитросделанный код, отличающийся от простенького враппера с соответствующими настройками. Для тех, кому лень разбираться с настройками самостоятельно.

Однако, как показала практика, отсутствие нормальной документации у говина приходится восполнять в том числе и сравнением с корегеновскими поделками.  

Много слов ни о чём. Вы пытались описать нужную вам память в RTL?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 минуты назад, andrew_b сказал:

Много слов ни о чём. Вы пытались описать нужную вам память в RTL?

Нет. И пробовать, как она отсинтезируется, не интересно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...