Эти инструкции рекомендовали, как можно использовать матричные и векторные сигналы при моделировании проекта для генерации HDL-кода. Каждая инструкция имеет уровень серьезности, который указывает на уровень требований соответствия. Чтобы узнать больше, смотрите Уровни серьезности Руководств по моделированию HDL.
ID инструкции
1.3.1
Серьезность
Обязательный
Описание
HDL Coder™ не делает типов данных таблицы поддержки в интерфейсах DUT. Прежде чем 2D матричные сигналы вводят Подсистему DUT, преобразовывают сигналы в 1D векторы при помощи блока Reshape. В Подсистеме DUT можно преобразовать векторы назад в матрицы при помощи, Изменяют блоки и затем выполняют матричные вычисления. После выполнения вычислений необходимо преобразовать матрицы назад в векторные сигналы в DUT интерфейс вывода. Вне интерфейса DUT можно преобразовать векторные сигналы назад в матрицы.
Моделирование факторов
Когда вы используете блок Reshape, чтобы преобразовать векторы в 2D матрицы, убедитесь, что вы задаете правильные Выходные размерности.
Когда вы будете использовать блок продукта, используйте правильный режим Multiplication. При помощи этого режима можно выполнить или умножение матриц или поэлементное умножение. Умноженный вывод может иметь различные размерности в зависимости от режима Multiplication.
Когда вы используете блок продукта, чтобы выполнить умножение матриц, поместить блок Matrix Multiply в блоке Subsystem. Когда вы генерируете код и открываете сгенерированную модель, вы видите, что HDL Coder расширяет умножение матриц до нескольких продукт, и Добавьте блоки. Размещение блока Matrix Multiply в Подсистеме делает сгенерированную модель легче понять. Кроме того, убедитесь, что вы не предоставляете больше чем два входных параметров блоку Matrix Multiply.
Когда вы извлечете матричные данные, используйте блоки Селектора и Присвоения. Убедитесь, что вы не используете типы данных с фиксированной точкой для индекса неподходящие порты для блоков.
Пример
Этот пример показывает, как использовать матричные типы в HDL Coder™. Откройте эту модель hdlcoder_matrix_multiply
. Пример использует блок Reshape, чтобы преобразовать матричный вход в 1D вектор в интерфейсе DUT Subsystem.
open_system('hdlcoder_matrix_multiply') set_param('hdlcoder_matrix_multiply', 'SimulationCommand', 'update') sim('hdlcoder_matrix_multiply')
Если вы открываете Подсистему DUT, вы видите две подсистемы. Изменять блоки преобразовывают 1D массив назад в 2x2 матрицы для входа к подсистемам. Одна Подсистема использует блок Matrix Multiply, и другая Подсистема выполняет поэлементное умножение. Выходной результат преобразован назад в векторы.
open_system('hdlcoder_matrix_multiply/DUT')
Если вы генерируете HDL-код для Подсистемы DUT и открываете сгенерированную модель, вы видите, как операция умножения выполняется.
1.3.2
Строго рекомендуемый
В MATLAB® возрастает порядок битов по умолчанию для массивов. Сгенерированный код VHDL в таких случаях использует объявление std_logic_vector (0 to n)
. Это объявление сигнала генерирует предупреждения путем нарушения определенного HDL, кодирующего стандартные правила. Это некоторые сценарии:
Возрастающие битные сценарии порядка
Сценарий | Проблемный пример | Работа вокруг |
---|---|---|
Задержите блок с Delay length, больше, чем | Этот пример иллюстрирует сгенерированный код для блока Delay с Delay length ENTITY Subsystem1 IS PORT( clk : IN std_logic; reset : IN std_logic; enb : IN std_logic; In1 : IN std_logic; -- ufix1 Out1 : OUT std_logic -- ufix1 ); END Subsystem1; ARCHITECTURE rtl OF Subsystem1 IS -- Signals SIGNAL Delay_reg : std_logic_vector(0 TO 4); -- ufix1 [5] SIGNAL Delay_out1 : std_logic; -- ufix1 | Вместо того, чтобы использовать блок Delay с Delay length ENTITY Subsystem1 IS PORT( clk : IN std_logic; reset : IN std_logic; enb : IN std_logic; In1 : IN std_logic; -- ufix1 Out1 : OUT std_logic -- ufix1 ); END Subsystem1; ARCHITECTURE rtl OF Subsystem1 IS -- Signals SIGNAL Delay_out1 : std_logic; -- ufix1 SIGNAL Delay1_out1 : std_logic; -- ufix1 SIGNAL Delay2_out1 : std_logic; -- ufix1 SIGNAL Delay3_out1 : std_logic; -- ufix1 SIGNAL Delay4_out1 : std_logic; -- ufix1 |
Объединение нескольких входных сигналов к векторному сигналу с помощью блока Mux. | Этот пример иллюстрирует сгенерированный код, когда вы используете блок Mux, чтобы объединить входные сигналы ENTITY Subsystem IS PORT( In1 : IN std_logic; -- ufix1 Out1 : OUT std_logic_vector(0 TO 3) -- ufix1 [4] ); END Subsystem; ARCHITECTURE rtl OF Subsystem IS -- Signals SIGNAL Mux_out1 : std_logic_vector(0 TO 3); -- ufix1 [4] | Используйте немного блока Concat, чтобы объединить входные сигналы. Этот пример иллюстрирует сгенерированный код для этого блока путем конкатенации входных сигналов ENTITY Subsystem IS PORT( In1 : IN std_logic; -- ufix1 Out1 : OUT std_logic_vector(3 DOWNTO 0) -- ufix4 ); END Subsystem; ARCHITECTURE rtl OF Subsystem IS -- Signals SIGNAL Bit_Concat_out1 : unsigned(3 DOWNTO 0); -- ufix4 |
Используя блок Constant, чтобы сгенерировать векторные сигналы. | Этот пример иллюстрирует сгенерированный код, когда вы используете блок Constant, чтобы сгенерировать вектор скалярных сигналов булевской переменной ENTITY Subsystem2 IS PORT( Out1 : OUT std_logic_vector(0 TO 3) -- boolean [4] ); END Subsystem; ARCHITECTURE rtl OF Subsystem2 IS -- Signals SIGNAL Constant_out1 : std_logic_vector(0 TO 3); -- boolean [4] | Используйте блок Demux, сопровождаемый небольшим блоком Concat после блока Constant. Этот пример иллюстрирует сгенерированный код, когда вы применяете эту технику моделирования к вектору
блока ENTITY Subsystem2 IS PORT( Out1 : OUT std_logic_vector(3 DOWNTO 0) -- ufix4 ); END Subsystem2; ARCHITECTURE rtl OF Subsystem2 IS -- Signals SIGNAL Constant_out1 : std_logic_vector(0 TO 3); -- boolean [4] SIGNAL Constant_out1_0 : std_logic; SIGNAL Constant_out1_1 : std_logic; SIGNAL Constant_out1_2 : std_logic; SIGNAL Constant_out1_3 : std_logic; SIGNAL Bit_Concat_out1 : unsigned(3 DOWNTO 0); -- ufix4 ] |