exponenta event banner

Генерация кода 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)

После расчета внутреннего произведения рядов А со столбцами В

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

Введение

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

Интерфейс умножения матриц:

Описание порта умножения матриц:

Реализация MatrixMultiply

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

open_system('hdlcoder_streaming_matrix_multiply_max_latency');

Диаграммы времени умножения матриц

Временная диаграмма

Временная диаграмма

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

Параметры блока умножения матрицы:

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.

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

  3. Создайте код HDL для подсистемы MatrixMultiply.

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

После создания кода для подсистемы MatrixMultiply генерируется код

Созданная модель содержит системный блок MatrixMultiply MATLAB. При моделировании моделируемого кода выходные сигналы формирования сравниваются с выходными сигналами блока системы MATLAB.

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

Ограничения

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

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

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

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

mtimes