RTL乒乓运算模块设计

本模块设计来自于实际工作中的问题,简化了不必要的功能。

基于APB与I2C的多主多从架构设计
《 I2C-bus specification and user manual UM10204—4 April 2014》
《DesignWare DW_apb_i2c Databook - Synopsys》


1. Function Description

1.1. Overview

所设计的乒乓运算模块可实现将原始数据包通过乒乓的方式输入至两个相同的运算模块,运算模块可实现平均数求取,再加上修正数据 b b b得到 x ^ \hat{x} x^,最后按照加权平均数据包协议输出。如下公式

x ^ = k 1 x 1 + k 2 x 2 + k 3 x 3 + k 4 x 4 + . . . k n x n + b \hat{x}=k_1x_1+k_2x_2+k_3x_3+k_4x_4+...k_nx_n+b x^=k1x1+k2x2+k3x3+k4x4+...knxn+b

原始数据中不仅包含要求平均的数值,还包括部分直接透传的数据。

修正数据需要根据寄存器的值随时从外部搬移至RAM中。

1.2. Pingpong schedule Operation

整个乒乓运算模块的工作流程如下:

  1. 上电后对各变量复位
  2. 先对各寄存器进行配置
  3. 寄存器配置完毕后,根据工作模式判断是正常工作产生加权平均数据包ADF,还是搬运修订数据
  4. 如果是产生ADF模式,那么就需要通过乒乓的方式将ODF输入两个运算模块,分别计算平均值并打包成ADF输出。计算ADF时,ODF透传变量可在ADF输出之前保持不变,也可通过打拍延迟的方式实现完全流水

ODF解析后,由于透传变量要保持直到ADF打包输出完毕,所以获取一个ODF之后要在ADF产生完毕之前屏蔽其他的ODF输入。当然也可以将透传变量也打拍延迟,这样后续的ODF就不用被屏蔽,但这样消耗资源很多。

  1. 如果是搬运修订数据模式,就需要从外界搬运修订数据至RAM中
  2. 如果是单模块计算ADF,就只用一个模块实现平均。
  3. 搬运修订数据完毕,或者乒乓运算在某个时刻,返回重新读取寄存器的值,以更新模块工作状态。

1.3. Original Data Frame(ODF)

输入的原始数据包是按照如下协议,注意每包ODF待平均变量的个数可能不同

原始数据协议帧格式
Index Bits Name Data Type Unit Description
1[31:0]Frame Head--帧头,应为32'hABCD_1234
2[15:0]Frame Lengthunsigned int-数据包长度,应为(7+2a)
[31:16]Reserved--备用
3[15:0]Frame Counterunsigned int1数据帧计数
[31:16]Reserved--备用
4[31:0]Arrive timeunsigned int150MHZ时钟周期到达时间
5[15:0]alphaunsigned int1透传变量α
[31:16]betaunsigned int1透传变量β
6[15:0]gammaunsigned int1透传变量γ
[31:16]lambdaunsigned int1透传变量λ
7[7:0]Sample_A_Fixed Typeunsigned int1变量A修订数据类型
[15:8]Sample_B_Fixed Typeunsigned int1变量B修订数据类型
[23:16]Sample_C_Fixed Typeunsigned int1变量C修订数据类型
[31:24]Sample_D_Fixed Typeunsigned int1变量D修订数据类型
8~(8+a-1)[15:0]sample_Aunsigned int1待平均变量A,共有a(0<a≤10)个
[31:16]sample_Bunsigned int1待平均变量B,共有a(0<a≤10)个
(8+a)~(8+2a-1)[15:0]sample_Cunsigned int1待平均变量C,共有a(0<a≤10)个
[31:16]sample_Dunsigned int1待平均变量D,共有a(0<a≤10)个
(8+2a)[31:0]Reserved--备用
(9+2a)[31:0]Reserved--备用
(10+2a)[31:0]Check Sumunsigned int-2~(9+2a)按Byte累加校验和

1.4. Average Data Frame(ADF)

对原始数据包中的3、4、5、6、7项直接透传,根据第7项选择变量ABCD的修订数据类型,从RAM中取出修订数据。再根据配置的寄存器对变量ABCD进行加权平均,该过程可通过流水线实现。最后加上修订数据,构成如下平均数据协议帧格式

但要注意由于我们是乒乓实现,而且协议中标注了帧计数,所以ODF的输入顺序要与ADF输出顺序对应起来。

平均数据协议帧格式
Index Bits Name Data Type Unit Description
1[31:0]Frame Head--帧头,应为32'hA5A5_B6B6
2[15:0]Frame Lengthunsigned int-数据包长度,应为16'd9
[31:16]Reserved--备用
3[15:0]Frame Counterunsigned int1数据帧计数
[31:16]Reserved--备用
4[31:0]Arrive timeunsigned int150MHZ时钟周期到达时间
5[15:0]alphaunsigned int1透传变量α
[31:16]betaunsigned int1透传变量β
6[15:0]gammaunsigned int1透传变量γ
[31:16]lambdaunsigned int1透传变量λ
7[7:0]Sample_A_Fixed Typeunsigned int1变量A修订数据类型
[15:8]Sample_B_Fixed Typeunsigned int1变量B修订数据类型
[23:16]Sample_C_Fixed Typeunsigned int1变量C修订数据类型
[31:24]Sample_D_Fixed Typeunsigned int1变量D修订数据类型
8[31:0]sample_A_aveunsigned int1变量A加权平均结果
9[31:0]sample_B_aveunsigned int1变量B加权平均结果
10[31:0]sample_C_aveunsigned int1变量C加权平均结果
11[31:0]sample_D_aveunsigned int1变量D加权平均结果
12[31:0]Reserved--备用
13[31:0]Reserved--备用
14[31:0]Check Sumunsigned int-2~11按Byte累加校验和

1.5. Fixed Data Transfer

变量ABCD作加权平均时的修订数据需要根据在ODF中修订数据类型号,从内部RAM读取相应的修订数据参与加权运算。四个变量对应着四个RAM,每个RAM存储着128个修订数据可供使用。

当寄存器要求模块改变RAM中的修订数据时,就需要模块从外部搬运新的修订数据至这四个RAM中。

1.6. AXI4-Stream 与 APB 5.0

使用AXI4-Stream协议实现ODF和ADF的接受和发送,见高级可拓展接口 4.0 - 流传输(Advanced eXtensible Interface 4 - Stream, AXI4-Stream)

使用APB协议实现寄存器部分的配置,见高级外围总线 5.0(Advanced Peripheral Bus, APB)

2. Feature List

要实现的feature如下

● 实现两个模块乒乓作加权平均和数据补正功能。权重数据位宽16bit由寄存器控制。

● 实现补正数据动态更改功能

● 使用AXI4-Stream实现ODF和ADF的打包和发送,ACLK频率为150MHZ

● 使用APB5.0实现寄存器配置功能,PCLK频率为36MHZ

3. Block Diagram

模块框架图如下所示,ODF_analysis实现ODF的解析,两个multiplier实现加权、平均和补正,修订数据位于寄存器模块pingpong_ave_reg内

在这里插入图片描述

4. Interface Description

整个子系统的接口描述如下

Group Signal Direction Width(bits) Description
Register Configuration prstn input 1 异步低复位
pclkinput1时钟,为36MHZ
paddrinput32APB地址,用于对pingpong_ave_reg内寄存器片选
pselinput1APB选通,用于对pingpong_ave_reg选通
penableinput1
pwriteinput1高写低读
pwdatainput32写入数据
prdataoutput32读出数据
preadyoutput1
pslverroutput1传输是否错误
ODF input aclkinput1AXIS时钟
arstninput1AXIS低电平异步复位
tdata_ODFinput32AXIS数据
tvalid_ODFinput 1tdata有效
tlast_ODFinput 1指示最后一个tdata
tready_ODFoutput 1tvalid握手信号
ADF input tdata_ADFoutput32AXIS数据
tvalid_ADFoutput 1tdata有效
tlast_ADFoutput 1指示最后一个tdata
tready_ODFinput 1tvalid握手信号

之后是需要配置的参数描述

Parameter Units Description
MUL_OUTPUT_STAGES_NUMpingpong_ave_mul模块每次与权重乘完后延迟的拍数

5. Finite State Machine Description

整个状态机如下图,包含了用于寄存器配置的Disable Mode模式、搬移补正数据的Carrying Fixed Data Mode模式、单模块运算的Solo Operation Mode模式和乒乓运算的Pingpong Operation Mode模式。

在这里插入图片描述

对各状态作解释

IDLE: 初始状态,在该状态下可对寄存器进行改写、根据寄存器切换工作模式

FIX_CARRY: 在Carrying Fixed Data Mode模式下,对4个补偿数据RAM写入新的修订数据,写完毕后根据Carrying Fixed Data Done条件返回IDLE

ODF_REC与ADF_GEN: 当进入Solo Operation Mode模式时表示单模块运算,该状态表示等待ODF。当等待ODF超时后,会返回IDLE状态。获取一个ODF后则进入ADF_GEN状态,等待产生ADF,产生ADF后进入IDLE状态,以检查寄存器判断停止运算或是否要切换到其他状态。

CHECK_STOP与PING:ODF_REC PONG:ADF_GEN: 当进入Pingpong Operation Mode模式时表示乒乓模块运算,CHECK_STOP为中转状态。

首先检查PING ADF FIFO是否为空,如果是则说明PONG ADF FIFO中可能存在上一次运算遗留的ADF未读出,所以此时要PING 写ODF、PONG读ADF,进入PING:ODF_REC PONG:ADF_GEN状态。

在PING:ODF_REC PONG:ADF_GEN状态下,如果PING获得了ODF且PONG算出了ADF,那么就返回CHECK_STOP以检查寄存器是否停止。如果PING等待ODF超时或者PONG ADF FIFO本来就空,则也进入CHECK_STOP状态

在这里插入图片描述

CHECK_STOP与PING:ADF_GEN PONG:ODF_REC: 如果PING ADF FIFO非空,则说明PONG ADF FIFO是空的,就可以进入PING:ADF_GEN PONG:ODF_REC状态

在PING:ADF_GEN PONG:ODF_REC状态下,产生了ADF,并且收到了ODF或等待ODF超时,就返回CHECK_STOP状态

在这里插入图片描述

6. Register Description

Offset Address Register Name Field(bits) Access Field Name Default Value Description
0x00PA_ENABLE[0]RWENALBE1'b0Control whether pingpong_ave is enabled
[2:1]RWWORK_MODE2'd02'b00: Stop Operation Mode;2'b01:Carrying Fixed Data Mode;2'b10:Solo Operation Mode
[31:3]Reserved
0x04PA_WEIGHT_K1_K2[15:0]RWWEIGHT_K116‘d0weight value for average calculation
[31:16]RWWEIGHT_K216‘d0weight value for average calculation
0x08PA_WEIGHT_K3_K4[15:0]RWWEIGHT_K316‘d0weight value for average calculation
[31:16]RWWEIGHT_K416‘d0weight value for average calculation
0x0CPA_WEIGHT_K5_K6[15:0]RWWEIGHT_K516‘d0weight value for average calculation
[31:16]RWWEIGHT_K616‘d0weight value for average calculation
0x10PA_WEIGHT_K7_K8[15:0]RWWEIGHT_K716‘d0weight value for average calculation
[31:16]RWWEIGHT_K816‘d0weight value for average calculation
0x14PA_WEIGHT_K9_K10[15:0]RWWEIGHT_K916‘d0weight value for average calculation
[31:16]RWWEIGHT_K1016‘d0weight value for average calculation
0x18PA_ODF_MODE[0]RWODF_BLOCK_MODE2‘d0Indicates the masking mode of the ODF. 2'd0 indicates that an ODF is acquired and then masking begins until a packet of ADF is output. 2'd1 indicates that ODF is never blocked. In this case, staging of the transparent transmission variable is required, which will take more resources.
[8:1]RODF_RECEIVE_NUM8‘d0Number of ODF already received
[16:9]RWODF_TIMEOUT8‘d150Clk periods of waiting for ODF coming
[31:17]reserved
0x1CPA_ADF_MODE[7:0]RADF_GENERATE_NUM8‘d0Number of ADF already made
[31:8]reserved
0x20PA_MUL_STAGES[7:0]RSTAGES_NUM_ONCE_AVE8‘d60Number of periods of clock of calculating average result of one argument of sample A to D
[31:8]reserved
0x24~0x120PA_SAMPLE_A_FIX_RAM
0x124~0x220PA_SAMPLE_B_FIX_RAM
0x224~0x320PA_SAMPLE_C_FIX_RAM
0x324~0x420PA_SAMPLE_C_FIX_RAM

7. Submodule Design

RTL乒乓运算模块设计 - Submodul Design

8. RTL Coding

9. Testbench Coding

10. Verification

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starry丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值