HDL Coder™ соответствует следующим правилам описания RTL и проверяет конструкции моделирования, нарушающие эти правила. Кодер HDL сообщает о возможных нарушениях правил в стандартном отчете по кодированию HDL. Чтобы избежать этих нарушений, см. рекомендации правила.
2.A.A Комбинаторные логические условные обозначения
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. A.1 Ссылка |
| Кодер HDL включает пакет в каждом объекте в сгенерированный код VHDL. | Никаких действий не требуется. |
| 2. A.2 Предупреждение |
| Кодер HDL не генерирует функции для DUT. | Никаких действий не требуется. |
| 2. A.3 Предупреждение |
| Кодер HDL генерирует VHDL и код Verilog с правильным синтаксисом и соответствует этому правилу. | Никаких действий не требуется. |
2.A.B Условные обозначения функций
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. B.1 Ошибка |
| Кодер HDL не генерирует функции для DUT. | Никаких действий не требуется. |
| На входах и выходах кодер HDL использует std_logic или std_logic_vector для описания портов. | Никаких действий не требуется. | |
| 2. A.B.2–3 Ошибка |
| Созданный код HDL соответствует этому правилу для Verilog. | Никаких действий не требуется. |
| По умолчанию кодер HDL задает диапазон целочисленных типов в сгенерированном коде. | Никаких действий не требуется. | |
| 2. B.4 Ошибка |
| Кодер HDL не использует в коде Verilog конструкции tasks или fork-join. | Никаких действий не требуется. |
| Кодер HDL не использует битовые или векторные типы данных в сгенерированном коде. | Никаких действий не требуется. | |
| 2. B.5 Ошибка |
| При создании кода Verilog кодер HDL не использует границы синхронизации в описании задачи. | Никаких действий не требуется. |
| 2. B.6 Ошибка |
| Кодер HDL соответствует этому правилу, поскольку созданный код VHDL определяет диапазон, используемый std_logic_vector. | Никаких действий не требуется. |
2.A.C Соглашения о согласовании ширины бита
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. A.C.1–2 Ошибка |
| При создании экземпляра модуля кодер HDL принудительно устанавливает соответствие типов, чтобы соответствовать этому правилу. | Никаких действий не требуется. |
| При создании кода VHDL кодер HDL определяет порты IN, OUT или INOUT и не использует буфер или соединение. | Никаких действий не требуется. | |
| 2. C.3 Ошибка |
| Кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
| При формировании кода VHDL кодер HDL указывает порты «IN», «OUT» или «INOUT» и не использует буфер или соединение. | Никаких действий не требуется. | |
| 2. A.C.4–5 Ошибка |
| Кодер HDL генерирует код Verilog, соответствующий этому правилу. | Никаких действий не требуется. |
| В сгенерированном коде VHDL кодер HDL не указывает начальное значение для входного порта. | Никаких действий не требуется. |
2.A.D Соглашения операторов
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. D.5 Сообщение |
| В сгенерированном коде Verilog кодер HDL соответствует этому правилу для многобитовых операторов. | Никаких действий не требуется. |
| 2. D.6 Сообщение |
| По умолчанию кодер HDL не уменьшает одноразрядное или большое выражение. Если конструкция выполняет операции сокращения битов, результирующий код HDL может выполнять уменьшение большого выражения. | Обновите дизайн, чтобы не было вызовов операций уменьшения количества битов. |
2.A.E Условные условные обозначения
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. E.3 Сообщение |
| Кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
2.A.F Массивы, векторы, матричные условные обозначения
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. F.2 Предупреждение |
| Конструкция содержит векторы, LSB которых имеет ненулевое значение. | Обновите проект таким образом, чтобы созданный код содержал векторы или память с нулевым значением LSB. |
| 2. F.4 Предупреждение |
| Кодер HDL обеспечивает согласование типов и гарантирует, что переменная ширина индекса не будет слишком короткой. | Никаких действий не требуется. |
| 2. F.5 Ошибка |
| В сгенерированном коде кодер HDL не использует x или z для индекса массива. | Никаких действий не требуется. |
2.A.G Соглашения о назначении
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. G.1 Ошибка |
| Кодер HDL непосредственно присваивает агрегаты в сгенерированном коде без выполнения каких-либо промежуточных операций. | Никаких действий не требуется. |
2.A.H Соглашения о возвращаемом значении функции
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. H.1 Ссылка |
| В сгенерированном коде кодер HDL не использует ограниченные массивы в описании подпрограммы. | Никаких действий не требуется. |
| 2. H.2 Ссылка |
| В описании функции, когда возвращаемым типом является массив, кодер HDL указывает диапазон возвращаемых значений в функции в сгенерированном коде. | Никаких действий не требуется. |
| 2. A.H.4–6 Ошибка |
| Кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
| 2. A.H.9–10 Предупреждение |
| Кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
2.A.I Встроенные условные обозначения атрибутов
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. A.I.4–5 Ошибка |
| По умолчанию кодер HDL не использует пользовательские атрибуты в созданном коде. Если в проекте задаются свойства блока HDL, например DSPStyle, в создаваемом коде используются директивы синтеза. | Чтобы устранить эту ошибку, очистите свойство блока HDL, установленное для использования директив синтеза в сгенерированном коде. |
2.A.J Специальные условные обозначения VHDL
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. A.J.1–6 Предупреждение |
| Если в проекте используются инструкции loop, это предупреждение генерируется кодером HDL. | Чтобы избежать этого предупреждения, обновите конструкцию таким образом, чтобы не было операторов закольцовывания. |
| 2. A.J.8–13 Ошибка |
| Кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
Always"Конструкции комбинационной логики2.B.A Зависимости защелки
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. B.A.2 Ссылка |
| Кодер HDL не создает защелки. | Никаких действий не требуется. |
2.B.B Ограничения сигнала - I
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. B.B.2–3 Сообщение |
| Кодер HDL генерирует код, соответствующий использованию этих конструкций внутри | Никаких действий не требуется. |
| Кодер HDL не описывает более одного выражения события в | Никаких действий не требуется. |
2.B.C Ограничения сигнала - II
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. B.C.1–2 Ошибка |
| В проекте используются конструкции, генерирующие код Verilog с незаблокированными назначениями в комбинационном режиме. | Обновите алгоритм MATLAB ® или проект Stateflow ®, чтобы созданный код Verilog не использовал эти конструкции. |
| 2. B.C.3 Сообщение |
| В | Никаких действий не требуется. |
2.C.A Ограничения назначения
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. C.A.1–2c Ошибка |
| Кодер HDL не вводит никаких дополнительных данных и не добавляет эти конструкции при генерации триггеров в | Никаких действий не требуется. |
| 2. C.A.4–5b Предупреждение |
| Кодер HDL не генерирует код, который использует | Никаких действий не требуется. |
| 2. C.A.6 Ошибка |
| Кодер HDL использует | Никаких действий не требуется. |
| 2. C.A.7 Сообщение |
| Кодер HDL не генерирует несколько асинхронных сбросов. Созданный код может содержать несколько синхронных сбросов. | Никаких действий не требуется. |
| 2. C.A.8 Ошибка |
| Кодер HDL не использует конструкции ожидания. | Никаких действий не требуется. |
| 2. C.A.9 Ошибка |
| По умолчанию кодер HDL использует синтаксис событий для событий синхронизации. С помощью | Чтобы исправить эту ошибку, можно управлять |
2.C.B Ограничения оператора блокировки
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. C.B.1–2 Предупреждение |
| Кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
| 2. C.B.4 Ошибка |
| Созданный код HDL не содержит мертвого кода, поэтому кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
2.C.C Ограничения тактового сигнала
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. C.C.1–2b Ошибка |
| Кодер HDL использует передний фронт или задний фронт часов, но не использует оба фронта часов. | Никаких действий не требуется. |
| 2. C.C.4–5 Ошибка |
| Если в проекте генерируется код, использующий сигналы включения и сброса синхронизации в сетях, кодер HDL генерирует ошибку. | Чтобы минимизировать включение тактового сигнала в сгенерированном коде HDL, в свойствах настройки стандарта кодирования HDL включите свойство ClockEnureCheck. Чтобы удалить сигналы сброса в сетях, в свойствах настройки стандарта кодирования HDL включите параметр RemureResetCheck. |
| 2. C.C.6 Предупреждение |
| В модели Simulink ® или в коде MATLAB используются асинхронные сигналы сброса. | Чтобы избежать этого нарушения, используйте синхронные сигналы сброса. В диалоговом окне «Параметры конфигурации» установите для параметра «Тип сброса» значение |
2.C.D Ограничения начального значения
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. C.D.1 Ошибка |
| Созданный код HDL для проекта содержит несинтезируемый | Отключите опцию Initialize block RAM или Initialize all RAM block в помощнике по рабочим процессам HDL. Эту проверку правил можно отключить с помощью |
2.C.F Смешанные ограничения синхронизации
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. C.F.1–2a Предупреждение |
| Кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
2.D.A Ограничения модуля
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. D.A.2–3 Предупреждение |
| Кодер HDL не создает защелки в сгенерированном коде. | Никаких действий не требуется. |
| 2. D.A.4–5 Ошибка |
| По умолчанию кодер HDL не создает комбинированных циклов. Если алгоритм MATLAB содержит комбинационные циклы, сгенерированный код HDL может использовать комбинационные циклы. | Обновите код MATLAB таким образом, чтобы созданный код HDL не содержал комбинированных циклов. |
2.E.A Ограничения модуля
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. E.A.1–2 Предупреждение |
| Кодер HDL не создает в сгенерированном коде защелки или тристатные буферы. | Никаких действий не требуется. |
| 2. E.A.4–5b Ссылка |
| Кодер HDL не создает в сгенерированном коде защелки или тристатные буферы. | Никаких действий не требуется. |
| 2. E.A.6–9 Ошибка |
| По умолчанию кодер HDL не подключает входные или выходные порты непосредственно к двунаправленным портам. В модели Simulink, в свойствах блока HDL для входного или выходного порта, если для параметра BidirecedPort установлено значение | В модели Simulink в свойствах блока HDL для входного или выходного порта задайте для параметра BidirecedPort значение |
2.E.B Ограничения подключения
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. E.B.1 Предупреждение |
| Кодер HDL не имеет трехкомпонентных цепей в сгенерированном коде HDL. | Никаких действий не требуется. |
Always/Process Конструкция с учетом структуры цепи2.F.B Ограничения на количество условных операторов
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. F.B.1 Ошибка |
| Созданный код HDL для проекта содержит более одного условного оператора (if-else, case и loops), который описывается отдельно в блоке процесса (для | Обновите конструкцию таким образом, чтобы в блоке процесса содержалось не более одного условного оператора, описанного отдельно. Это правило можно настроить с помощью |
| 2. F.B.2 Ошибка |
| Кодер HDL не изменяет переменные в списке чувствительности, включая тактовый сигнал, сигнал сброса и сигнал включения. | Никаких действий не требуется. |
2.G.B Общие ограничения подэкспрессии
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. G.B.2 Предупреждение |
| Созданный код HDL не содержит мертвого кода или приводит к невыполненным условиям. | Никаких действий не требуется. |
2.G.C Зависимости глубины вложенности
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2.G.C.1a-b Сообщение |
| Код MATLAB содержит | Изменить Например, следующее: if ...
if ...
if ...
else
else
elseЭто правило можно настроить с помощью |
| 2. G.C.1c Сообщение | Verilog/VHDL: Chain of if...else if constructs must not be exceed default number of levels. | Созданный код HDL содержит | Изменить Например, следующее: if ... elseif ... elseif ... else Это правило можно настроить с помощью |
2.G.D Ограничения декоратора начала-конца
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. G.D.2–3 Сообщение |
| Сгенерированный код HDL соответствует этим конструкциям кода. | Никаких действий не требуется. |
|
2.H.A Структурные ограничения CASE
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. H.A.3–5 Ссылка |
| Созданный код HDL соответствует этим конструкциям для инструкций case и не использует директиву full_case. | Никаких действий не требуется. |
2.H.C Ограничения значений по умолчанию
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. H.C.3 Предупреждение |
| Кодер HDL описывает все возможные случаи в операторе случая, чтобы средство синтеза не выводило защелку. | Никаких действий не требуется. |
| 2. H.C.4 Сообщение |
| Кодер HDL не использует сигнал, которому присвоено значение по умолчанию. | Никаких действий не требуется. |
| 2. H.C.5 Предупреждение |
| Во избежание вывода блокировки кодер HDL описывает все возможные случаи, включая предложение по умолчанию. | Никаких действий не требуется. |
| 2. H.C.6–7 Сообщение |
| Кодер HDL не использует значения don care и исследует все пространство n-битового сигнала выбора. | Никаких действий не требуется. |
2.H.D Не волнуют ограничения
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2.H.D.1-4 Сообщение |
| Кодер HDL не генерирует конструкции casex или casez, так что он соответствует этому правилу. | Никаких действий не требуется. |
2.H.E Дополнительные ограничения CASE
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. H.E.1–4 Сообщение |
| Кодер HDL не использует | Никаких действий не требуется. |
2.I.A Ограничения тела контура
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2.I.A.2a-b Сообщение |
| Кодер HDL не генерирует конструкции casex или casez, чтобы они соответствовали этому правилу. | Никаких действий не требуется. |
| 2.I.A.2c-e Сообщение |
| Кодер HDL генерирует правильные конструкции цикла и соответствует этому правилу. | Никаких действий не требуется. |
|
2.I.B Непостоянные эксплуатационные ограничения
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. Я B.4 Ошибка |
| Кодер HDL использует отдельные циклы в части сброса и логической части описаний триггеров. | Никаких действий не требуется. |
2.I.C Выйти из ограничений
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. Я C.1 Ошибка |
| Созданный код содержит для циклов только в том случае, если кодеру HDL известно количество итераций. При выполнении цикла кодер HDL не выходит из цикла for, | Никаких действий не требуется. |
2.J.A Сравнение и ограничения приоритета
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2.J.A.4a-c Сообщение |
| По умолчанию кодер HDL не генерирует код, содержащий эти конструкции. Если в конструкции модели Simulink используются блоки Constant с параметром Architecture, равным | Обновите конструкцию модели Simulink, чтобы блоки константы не использовали эти конструкции, если для Architecture установлено значение |
| 2. J.A.4v Ошибка |
| По умолчанию кодер HDL не используется | Обновите конструкцию модели Simulink таким образом, чтобы созданный код HDL не использовал конструкции, указанные 2.J.A.4a-c правила. |
| 2. J.A.5–6 Предупреждение |
| Если в конструкции используются неизвестные константы или константы с высоким импедансом, кодер HDL выводит предупреждение. | Обновите модель Simulink или алгоритм MATLAB, чтобы не было постоянных с высоким импедансом. |
| |||
| 2. J.A.7–8 Сообщение |
| По умолчанию кодер HDL соответствует этому правилу. Если модель Simulink использует выходные сигналы ОЗУ с блоком коммутатора или мультипортового коммутатора, сгенерированный код HDL может использовать эти конструкции. | Обновите модель Simulink таким образом, чтобы выходные сигналы ОЗУ не поступали в блоки коммутатора или мультипортового коммутатора. |
2.J.B Ограничения векторных операторов
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. J.B.3 Сообщение |
| Кодер HDL не выполняет логическое отрицание векторов. | Никаких действий не требуется. |
2.J.C Реляционные операторские ограничения
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. J.C.1–6 Ошибка |
| Кодер HDL обеспечивает соответствие типов данных операндов в реляционном или логическом выражении. | Никаких действий не требуется. |
|
2.J.D Подписанный сигнал, ограничения типа данных
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. J.D.3–5 Предупреждение |
| Кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
| 2. J.D.6 Предупреждение |
| Кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
| 2. J.D.8 Предупреждение |
| Кодер HDL не использует функцию | Никаких действий не требуется. |
2.J.E Количество ограничений повторения оператором
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. J.E.5 Предупреждение |
| Кодер HDL соответствует этому правилу. | Никаких действий не требуется. |
2.J.F Ограничения точности
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. J.F.5 Предупреждение | Verilog/VHDL: Large multipliers must not be described using the multiplication operator with RTL. | Сформированный код HDL содержит оператор умножения ( | В своей конструкции реализуйте умножение с помощью алгоритма сдвига и сложения или убедитесь, что размер данных на выходе умножения не требует битовой ширины 16 или более. Это правило можно настроить с помощью |
2.J.G Общие ограничения подэкспрессии
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. J.G.2 Предупреждение | Verilog/VHDL: common operational expressions should be described separately. | Кодер HDL идентифицирует общие рабочие выражения и описывает их отдельно. | Никаких действий не требуется. |
2.J.H Ограничения оператора деления
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. J.H.1 Сообщение | Verilog/VHDL: Do not use arithmetic and logical expressions in the right and left sides of the division or modulus operator. | Кодер HDL гомогенизирует оператора деления в отдельную инструкцию и соответствует этому правилу. | Никаких действий не требуется. |
| 2. J.H.2–3 Сообщение | Verilog/VHDL: Keep the left side of the division or modulus operator within 12 bits. If right side of the division or modulus operator is not a power of two, keep it within 8 bits. | В вашей конструкции левая сторона модуля или операции деления больше 12 бит, или правая сторона не является степенью от двух до восьми бит. | Обновите конструкцию таким образом, чтобы количество битов в операндах операции деления или модуля находилось в пределах, заданных правилом. |
2.K.A Ограничения перехода состояния
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. K.A.4 Предупреждение | Verilog/VHDL: Number of states of an FSM should be within 40. | Конструкция модели содержит диаграмму или таблицу перехода состояний, в которой используется более 40 состояний. | Обновите конструкцию модели таким образом, чтобы ее состояние не превышало 40. |
2.K.C Ограничения логического разделения
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. K.C.1 Ссылка | Verilog/VHDL: Ensure that sequential and combinational parts of an FSM are in separate always block. | По умолчанию кодер HDL помещает последовательную и комбинационную части конечного автомата (FSM) в отдельные | Никаких действий не требуется. |
2.K.E Ограничения кодирования
| Правило/серьезность | Сообщение | Проблема | Рекомендации |
|---|---|---|---|
| 2. K.E.2 Предупреждение | VHDL: Do not assign state encoding by attaching attributes to the state variable which is declared as a type. | Кодер HDL не привязывает атрибуты к переменным состояния в сгенерированном коде. | Никаких действий не требуется. |