exponenta event banner

Использование сигналов шины для улучшения читаемости модели и генерации кода HDL

Для получения информации о сигналах шины, моделировании конструкции с помощью этих сигналов и генерации кода HDL можно следовать приведенным ниже инструкциям. Каждое руководство имеет уровень серьезности, который указывает уровень соответствия требованиям. Дополнительные сведения см. в разделе Рекомендации по моделированию HDL Уровни серьезности.

Идентификатор руководства

1.3.3

Серьезность

Информативный

Описание

Когда использовать шины?

Если DUT или другие блоки в модели имеют много входных или выходных сигналов, можно создать сигналы шины для улучшения читаемости модели. Сигнал шины или шина - это составной сигнал, который состоит из других сигналов, называемых элементами. Сигнал шины может иметь структуру различных типов данных или векторный сигнал с одинаковыми типами данных. Если все сигналы имеют одинаковый тип данных, обычно используется блок Mux. Составляющими сигналами или элементами шины могут быть:

  • Смешанные сигналы типа данных, такие как двойные, целочисленные и фиксированные

  • Смешанные скалярные и векторные элементы

  • Смешанные реальные и сложные сигналы

  • Другие автобусы, вложенные в любой уровень

  • Многомерные сигналы

Поддержка HDL Coder™ для автобусов

Можно создать код HDL для проектов, имеющих:

  • Порты подсистемы DUT, подключенные к шинам.

  • Блоки Simulink ® и Stateflow ® поддерживаются для генерации кода HDL.

Кодер HDL поддерживает генерацию кода для блоков с поддержкой шины в библиотеке блоков кодера HDL. Блоки с поддержкой шины представляют собой блоки, которые могут принимать сигналы шины в качестве входных сигналов и создавать сигналы шины в качестве выходных сигналов. Список блоков с поддержкой шины, поддерживаемых Simulink, см. в разделе Блоки с поддержкой шины.

Для получения информации о блоках, поддерживающих генерацию кода HDL с шинами, см. раздел Поддержка сигналов и типов данных.

Создание сигналов шины

Сигналы шины можно создавать с помощью блоков Bus Creator. Блок Bus Creator присваивает имя каждому создаваемому сигналу. При поиске их источников можно ссылаться на сигналы по имени.

Для примера, иллюстрирующего моделирование с помощью автобусов, откройте hdlcoder_bus_nested.slx. Дважды щелкните значок HDL_DUT Подсистема.

open_system('hdlcoder_bus_nested')
set_param('hdlcoder_bus_nested','SimulationCommand','Update')
open_system('hdlcoder_bus_nested/HDL_DUT')

В этой модели блоки Bus Creator создают два сигнала шины. Один сигнал шины содержит data1_En и CounterForParam сигналы. Сигнал другой шины содержит Param и sin сигналы. По умолчанию каждый сигнал на шине наследует имя сигнала, подключенного к шине. На этом рисунке показаны элементы в параметре блока шины для блока Bus Creator, который принимает входы. data1_En и CounterForParam.

Гнездовые автобусы

Вы видите другой блок Bus Creator, который объединяет эти два сигнала шины. Если одним или несколькими входами в блок Bus Creator является шина, то выходом является вложенная шина.

Блок Bus Creator генерирует имена для сигналов шины, соответствующие входы которых не имеют имен. Имена в форме signaln, где n - номер порта, к которому подключается входной сигнал. Например, если открыть диалоговое окно «Параметры блока» для второго блока Bus Creator, элементы в шине будут отображаться как signal1 и Param_sin.

Назначение значений сигналов шине

Чтобы изменить значения элементов шины, используйте блок назначения шины. Блок назначения шины используется для изменения значений элементов шины без добавления блоков выбора шины и создания шины, которые выбирают элементы шины и повторно собирают их в шину.

Например, откройте модель hdlcoder_bus_nested_assignment.

open_system('hdlcoder_bus_nested_assignment')
set_param('hdlcoder_bus_nested_assignment','SimulationCommand','Update')
open_system('hdlcoder_bus_nested_assignment/HDL_DUT')

В модели отображается блок назначения шины, который назначает значение 5 в data1_En сигнал в шине.

Выбор выходов шины

Чтобы извлечь сигналы из шины, включающей вложенные шины, используйте блоки выбора шины. По умолчанию блок выводит указанные элементы шины в виде отдельных сигналов. Вы также можете выводить сигналы в виде другой шины. OutputSignals свойство block для просмотра элементов в шине, выводимой блоком. С помощью этого свойства можно отслеживать, какие сигналы входят в блок выбора шины глубоко в иерархии модели.

get_param('hdlcoder_bus_nested/HDL_DUT/Bus Selector5', 'OutputSignals')
ans =

    'signal1.data1_En,signal1.CounterForParam,Param_sin.Param,Param_sin.sin'

Создание кода HDL

Чтобы создать код HDL для этой модели, выполните следующую команду:

makehdl('hdlcoder_bus_nested/HDL_DUT')

Вы видите, что генератор кода расширяет сигналы шины до скалярных сигналов в сгенерированном коде. Например, если открыть созданный файл Verilog для HDL_DUT Подсистема для блока задержки, который принимает два вложенных сигнала шины signal1 и Param_sin, вы видите четыре всегда блока, созданных для каждого сигнала в шине. Например, вы видите всегда блок для data1_En сигнал, входящий в состав signal1. На этом рисунке показаны скалярные сигналы, созданные для каждого сигнала шины в определении модуля.

Упрощение интерфейсов шины подсистемы

Интерфейсы шины подсистемы можно упростить с помощью блоков элементов шины. Блоки In Bus Element и Out Bus Element обеспечивают упрощенный и гибкий способ использования сигналов шины в качестве входных и выходных сигналов подсистем. Блок In Bus Element эквивалентен блоку Inport, объединенному с блоком Bus Selector. Блок Out Bus Element эквивалентен блоку Outport, объединенному с блоком Bus Creator. Для преобразования существующей модели, в которой используются блоки «Inport», «Bus Selector», «Bus Creator» и «Outport» для использования блоков «In Bus Element» и «Out Bus Element», можно использовать панели действий редактора Simulink ® Editor.

Например, откройте модель hdlcoder_bus_nested_simplified. Эта модель функционально эквивалентна hdlcoder_bus_nested модель, но является более упрощенной версией.

open_system('hdlcoder_bus_nested_simplified')
set_param('hdlcoder_bus_nested_simplified','SimulationCommand','Update')
open_system('hdlcoder_bus_nested_simplified/HDL_DUT')

Модель имеет две подсистемы, которые выполняют создание шины и выбор шины с помощью блоков элементов шины. Bus_Creator_Subsystem объединяет блоки Outport с блоками Bus Creator для создания блоков Out Bus Element.

open_system('hdlcoder_bus_nested_simplified/HDL_DUT/Bus_Creator_Subsystem')

Bus_Selection_Subsystem объединяет блоки Inport с блоками Bus Selector для создания блоков In Bus Element.

open_system('hdlcoder_bus_nested_simplified/HDL_DUT/Bus_Selection_Subsystem')

Дополнительные сведения см. в разделе Упрощение интерфейсов подсистемы и модели с шинами.

Виртуальные и невиртуальные шины

Сигналы шины в модели hdlcoder_bus_nested созданные ранее с помощью блоков Bus Creator и Bus Selector являются виртуальными шинами. Каждый сигнал элемента шины сохраняется в памяти, но сигнал шины не сохраняется. Шина упрощает график, но не имеет функционального эффекта. В сгенерированном HDL-коде отображаются составляющие сигналы, но не сигнал шины.

Чтобы легче отслеживать соответствие между сигналом шины в модели и сгенерированным кодом HDL, используйте невиртуальные шины. Невиртуальные шины генерируют чистый код HDL, поскольку он использует структуру для хранения сигналов шины. Чтобы преобразовать виртуальную шину в невиртуальную, в разделе «Параметры блока» блоков Bus Creator необходимо указать тип данных Output как Bus: object_name заменой object_name с именем объекта шины, а затем выберите Вывод (Output) в качестве невиртуальной шины.

См. раздел Преобразование виртуальной шины в невиртуальную.

Массив шин

Массив шин - это массив, элементами которого являются шины. Каждый элемент в массиве шин должен быть невиртуальным и иметь один и тот же тип данных.

Дополнительные сведения о моделировании с использованием массива шин см. в разделе Создание кода HDL для подсистем с массивом шин.

См. также

Функции

Связанные темы