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

ARTIX7 - ram_style = "block"

Здравствуйте!

 

У кого получилось с помощью атрибута синтезатора задействовать RAM, подскажите

Объявляю, инициализирую

(* ram_style = "block" *) reg [7:0] ram [1023:0];

initial begin
ram[0] = 8'h00; ram[1] =  8'h00; ram[2] =  8'h00;ram[3] =  8'h00;
ram[4] =  8'h00; ram[5] =  8'h00; ram[6] =  8'h00;ram[7] =  8'h00;
ram[8] =  8'h00; ram[9] = 8'h00; ram[10] =  8'h00;ram[11] =  8'h00;

 

reg [7:0] regi;

 

Далее записываю

 

ram[0] = 8'b01010101;

Далее считываю

 

reg = ram[0];

 

В итоге неопределенное состояние регистра и RAM блок не имплементируется в дизайне

По идее если не имплементируется поведенческая модель в RAM, то она хотя бы имплементируется в триггерах, а тут вообще ничего, и синтезатор не выдает ошибок

 

 

 

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


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

Приветствую!

 

В начале пути FPGA дизайнера полезно посмотреть как это делают другие.

В Vivado есть хорошие примеры имплементации соответствующих модулей (тригеров, памяти, ...) в Toos/Language template.

 

Удачи! Rob.

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


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

Далее считываю

 

reg = ram[0];

 

В итоге неопределенное состояние регистра и RAM блок не имплементируется в дизайне

По идее если не имплементируется поведенческая модель в RAM, то она хотя бы имплементируется в триггерах, а тут вообще ничего, и синтезатор не выдает ошибок

Два слова о памяти.

1. Латентность. Сколько раз считываете из одной ячейки? Если есть латентность, то может быть надо читать 2 или 3 раза...

2. А еще есть glbl.v ... Это такой файлик, который входит в состав памяти и там написано, сколько времени память требует для того, чтобы прийти в норму в начале работы после инициализации кристалла. Я обычно делаю всю симуляцию в отдельной папке и в этом файле затираю пару нулей в этой задержке...

 

А то, что память "не имплементируется" и не "работает" - то это разные вещи...

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


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

Приветствую!

Два слова о памяти.

1. Латентность. Сколько раз считываете из одной ячейки? Если есть латентность, то может быть надо читать 2 или 3 раза...

2. А еще есть glbl.v ... Это такой файлик, который входит в состав памяти и там написано, сколько времени память требует для того, чтобы прийти в норму в начале работы после инициализации кристалла. Я обычно делаю всю симуляцию в отдельной папке и в этом файле затираю пару нулей в этой задержке...

 

А то, что память "не имплементируется" и не "работает" - то это разные вещи...

В таком виде как привел TC никакая память не синтезируется ни с латентностью 2 ни с какой другой.

Ну и для чисто функциональной симуляции файл glbl.v тоже не нужен. Это только если используются модели примитивов Xilinx.

TC для начала надо бы основам написания синтезируемого кода поучится, а потом уж нырять в глубину на мелководье :) .

 

Удачи! Rob.

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


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

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

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

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

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

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

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

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

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

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