# Как добавить файл с содержимым памяти в проект

Представим ситуацию. Сел, значит, ты делать процессор на ПЛИС, делал-делал, и наконец сделал, прошил его в ПЛИС, но как запустить на нем программу?

Благо, в ПЛИС предусмотрена возможность инициализировать (то есть задавать начальные значения) блочную память начальными значениями. Хранит она их рядом со своей прошивкой. При подаче питания на ПЛИС она конфигурирует себя из энергонезависимой памяти, и инициализирует блочную память.

Программу (то, чем нужно проинициализировать память) нужно подсунуть до этапа сборки прошивки в виде текстового файла, в котором данные представлены 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-файла.

![../.pic/Vivado%20Basics/How%20to%20add%20a%20mem-file/how_to_mem_1.png](../.pic/Vivado%20Basics/How%20to%20add%20a%20mem-file/how_to_mem_1.png)

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

![../.pic/Vivado%20Basics/How%20to%20add%20a%20mem-file/how_to_mem_2.png](../.pic/Vivado%20Basics/How%20to%20add%20a%20mem-file/how_to_mem_2.png)

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

![../.pic/Vivado%20Basics/How%20to%20add%20a%20mem-file/how_to_mem_3.png](../.pic/Vivado%20Basics/How%20to%20add%20a%20mem-file/how_to_mem_3.png)

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

![../.pic/Vivado%20Basics/How%20to%20add%20a%20mem-file/how_to_mem_4.png](../.pic/Vivado%20Basics/How%20to%20add%20a%20mem-file/how_to_mem_4.png)
