zipline 压缩 lz77 rtl 算法实现
zipline lz77 conpressor 的rtl/spec 的整体架构如下:

lz77 算法中我们想得到 压缩后的literal/offset/length等信息,
从整体架构中主要是分为三个过程, 1:find matches(并行4B比较 + Bitmap/Thermometer) -> 2.select winner (分层筛选 :Tile -> Cluser -> ME) -> 3.output (压缩结果)
阶段一
1:find matches(并行4B比较 + Bitmap/Thermometer)
- 当前的4B与历史中的位置(offset)并行比较(128个tiles);
- 生成bm_per_offset_raw -> bm_per_offset ;
- 生成 连续匹配的 thermometer;
- 通过LPO跨周期积累,得到每个offset的向前匹配(fwd_therm);
阶段二
2.select winner (分层筛选 :Tile -> Cluser -> ME)
- Tile 内: Search Tree + LPO选出Tile Candidata ;
- CLuster : 16个Tile 的候选汇总,选出Cluster Candidate ;
- MAtch Engine : CIF -> MDL -> MSM, 最终决定决胜者;
阶段三
3.output (压缩结果)
- 输出literal 或 pointer (type , length ,offset );
- 产生DMW / 非接控制信号 ;
- 发送给后级编码器;
关键参数(当前RTL)
- IN_BYTES = 4 ;
- OFFSET_PRE_TILE =512 ;
- TILE_PRE_CLUSTER =16 ;
- CLUSTERS = 8 ;
- Full history capacity = 64KB ;
首先引入一个概念: overlap : 解决的是一个match 能不能超过offset,源区域和输出区域能不能重叠;
Continuation 解决的是“这个 match 在硬件处理过程中还没结束,能不能继续往后延长”。
举例子: overlap 关注的是source 和 output 的空间关系。source值得是输入,待处理的数据,output是 输出数据,这里应该 是liter /<offset , length>
现在 offset = 2 ;
length = 8 ;
历史buffer 中: a b ;
因为 length 8 > offset 2 所以会复制 a b -> a b a b a b a b ;
即后面生成出来的 a b 又被继续当成 source。这就是 overlap。cOverlap
source区域和output区域重叠
整体的lz77算法 的 rtl 的微架构如下:

首先是
实际上,从 Spec + RTL 看,Zipline 更准确的理解应该是:
4B 输入 → 128 个 Tile 并行搜索 → Tile 内大量 LPO/虚拟 LPO 并行产生匹配 → Tile/Cluster 分层筛选 → Match Engine 做最终决策 → 决策结果通过反馈回到 LPO/Tile,形成 3-cycle feedback loop。
浙公网安备 33010602011771号