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

    

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.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация