mirror of
https://github.com/MPSU/APS.git
synced 2025-09-17 01:50:40 +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
@@ -293,7 +293,7 @@
|
||||
|
||||
Разработать процессор `CYBERcobra`, объединив ранее разработанные модули:
|
||||
|
||||
- Память инструкций (проинициализированную в двоичном формате файлом [`example.txt`](example.txt))
|
||||
- Память инструкций (проинициализированную в двоичном формате файлом [`example.mem`](example.mem))
|
||||
- Регистровый файл
|
||||
- Арифметико-логическое устройство
|
||||
- 32-битный сумматор
|
||||
@@ -331,13 +331,13 @@ endmodule
|
||||
5. Мультиплексор, выбирающий источник записи в регистровый файл.
|
||||
3. После описания модуля, его необходимо проверить с помощью [`тестового окружения`](../../Basic%20Verilog%20structures/Testbench.md).
|
||||
1. Тестовое окружение находится [`здесь`](tb_cybercobra.sv).
|
||||
2. Программа, которой необходимо проинициализировать память инструкций находится [`здесь`](example.txt). Алгоритм работы программы приведен в разделе [`Финальный обзор`](#финальный-обзор).
|
||||
2. Программа, которой необходимо проинициализировать память инструкций находится [`здесь`](example.mem). Алгоритм работы программы приведен в разделе [`Финальный обзор`](#финальный-обзор).
|
||||
3. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
|
||||
4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня.
|
||||
5. **Во время симуляции, вы должны прожать "Run All" и убедиться, что в логе есть сообщение о завершении теста!**
|
||||
6. В этот раз, в конце не будет сообщения о том, работает ли ваше устройство или в нем есть ошибки. Вы должны самостоятельно проверить работу модуля, перенеся его внутренние сигналы на временную диаграмму, и [проверив](../../Vivado%20Basics/Debug%20manual.md) логику их работы.
|
||||
4. Добавьте в проект модуль верхнего уровня ([nexys_cybercobra_demo.sv](board%20files/nexys_cybercobra_demo.sv)), соединяющий процессор с периферией в ПЛИС. Описание работы модуля находится [здесь](board%20files)
|
||||
5. Замените содержимое файла, инициализирующего память инструкций новой программой, которая размещена [`здесь`](board%20files/demo.txt).
|
||||
5. Замените содержимое файла, инициализирующего память инструкций новой программой, которая размещена [`здесь`](board%20files/demo.mem).
|
||||
6. Убедитесь, что у файла, инициализирующего память инструкций выставлен тип `Memory Initialization Files`, а не `Memory File`.
|
||||
7. Подключите к проекту файл ограничений ([nexys_a7_100t.xdc](board%20files/nexys_a7_100t.xdc)), если тот еще не был подключен, либо замените его содержимое данными из файла к этой лабораторной работе.
|
||||
8. Проверьте работу процессора в ПЛИС.
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
Если вы не понимаете, что лежит в этой папке, или если надо вспомнить, как прошить ПЛИС, можно воспользоваться [`этой инструкцией`](../../../Vivado%20Basics/Program%20nexys%20a7.md)
|
||||
|
||||
Файл [`nexys_cybercobra_demo.sv`](nexys_cybercobra_demo.sv), который нужно запускать с [`демонстрационным файлом инструкций`](demo.txt), является демонстрацией возможностей кобры, реализующий лишь декодирование выходных значений в формат для отображения на семисегментных индикаторах, а вся логика работы реализована инструкциями в текстовом файле.
|
||||
Файл [`nexys_cybercobra_demo.sv`](nexys_cybercobra_demo.sv), который нужно запускать с [`демонстрационным файлом инструкций`](demo.mem), является демонстрацией возможностей кобры, реализующий лишь декодирование выходных значений в формат для отображения на семисегментных индикаторах, а вся логика работы реализована инструкциями в текстовом файле.
|
||||
|
||||
Сначала выводится приветствие `≡ALOHA≡`, меняя положение восьми правых переключателей, последовательно нажимая на кнопку `BTND` (на рисунке выделена синим цветом), можно включать или выключать `один` из выбранных сегментов. Кнопка `CPU RESET` (на рисунке выделена красным цветом) возвращает все исходное состояние. Попробуйте погасить все слово, а потом снова его зажечь.
|
||||
|
||||
|
@@ -154,10 +154,10 @@ cyberconverter принимает до двух аргументов. Поряд
|
||||
cyberconverter --help
|
||||
```
|
||||
|
||||
2. Преобразование программы, записанной в файле `test.txt`, с записью результата в файл `program.txt`:
|
||||
2. Преобразование программы, записанной в файле `test.txt`, с записью результата в файл `program.mem`:
|
||||
|
||||
```bash
|
||||
cyberconverter test.txt program.txt
|
||||
cyberconverter test.txt program.mem
|
||||
```
|
||||
|
||||
3. Если не указан второй аргумент, результат будет записан в файл:
|
||||
@@ -169,7 +169,7 @@ cyberconverter принимает до двух аргументов. Поряд
|
||||
|
||||
Результат будет записан в файл `test_converted.txt`.
|
||||
|
||||
4. Если программа будет запущена без аргументов, то исходным файлом будет считаться файл `program.txt`.
|
||||
4. Если программа будет запущена без аргументов, то исходным файлом будет считаться файл `program.mem`.
|
||||
|
||||
В случае отсутствия исходного файла, наличия неподдерживаемых символов или неверной длины инструкции будет выведено сообщение об ошибке.
|
||||
|
||||
|
@@ -15,11 +15,11 @@ void print_help(const std::string program_name)
|
||||
cout << "in hex-format.\n\n";
|
||||
cout << "If output file omitted, the <input_file_base>_converted.<input_file_ext>\n";
|
||||
cout << "will be produced.\n\n";
|
||||
cout << "If input file omitted, program.txt will be used.\n\n";
|
||||
cout << "If input file omitted, program.mem will be used.\n\n";
|
||||
cout << "Example:\n\n";
|
||||
cout << program_name << " open \"program.txt\" and produce \"program_converted.txt\"\n";
|
||||
cout << program_name << " open \"program.mem\" and produce \"program_converted.mem\"\n";
|
||||
cout << program_name << " test.txt open \"test.txt\" and produce \"test_converted.txt\"\n";
|
||||
cout << program_name << " test.txt myname.dat open \"test.txt\" and produce \"myname.dat\"\n";
|
||||
cout << program_name << " test.txt myname.mem open \"test.txt\" and produce \"myname.mem\"\n";
|
||||
|
||||
}
|
||||
|
||||
@@ -39,8 +39,8 @@ int main(int argc, char ** argv)
|
||||
switch (argc)
|
||||
{
|
||||
case 1:
|
||||
ifname = "program.txt";
|
||||
ofname = "program_converted.txt";
|
||||
ifname = "program.mem";
|
||||
ofname = "program_converted.mem";
|
||||
break;
|
||||
case 2:
|
||||
if (!strcmp(argv[1], "--help") || !strcmp(argv[1], "-h"))
|
||||
|
Reference in New Issue
Block a user