Генерация HDL-кода для потокового умножения матриц Системного объекта

В этом примере показано, как HDL- Coder™ реализует потоковый режим матричного умножения с конфигурируемыми размерами.

Как умножить матрицы

Пусть A, B - две матрицы, тогда C = A * B - матричное умножение A и B. Если A - m-на-p, а B - p-на-n матрица, то C - m-на-n матрица, заданная как

C(i,j) =  A(i,1)B(1,j) + A(i,2)B(2,j) + -------- + A(i,p)B(p,j)

Это внутреннее определение говорит, что C (i, j) является скалярным произведением i-й строки A с j-м столбцом B

Для не скаляра A и B количество столбцов A должно равняться количеству строк B

Пример:

     A = [1 3 5;2 4 7];              (2 X 3 matrix)
     B = [-5 8 11;3 9 21;4 0 8];     (3 X 3 matrix)

После вычисления скалярного произведения строк A со столбцами B

     C = [24 35 114;30 52 162];      (2 X 3 matrix)

Введение

Streaming Matrix Multiply поддерживает умножение двух матриц с конфигурируемыми размерами матрицы и размером продукта. Размер продукта точки равен количеству умножителей, используемых для расчетов. Этот блок может принимать сериализованные входные данные из матрицы в основном формате строки или столбца.

Матричный интерфейс умножения:

Матрица портов Multiply:

Реализация MatrixMultiply

Эта модель примера содержит три подсистемы: InputSubsystem, MatrixMultiply и OutputSubsystem. The InputSubsystem является вышестоящим модулем, который сериализует матричные входы (A, B) в модуль обработки при aReady и bReady сигналы включены. The OutputSubsystem - дочерний модуль, который десериализует данные из модуля обработки в матричный вывод (C), когда cReady включен сигнал. The MatrixMultiply является модулем обработки, который реализует матричное умножение.

open_system('hdlcoder_streaming_matrix_multiply_max_latency');

Матричные множительные временные диаграммы

Временная схема

Временная схема

Результаты Modelsim для потокового умножения матрицы

Параметры матрицы Multiply Block:

Matrix-A Row Size         : Enter row size of input matrix A as a positive integer.
Matrix-A Column Size      : Enter column size of input matrix B as a positive integer
                            which is equals to input matrix B row size.
Matrix-B Column Size      : Enter column size of input matrix B as a positive integer.
Dot product size          : Select dot product size from drop
                            down menu(1,2,4,8,16,32,64) which should be
                            less than input matrix A column size.
LatencyStrategy          :  Select latency strategy from drop
                            down menu ({'ZERO, 'MIN', 'MAX'}) which
                            should be same as HDL coder latency strategy.
                            Processing latency depends on the latency strategy.
Major Order               : Select row major or column major
                            based on the input data streaming.

Матрица блоков

  1. Установите параметры блоков MATLAB System.

  2. Выберите входные размеры матрицы на основе значений, установленных в параметрах блоков.

  3. Сгенерируйте HDL-код для подсистемы MatrixMultiply.

Сгенерированный код и Сгенерированная модель

После генерации кода для подсистемы MatrixMultiply сгенерированный код будет

Сгенерированная модель содержит блок MATLAB System MatrixMultiply. Во время моделирования симуляции генерации кода сравниваются с выходами блоков MATLAB System.

Статистика синтеза

Ограничения

  • Размеры матричных точечных продуктов могут быть 1 или степень 2. Допустимые размеры 1, 2, 4, 8, 16, 32 и 64.

  • Входные данные матриц должны быть single и блок должен использоваться в Native Floating Point режим.

  • Входные матрицы не должны быть больше 64 на 64 в размере.

Связанные ссылки

mtimes