В этом примере показано, как 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:
Эта модель примера содержит три подсистемы: InputSubsystem
, MatrixMultiply
и OutputSubsystem
. The InputSubsystem
является вышестоящим модулем, который сериализует матричные входы (A, B) в модуль обработки при aReady
и bReady
сигналы включены. The OutputSubsystem
- дочерний модуль, который десериализует данные из модуля обработки в матричный вывод (C), когда cReady
включен сигнал. The 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.
Установите параметры блоков MATLAB System.
Выберите входные размеры матрицы на основе значений, установленных в параметрах блоков.
Сгенерируйте HDL-код для подсистемы MatrixMultiply.
После генерации кода для подсистемы MatrixMultiply сгенерированный код будет
Сгенерированная модель содержит блок MATLAB System MatrixMultiply. Во время моделирования симуляции генерации кода сравниваются с выходами блоков MATLAB System.
Размеры матричных точечных продуктов могут быть 1
или степень 2
. Допустимые размеры 1,
2
, 4
, 8
, 16
, 32
и 64
.
Входные данные матриц должны быть single
и блок должен использоваться в Native Floating Point
режим.
Входные матрицы не должны быть больше 64 на 64 в размере.