Факторы по проекту для матриц и векторов

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

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

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

1.3.1

Серьезность

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

Описание

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

Факторы о моделировании

  • Когда вы используете блок Reshape для преобразования векторов в 2D матрицы, убедитесь, что задали правые Выходные размерности.

  • Когда вы используете блок Product, используйте правый режим умножения. При помощи этого режима можно выполнить либо матричное умножение, либо поэлементное умножение. Умноженный выход может иметь различные размерности в зависимости от режима умножения.

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

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

Пример

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

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

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

open_system('hdlcoder_matrix_multiply/DUT')

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

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

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

1.3.2

Серьезность

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

Описание

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

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

СценарийПример задачиРабота

Delay блок с Delay length больше 1.

Этот пример иллюстрирует сгенерированный код для блока Delay с Delay length 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


Вместо использования блока Delay с Delay length 5можно соединить пять блоков Delay, которые имеют Delay length 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 

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

Этот пример иллюстрирует сгенерированный код, когда вы используете блок Constant для генерации вектора 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 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
]

См. также

Функции

Похожие темы