Files
APS/Other/FAQ.md
Andrei Solodovnikov d54291dad3 Update FAQ.md
2023-09-16 20:55:24 +03:00

150 lines
9.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Список типичных ошибок при работе с Vivado и SystemVerilog
## Содержание
- [Список типичных ошибок при работе с Vivado и SystemVerilog](#список-типичных-ошибок-при-работе-с-vivado-и-systemverilog)
- [Содержание](#содержание)
- [Ошибки связанные с САПР Vivado](#ошибки-связанные-с-сапр-vivado)
- [Не запускается симуляция FATAL\_ERROR PrivateChannel Error creating client socket](#не-запускается-симуляция-fatal_error-privatechannel-error-creating-client-socket)
- [Не запускается симуляция boot filesystem remove Процесс не может получить доступ к файлу](#не-запускается-симуляция-boot-filesystem-remove-процесс-не-может-получить-доступ-к-файлу)
- [Вылетает Vivado при попытке открыть схему](#вылетает-vivado-при-попытке-открыть-схему)
- [Не устанавливается Vivado Unable to open archive](#не-устанавливается-vivado-unable-to-open-archive)
- [Ошибки синтаксиса языка SystemVerilog](#ошибки-синтаксиса-языка-systemverilog)
- [имя сигнала is not a type](#имя-сигнала-is-not-a-type)
- [cannot find port on this module](#cannot-find-port-on-this-module)
## Ошибки связанные с САПР Vivado
### Не запускается симуляция FATAL_ERROR PrivateChannel Error creating client socket
**Причина:** ошибка [связана с проблемами Win Sockets](https://support.xilinx.com/s/question/0D52E00006iI37SSAS/isim-124-m81d-fatal-error-privatechannel-error-creating-client-socket?language=en_US), из-за которых симуляция не может быть запущена на сетевых дисках.
**Способ воспроизведения ошибки:** создать проект на сетевом диске.
**Решение:** Скорее всего, вы создали проект на диске `H:/`. Создайте проект на локальном диске (например, на рабочем столе диске `C:/`)
---
### Не запускается симуляция boot filesystem remove Процесс не может получить доступ к файлу
<details>
<summary>Скриншот ошибки:</summary>
![../.pic/Other/FAQ/boot_filesystem_remove.png](../.pic/Other/FAQ/boot_filesystem_remove.png)
</details>
**Причина:** вы запустили симуляцию с другим `top level`-модулем, не закрыв предыдущую симуляцию.
Скорее всего, после создания тестбенча, вы слишком быстро запустили первую симуляцию. Из-за этого, Vivado не успел обновить иерархию модулей и сделать тестбенч `top-level`-модулем. На запущенной симуляции все сигналы находились в Z и X состояниях, после чего вы попробовали запустить ее снова. К моменту повторного запуска иерархия модулей обновилась, сменился `top-level`, что и привело к ошибке.
**Способ воспроизведения ошибки:** запустить симуляцию, создать новый файл симуляции, сделать его `top-level`-модулем, запустить симуляцию.
**Решение:** Закройте предыдущую симуляцию (правой кнопкой мыши по кнопки SIMULATION -> Close Simulation) затем запустите новую.
<details>
<summary>Иллюстрация закрытия симуляции:</summary>
![../.pic/Other/FAQ/close_sim.png](../.pic/Other/FAQ/close_sim.png)
</details>
---
### Вылетает Vivado при попытке открыть схему
**Причина:** кириллические символы (русские буквы) в пути рабочей папки Vivado. Скорее всего, причина в кириллице в имени пользователя (**НЕ В ПУТИ УСТАНОВКИ VIVADO**).
**Способ воспроизведения ошибки:** (см. решение, только для воспроизведение необходимо сделать обратно, дать папке имя с кириллицей)
**Решение:** Чтобы не создавать нового пользователя без кириллицы в имени, проще назначить Vivado новую рабочую папку.
Для этого:
1. Создайте в корне диска `C:/` какую-нибудь папку (например Vivado_temp).
2. Откройте свойства ярлыка Vivado (правой кнопкой мыши по ярлыку -> свойства)
2.1 Если у вас нет ярлыка Vivado на рабочем столе, вместо этого вы запускаете его из меню пуск, кликните в меню пуск правой кнопкой мыши по значку Vivado -> открыть расположение файла. Если там будет ярлык выполните пункт 2, если там будет исполняемый файл — создайте ярлык для этого файла (правой кнопкой мыши по файлу -> создать ярлык) и выполните пункт 2.
3. В поле "Рабочая папка", укажите путь до созданной вами директории (в примере пункта 1 этот путь будет: `C:/Vivado_temp`). Нажмите "ОК".
---
### Не устанавливается Vivado Unable to open archive
<details>
<summary>Иллюстрация:</summary>
![../.pic/Other/FAQ/unable_to_open_archive.jpg](../.pic/Other/FAQ/unable_to_open_archive.jpg)
</details>
**Причина:** Скорее всего, проблема в том, что файлы установки (**НЕ ПУТЬ УСТАНОВКИ VIVADO**) расположены по пути с кириллическими символами (например, в какой-то личной папке "Загрузки").
**Решение:** Переместите файлы установки в директорию, не содержащую кириллицу в пути.
---
## Ошибки синтаксиса языка SystemVerilog
<!-- ### concurrent assignment to a non-net is not permitted
Запрещено выполнять непрерывное присваивание (`assign`) к объектам, не являющимися цепями. Скорее всего, вы пытались выполнить `assign b = a;`, где `b` является регистром.
```SystemVerilog
module alu(input a, input b,
input logic [3:0] alu_op,
output logic flag,
output logic result
);
assign flag = alu_op[3] ? (a > b) : 1'b0; // ошибка
endmodule
```
--- -->
<!-- ### procedural assignment to a non-register test is not permitted left-hand side should be reg
Запрещено использовать процедурное присваивание (присваивание в блоке `always` или `initial`) объектам, не являющимися регистрами. Скорее всего, вы пытались выполнить `b = a;` или `b <= a;` блоке `always`/`initial`, где `b` является проводом.
```Verilog
module adder(input a, input b, output c);
always @(*) begin
c = a ^ b; // ошибка, процедурное присваивание
// к проводам запрещено
end
endmodule
```
--- -->
### имя сигнала is not a type
Скорее всего, компилятор не распознал присваивание, поскольку оно было записано с ошибками. Вне блоков `always` и `initial` можно выполнять только непрерывное присваивание (через `assign`).
```SystemVerilog
module half_adder(input logic a, input logic b, output logic c);
c = a ^ b; // ошибка, для непрерывного присваивания
// необходимо ключевое слово assign
endmodule
```
---
### cannot find port on this module
Имя порта, указанного при подключении модуля (после точки) не соответствует ни одному имени сигналов подключаемого модуля
Пример
```SystemVerilog
module half_adder(input logic a, input logic b, output logic c);
assign c = a ^ b;
endmodule
module testbench();
logic A, B, C;
adder DUT(
.A(A), // <- здесь будет ошибка,
// т.к. в модуле half_adder нет порта 'A'
.b(B),
.c(C)
);
endmodule
```