Можно следовать этим инструкциям, чтобы узнать о сигналах шины, как смоделировать проект при помощи этих сигналов и сгенерировать HDL-код. Каждая инструкция имеет уровень серьезности, который указывает на уровень требований податливости. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию HDL.
1.3.3
Информативный
Когда использовать шины?
Если ваш DUT или другие блоки в вашей модели имеют много сигналов ввода или вывода, можно создать сигналы шины улучшить удобочитаемость модели. Сигнал шины или шина являются составным сигналом, который состоит из других сигналов, которые называются элементами. Сигнал шины может иметь структуру различных типов данных или векторного сигнала с совпадающими типами данных. Если все сигналы имеют совпадающий тип данных, вы обычно используете блок Mux. Составляющие сигналы или элементы шины могут быть:
Смешанные сигналы типа данных такой как дважды, целое число и фиксированная точка
Смешанные скалярные и векторные элементы
Смешанные действительные и комплексные сигналы
Другие шины вкладываются к любому уровню
Многомерные сигналы
Поддержка HDL Coder™ шин
Можно сгенерировать HDL-код для проектов, которые имеют:
Порты подсистемы DUT соединяются с шинами.
Simulink® и блоки Stateflow® поддержаны для генерации HDL-кода.
HDL Coder поддерживает генерацию кода для способных к шине блоков в библиотеке блоков HDL Coder. Способные к шине блоки являются блоками, которые могут принять сигналы шины, как введено и произвести сигналы шины как выходные параметры. Для списка способных к шине блоков, которые поддерживает Simulink, смотрите Способные к шине Блоки.
Смотрите и Поддержку типов данных Сигнала для блоков, которые поддерживают генерацию HDL-кода с шинами.
Создайте сигналы шины
Можно создать сигналы шины при помощи блоков Создателя Шины. Блок 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')
В этой модели блоки Создателя Шины создают два сигнала шины. Один сигнал шины содержит data1_En
и CounterForParam
сигналы. Другой сигнал шины содержит Param
и sin
сигналы. По умолчанию каждый сигнал на шине наследовал имя сигнала, соединенного с шиной. Этот рисунок показывает Элементы в параметрах блоков шины для блока Bus Creator, который берет, вводит data1_En
и CounterForParam
.
Шины вложенного множества
Вы видите другой блок Bus Creator, который комбинирует эти два сигнала шины. Когда одни или несколько входных параметров с блоком Bus Creator являются шиной, выход является вложенной шиной.
Блок Bus Creator генерирует имена для сигналов шины, соответствующие входные параметры которых не имеют имен. Имена находятся в форме signaln
, где n является количеством порта подключения входного сигнала к. Например, если вы открываете диалоговое окно Block Parameters для второго блока Bus Creator, вы видите Элементы в шине как signal1
и Param_sin
.
Присвойте значения сигналов, чтобы соединить шиной
Чтобы изменить значения элемента шины, используйте блок Bus Assignment. Используйте блок Bus Assignment, чтобы изменить значения элемента шины, не добавляя блоки Создателя Селектора и Шины Шины, которые выбирают элементы шины и повторно собирают их в шину.
Например, откройте модель 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 Outputs
Чтобы извлечь сигналы из шины, которая включает вложенные шины, используйте блоки Селектора Шины. По умолчанию блок выводит указанные элементы шины как отдельные сигналы. Можно также вывести сигналы как другую шину. Можно использовать OutputSignals
блокируйте свойство видеть Элементы в шине что блок выходные параметры. При помощи этого свойства можно отследить, какие сигналы вводят блок Селектора Шины глубоко в иерархии модели.
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
. Этот рисунок отображает скалярные сигналы, созданные для каждого сигнала шины в определении модуля.
Упростите интерфейсы шины подсистемы
Можно упростить интерфейсы шины Подсистемы при помощи блоков Элемента Шины. В Элементе Шины и блоки Элемента Шины обеспечивают упрощенный и гибкий способ использовать сигналы шины в качестве вводов и выводов к подсистемам. Блок In Bus Element эквивалентен блоку Inport, объединенному с блоком Селектора Шины. Блок Out Bus Element эквивалентен блоку Outport, объединенному с блоком Bus Creator. Чтобы осуществить рефакторинг существующую модель, которая использует Inport, Селектор Шины, Создателя Шины и блоки Выходного порта, чтобы использовать В Элементе Шины и блоках Элемента Шины, можно использовать Редактор Simulink® строки меню.
Например, откройте модель 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
комбинирует блоки Выходного порта с блоками Создателя Шины, чтобы создать блоки Элемента Шины.
open_system('hdlcoder_bus_nested_simplified/HDL_DUT/Bus_Creator_Subsystem')
Bus_Selection_Subsystem
комбинирует блоки Inport с блоками Селектора Шины, чтобы создать В блоках Элемента Шины.
open_system('hdlcoder_bus_nested_simplified/HDL_DUT/Bus_Selection_Subsystem')
Чтобы узнать больше, смотрите, Упрощают Подсистему и Интерфейсы модели с Шинами.
Виртуальные и невиртуальные шины
Шина сигнализирует в модели hdlcoder_bus_nested
созданный ранее при помощи блоков Селектора Создателя и Шины Шины виртуальные шины. Каждый сигнал элемента шины хранится в памяти, но сигнал шины не хранится. Шина упрощает график, но не оказывает функционального влияния. В сгенерированном HDL-коде вы видите составляющие сигналы, но не сигнал шины.
Чтобы более легко отследить соответствие между сигналом шины в модели и сгенерированным HDL-кодом, используйте невиртуальные шины. Невиртуальные шины генерируют чистый HDL-код, потому что он использует структуру, чтобы содержать сигналы шины. Чтобы преобразовать виртуальную шину в невиртуальную шину, в Параметрах блоков блоков Создателя Шины, вы задаете тип Выходных данных как Bus: object_name
заменяя object_name
с именем шины возражают и затем выбирают Output как невиртуальную шину.
Смотрите преобразуют виртуальную шину в невиртуальную шину.
Массив шин
Массив шин является массивом, элементами которого являются шины. Каждый элемент в массиве шин должен быть невиртуальным и должен иметь совпадающий тип данных.
Чтобы узнать больше о моделировании с массивом шин, смотрите Генерирующийся HDL-код для Подсистем с Массивом Шин.