exponenta event banner

Рекомендации по проектированию матриц и векторов

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

Требования к моделированию матриц

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

1.3.1

Серьезность

Обязательный

Описание

HDL Coder™ не поддерживает типы матричных данных в интерфейсах DUT. Прежде чем сигналы матрицы 2-D поступят в подсистему DUT, преобразуйте сигналы в векторы 1-D с помощью блока изменения формы. Внутри подсистемы DUT можно преобразовать векторы обратно в матрицы с помощью блоков изменения формы, а затем выполнить матричные вычисления. После выполнения вычислений необходимо преобразовать матрицы обратно в векторные сигналы на выходном интерфейсе DUT. Вне интерфейса DUT векторные сигналы можно преобразовать обратно в матрицы.

Соображения по моделированию

  • При использовании блока «Изменение формы» для преобразования векторов в 2D матрицы убедитесь, что заданы правые размеры вывода.

  • При использовании блока «Продукт» используйте правильный режим умножения. С помощью этого режима можно выполнять умножение матрицы или умножение по элементам. Умноженный выходной сигнал может иметь различные размеры в зависимости от режима умножения.

  • При использовании блока «Произведение» для выполнения умножения матрицы поместите блок «Умножение матрицы» в блок «Подсистема». При создании кода и открытии созданной модели можно увидеть, что кодер HDL расширяет умножение матрицы на несколько блоков Product и Add. Размещение блока Matrix Multiply внутри подсистемы облегчает понимание созданной модели. Кроме того, убедитесь, что вы не предоставляете более двух входов в блок умножения матриц.

  • При извлечении матричных данных используйте блоки выбора и назначения. Убедитесь, что для входных портов индексов блоков не используются типы данных с фиксированной точкой.

Пример

В этом примере показано, как использовать типы матриц в Coder™ HDL. Открыть эту модель hdlcoder_matrix_multiply. Модель содержит блок изменения формы, который преобразует входные данные матрицы в вектор 1-D в интерфейсе подсистемы DUT.

open_system('hdlcoder_matrix_multiply')
set_param('hdlcoder_matrix_multiply', 'SimulationCommand', 'update')
sim('hdlcoder_matrix_multiply')

При открытии подсистемы DUT отображаются две подсистемы. Блоки изменения формы преобразуют массив 1-D обратно в матрицы 2 на 2 для ввода в подсистемы. Одна подсистема использует блок умножения матриц, а другая подсистема выполняет умножение по элементам. Выходной результат преобразуется обратно в векторы.

open_system('hdlcoder_matrix_multiply/DUT')

При создании кода HDL для подсистемы DUT и открытии созданной модели можно увидеть, как выполняется операция умножения.

Избегайте формирования возрастающего битового порядка в коде HDL из векторных сигналов

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

1.3.2

Серьезность

Очень рекомендуем

Описание

В MATLAB ® порядок битов по умолчанию для массивов увеличивается. Сгенерированный код VHDL в таких случаях использует объявление std_logic_vector (0 to n). Это объявление сигнала генерирует предупреждения, нарушая определенные стандартные правила кодирования HDL. Вот несколько сценариев:

Сценарии возрастания битового порядка

СценарийПример проблемыРабота

Блок задержки с длиной задержки больше 1.

Этот пример иллюстрирует сгенерированный код для блока задержки с длиной задержки, равной 5.

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


Вместо использования блока задержки с длиной задержки 5, можно подключить пять блоков задержки, которые имеют длину задержки 1 в сериях.

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 для объединения 4 входные сигналы.

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]

Для объединения входных сигналов используется блок Bit Concat. Этот пример иллюстрирует сгенерированный код для этого блока путем конкатенации 4 входные сигналы.

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 

Использование блока константы для генерации векторных сигналов.

Этот пример иллюстрирует созданный код при использовании блока константы для создания вектора 4 скалярные логические сигналы.

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, за которым следует блок Bit Concat после блока Constant. Этот пример иллюстрирует созданный код при применении этого метода моделирования к вектору 4 Постоянный блок.

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
]

См. также

Функции

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