mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 09:10:10 +00:00
Переход на использование mem-файлов (#38)
Раньше в вивадо была проблема с использованием mem-файлов. Они нормально моделировались, но при этом не использовались в синтезе, пока им не выставишь тип "Memory Initialization File". Однако с выставлением этого типа файл нельзя было открыть в вивадо (и даже поменять тип этого файла). Поэтому, все файлы в курсе носили расширение .txt, чтобы их можно было легко открыть в любом другом редакторе, а в вивадо выставлялся злополучный тип "Memory Initialization File" вручную. Сейчас же, судя по всему, вивадо нормально выполняет синтез и с "Memory File" тоже, а значит нет нужды в каком-либо изменении типов, лишь бы файлы носили расширение .mem. При этом файлы этого типа можно открывать и редактировать в редакторе вивадо.
This commit is contained in:
committed by
Andrei Solodovnikov
parent
6b2f0c2bab
commit
1bb2fdd323
@@ -1,35 +0,0 @@
|
||||
# Как добавить файл с содержимым памяти в проект
|
||||
|
||||
Представим ситуацию. Сел, значит, ты делать процессор на ПЛИС, делал-делал, и наконец сделал, прошил его в ПЛИС, но как запустить на нем программу?
|
||||
|
||||
Благо, в ПЛИС предусмотрена возможность инициализировать (то есть задавать начальные значения) блочную память начальными значениями. Хранит она их рядом со своей прошивкой. При подаче питания на ПЛИС она конфигурирует себя из энергонезависимой памяти, и инициализирует блочную память.
|
||||
|
||||
Программу (то, чем нужно проинициализировать память) нужно подсунуть до этапа сборки прошивки в виде текстового файла, в котором данные представлены ASCII-символами в двоичном или 16-ричном виде. В требуемом verilog-модуле необходимо указать какую память в модуле и из какого файла нужно инициализировать. Вот пример объявления памяти RAM с восьмью 32-битными ячейками:
|
||||
|
||||
``` verilog
|
||||
reg [31:0] RAM [0:7];
|
||||
initial $readmemh("my_program.txt", RAM);
|
||||
```
|
||||
|
||||
В данном примере в память, именуемую RAM, помещаются значения из файла с названием my_program.txt. Файл не обязательно должен покрывать всю область памяти, количество строк может быть любым между 0 и максимумом. Но длинна строк должна строго соответствовать разрядности ячеек инициализируемой памяти. `$readmemh` для 16-ричнного представления чисел в файле, `$readmemb` – для файлов с двоичной записью.
|
||||
|
||||
Кроме озвученного нужно сообщить САПРу, что файл памяти относится к проекту, и что он – файл памяти, а не какой-то другой. Для этого надо сделать два действия:
|
||||
|
||||
1. Добавить файл в проект в качестве `Design-файла`
|
||||
2. Указать в его свойствах тип файла `Memory Initialization Files`
|
||||
|
||||
Файл в проект добавляется точно так же, как при создании Verilog-файла.
|
||||
|
||||

|
||||
|
||||
Дальше надо добавить файл с содержимым памяти. Обрати внимание, чтобы его можно было выбрать, нужно поставить в фильтрах `All Files`, как на картинке снизу.
|
||||
|
||||

|
||||
|
||||
После добавления файла в проект он отобразится в окне `Sources`, в папке `Text`. Чтобы поменять тип файла на нужный, необходимо выделить этот файл, нажав на него, после чего в окне `Source File Properties`, во вкладке `Properties` найти свойство `FILE_TYPE` и заменить его на `Memory Initialization Files`. Описанное отмечено на картинке далее.
|
||||
|
||||

|
||||
|
||||
Если после изменений файл переместился в папку `Memory Initialization Files` в окне `Sources`, значит все сделано правильно!
|
||||
|
||||

|
@@ -14,5 +14,4 @@
|
||||
7. [Разобраться с ошибками, при попытке открыть схему / запустить симуляцию](Elaboration%20failed.md)
|
||||
8. [Находить и исправлять ошибки дизайна, найденные тестовым окружением](Debug%20manual.md)
|
||||
9. [Добавить заголовочный файл в проект Vivado](Verilog%20Header.md)
|
||||
10. [Добавить файл инициализации памяти в проект Vivado](How%20to%20add%20a%20mem-file.md)
|
||||
11. [Понять как работают этапы элаборации/синтеза/имплементации](Implementation%20steps.md)
|
||||
10. [Понять как работают этапы элаборации/синтеза/имплементации](Implementation%20steps.md)
|
||||
|
Reference in New Issue
Block a user