部分信号的时序图:
模块代码:
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2021/02/04 10:29:57
// Design Name:
// Module Name: systolic
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module systolic( //NxN脉动阵列,可用于计算NxK矩阵A和KxN矩阵B相乘的结果
input logic clk,
input logic rst,
input logic [15:0] k,
input logic [15:0] data_a [0:N-1],
output logic [15:0] addr_a [0:N-1],
input logic [15:0] data_b [0:N-1],
output logic [15:0] addr_b [0:N-1],
input logic start,
output logic done,
output logic [31:0] Out[0:N-1][0:N-1]
);
parameter N = 4;
integer i;
logic busy;
logic busy_ff1;
logic busy_for_shift;
logic busy_for_calc;
logic busy_for_calc_ff;
logic [9:0]count;
logic [9:0]count_ff1;
logic [9:0]count_for_calc;
logic [9:0]count_for_shift;
typedef struct { //结构体定义,不分配存储器
logic [15:0]a;
logic [15:0]b;
logic [31:0]psum;
} PE;
PE pe_array[0:N-1][0:N-1]; // 结构体实例化时分配存储区
//addr_a
always@(*)
begin
for(int i=0;i=i&&count
关注
打赏