Конструктивные соображения для матриц и векторов

Эти инструкции рекомендовали, как можно использовать матричные и векторные сигналы при моделировании проекта для генерации 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 массив назад в матрицы 2 на 2 для входа к подсистемам. Одна подсистема использует блок Matrix Multiply, и другая подсистема выполняет поэлементное умножение. Выходной результат преобразован назад в векторы.

open_system('hdlcoder_matrix_multiply/DUT')

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

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

ID инструкции

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
]

Смотрите также

Функции

Похожие темы