tag 标签: 脉动矩阵

相关博文
  • 热度 14
    2013-12-7 16:50
    1260 次阅读|
    0 个评论
    一:定义 脉动阵列:数据流同步流过相邻的二维阵列单元的处理器结构,一般不同方向流过不同数据。如下图: 二维不同数据在同一时钟下依次输入每个处理单元,而后完成乘法并存在其寄存器中。 二:举例 三:设计 结构: 单个 PE 的代码 module pe(clk, reset, coeff, in_x, in_y, out_x, out_y); parameter size = 8; input                clk, reset; input                in_x, coeff; input        in_y; output              out_x; output      out_y; reg           out_y; reg                    out_x; always@(posedge clk)   begin    if(reset) begin      out_x = 0;      out_y = 0;      end    else begin      out_y = in_y + (in_x * coeff);      out_x = in_x;      end   end endmodule   四个 PE ,其余类推 //***** main **************************** module systolic(clk, reset, input_x, output_y); parameter    size = 8; input    clk, reset; input              input_x; output   output_y; wire                pe0_x, pe1_x, pe2_x, pe3_x;         wire       pe1_y, pe2_y, pe3_y; wire           h0 = 8'h01; wire           h1 = 8'h01; wire           h2 = 8'h01; wire           h3 = 8'h01; wire      pe4_y = 16'h0000;    pe pe_0(clk, reset, h0, input_x, pe1_y, pe0_x, output_y); pe pe_1(clk, reset, h1, pe0_x, pe2_y, pe1_x, pe1_y); pe pe_2(clk, reset, h2, pe1_x, pe3_y, pe2_x, pe2_y); pe pe_3(clk, reset, h3, pe2_x, pe4_y, pe3_x, pe3_y); endmodule
  • 热度 26
    2013-10-18 09:55
    7119 次阅读|
    0 个评论
    脉动阵列( Systolic Array )计算有限冲激响应( FIR ) 综合软件 :QuartusII 12.1 仿真软件 :Modelsim-Altera FIR :有限脉冲响应滤波器。有限说明其脉冲响应是有限的。   FIR 计算公式:   硬件实现结构:     4 阶 FIR 计算公式:         最小计算单元( PE ):乘加单元 + : adder   加法器 Î : multiplier 乘法器     R : register   寄存器 h i   : coefficient 系数       利用脉动阵列结构级联 PE ,来完成 4 阶 FIR 的计算:   注意: pe4_y=0; 数据流图:     注意: 1、   CLK 每隔一个时钟,输入一个 X 的值; 2、   T1 时刻以前,已经有过 2 个 CLK 令 x1 传递到 PE2 中; 3、   从 X1 进入后 CLK 的上升沿的输出的是 X1 点的 FIR 值,因为之前的计算中已经保留了后三项的乘积和; 4、   控制好输入 X 和时钟的流水,可以让整个硬件一直处于有效的流水输出状态。 5、   流水状态下,输入是隔一个时钟更新数据的,那么输出也是隔一个 CLK 有个一正确的输出。     计算单元中的两个寄存器值如下:(具体值,可以参照纸质笔记) 时序仿真图如下: 令四个系数都为 1 ,那么等价于,输出 Y 是当前输入 X 和之前的三个输入 X-1 , X-2 , X-3 之和。流水形成后,每个 X 输入下一个 CLK 上升沿总有对应的 Y 输出。 同时必须,每两个 CLK 输入一个新的 X 值。 也就是说,计算频率必须为输入频率的两倍。
  • 热度 36
    2013-10-18 09:55
    20226 次阅读|
    2 个评论
    脉动阵列( Systolic Array )计算矩阵乘法( Array Multiplication ) 下一个目标是实现流水线输出,提升硬件资源的利用率。 脉动阵列 (Systolic Array) :数据流同步流过相邻的二维阵列单元的处理器结构,一般不同方向流过不同数据。 结构: 矩阵计算: C 语言描述每个输出矩阵中的值: For I = 1 to N      For J = 1 to N           For K = 1 to N                C = C + A * B ; 运用 N x N processing units ,输入数据呈批次输入: 二维不同数据在同一时钟下依次输入每个处理单元,而后完成乘法并存在其寄存器中。     其中每个 PE (处理单元)结构如下: 是一个乘加单元   c=c+(a*b)   例子:计算两个3×3矩阵的乘积 结构:     在 CLK 驱动下的每一个步骤如下 : Clk1:   Clk2: Clk3: Clk4:          Clk5:     Clk6: Clk7: Clk8: 输出 功能仿真图: 在 start 上升沿到来后的第一个 CLK 上升沿开始计数 Count_start 高电平期间 Cout =1 时,准备 a11 和 b11; Cout =2 时,将数据打入寄存器,并计数出 a11*b11; Cout =3 时,计数 a11*b11+a12*b21 Cout =4 时,计数 a11*b11+a12*b21+a13*b31 Cout =5 时,用寄存器打一拍输出 Y11 。 其他类似。 时序仿真图: 连续运算,中间忘了将乘加单元寄存器清零的情况,功能仿真: 每次计算出结果后清零寄存器,修改后的功能仿真图: 数据在送入运算单元之前,采用寄存器打一拍,功能仿真图:       状态机便于实现控制。 状态机控制:功能仿真 时序仿真图: