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

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

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

1.3.3

Серьезность

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

Описание

Когда использовать автобусы?

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

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

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

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

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

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

HDL Coder™ для шин

Вы можете сгенерировать HDL-код для проектов, которые имеют:

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

  • Блоки Simulink ® и Stateflow ®, поддерживаемые для генерации HDL-кода.

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

Смотрите Signal and Data Type Support для блоков, которые поддерживают генерацию 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')

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

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

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

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 Подсистема для блока Delay, который принимает два вложенных сигнала шины signal1 и Param_sin, вы видите четыре всегда блоки созданные для каждого сигнала в шине. Для примера, вы видите всегда блок для data1_En сигнал, который является частью signal1. Этот рисунок отображает скалярные сигналы, созданные для каждого сигнала шины в определении модуля.

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

Можно упростить интерфейсы шины подсистемы с помощью блоков Bus Element. Блоки 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 Element. The Bus_Creator_Subsystem объединяет блоки Outport с блоками Bus Creator для создания блоков Out Bus Element.

open_system('hdlcoder_bus_nested_simplified/HDL_DUT/Bus_Creator_Subsystem')

The 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-код, потому что он использует структуру для хранения сигналов шины. Чтобы преобразовать виртуальную шину в невиртуальную, в блоках Параметры Блоков of the Bus Creator задайте тип данных выход следующим Bus: object_name путем замены object_name с именем объекта шины, а затем выберите команду Output as nonvirtual bus.

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

Массив шин

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

Чтобы узнать больше о моделировании с массивом шин, смотрите Генерацию HDL-кода для подсистем с массивом шин.

См. также

Функции

Похожие темы