概述
卷积缓冲器(CBUF)是卷积流水线中的一个阶段,module定义在NV_NVDLA_cbuf.v,module信息如下:
module NV_NVDLA_cbuf (
nvdla_core_clk //|< i
,nvdla_core_rstn //|< i
,cdma2buf_dat_wr_addr //|< i
,cdma2buf_dat_wr_data //|< i
,cdma2buf_dat_wr_en //|< i
,cdma2buf_dat_wr_hsel //|< i
,cdma2buf_wt_wr_addr //|< i
,cdma2buf_wt_wr_data //|< i
,cdma2buf_wt_wr_en //|< i
,cdma2buf_wt_wr_hsel //|< i
,pwrbus_ram_pd //|< i
,sc2buf_dat_rd_addr //|< i
,sc2buf_dat_rd_en //|< i
,sc2buf_wmb_rd_addr //|< i
,sc2buf_wmb_rd_en //|< i
,sc2buf_wt_rd_addr //|< i
,sc2buf_wt_rd_en //|< i
,sc2buf_dat_rd_data //|> o
,sc2buf_dat_rd_valid //|> o
,sc2buf_wmb_rd_data //|> o
,sc2buf_wmb_rd_valid //|> o
,sc2buf_wt_rd_data //|> o
,sc2buf_wt_rd_valid //|> o
);
//
// NV_NVDLA_cbuf_ports.v
//
input nvdla_core_clk; /* cdma2buf_dat_wr, cdma2buf_wt_wr, sc2buf_dat_rd_nvdla_ram_addr_ADDR_WIDTH_12_BE_1, sc2buf_dat_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1, sc2buf_wt_rd_nvdla_ram_addr_ADDR_WIDTH_12_BE_1, sc2buf_wt_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1, sc2buf_wmb_rd_nvdla_ram_addr_ADDR_WIDTH_8_BE_1, sc2buf_wmb_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1 */
input nvdla_core_rstn; /* cdma2buf_dat_wr, cdma2buf_wt_wr, sc2buf_dat_rd_nvdla_ram_addr_ADDR_WIDTH_12_BE_1, sc2buf_dat_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1, sc2buf_wt_rd_nvdla_ram_addr_ADDR_WIDTH_12_BE_1, sc2buf_wt_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1, sc2buf_wmb_rd_nvdla_ram_addr_ADDR_WIDTH_8_BE_1, sc2buf_wmb_rd_nvdla_ram_data_valid_DATA_WIDTH_1024_ECC_SIZE_1 */
input [31:0] pwrbus_ram_pd;
input cdma2buf_dat_wr_en; /* data valid */
input [11:0] cdma2buf_dat_wr_addr;
input [1:0] cdma2buf_dat_wr_hsel;
input [1023:0] cdma2buf_dat_wr_data;
input cdma2buf_wt_wr_en; /* data valid */
input [11:0] cdma2buf_wt_wr_addr;
input cdma2buf_wt_wr_hsel;
input [511:0] cdma2buf_wt_wr_data;
input sc2buf_dat_rd_en; /* data valid */
input [11:0] sc2buf_dat_rd_addr;
output sc2buf_dat_rd_valid; /* data valid */
output [1023:0] sc2buf_dat_rd_data;
input sc2buf_wt_rd_en; /* data valid */
input [11:0] sc2buf_wt_rd_addr;
output sc2buf_wt_rd_valid; /* data valid */
output [1023:0] sc2buf_wt_rd_data;
input sc2buf_wmb_rd_en; /* data valid */
input [7:0] sc2buf_wmb_rd_addr;
output sc2buf_wmb_rd_valid; /* data valid */
output [1023:0] sc2buf_wmb_rd_data;
它包含总共512KB的SRAM。SRAMs缓存来自CDMA模块的输入像素数据、输入特征数据、权重数据和WMB数据,并由卷积序列发生器模块读取。CBUF有两个写端口和三个读端口。
CBUF包含16个32KB的bank,每个bank由两个512位宽、256-entry的双端口SRAMs组成。这些bank充当三个逻辑循环缓冲器:
- 输入数据缓冲器
- 权重缓冲器
- WMB缓冲器
如果权重格式被压缩,则bank15被分配给WMB缓冲器,而另外两个缓冲器可以使用bank0~bank14。如果权重格式是未压缩的,WMB缓冲区不分配任何bank。在这种情况下,数据缓冲器和权重缓冲器可以完全使用所有16个bank。如果所需的bank少于16个,则剩余的bank不会被使用。
每个缓冲区充当循环缓冲区。新输入数据/权重/WMB有增量entry地址。如果地址达到最大值,它会绕回零,然后再次开始增加。
功耗
卷积缓冲器对SRAMs之外的数据路径中的寄存器应用时钟门控。卷积缓冲器数据路径的时钟在空闲时由SLCG选通,并且可编程寄存器中没有可用的硬件层。卷积缓冲器内的配置寄存器模块不受时钟门控,因此可以对新配置进行编程。
end