Compare commits

...

9 Commits

Author SHA1 Message Date
7228bebb78 feat(enc): Encaps E7 - c2 = byteEncode_dv(Compress_dv(v)) + end-to-end KAT
Reuses the E5 bit-packer FSM for ST_ENC_C2, generalized over region:
- coeff source: cp_coeff_src = bank_t[UPSUM] (v) for C2, bank_se (u) for C1
- bit width: cp_d already = dv_rt for C2 else du_rt
- poly count: cp_poly_max = 1 (single v) for C2, K for C1
- ct write pointer cp_wa CONTINUES from c1_bytes into C2 (not reset), so c2
  lands right after c1. c1 ends on a whole-byte/poly boundary (256*du/8
  integral), so cp_buf/nbits are empty at the C1->C2 handoff.

FSM tail: ST_ENC_V -> ST_ENC_C2 -> ST_DONE.

TB: verify_e7 compares the full ct (c1||c2, CTB bytes) to KAT.ct byte-exact
via the dbg_ct tap. Combined with the E0 ss==KAT.ss check this is the full
end-to-end Encaps KAT (ct==KAT.ct && ss==KAT.ss).

Verified end-to-end for K=2/3/4, cases 0-2 (K2) / 0-1 (K3,K4):
ct==KAT.ct && ss==KAT.ss. ML-KEM Encaps complete. KeyGen unregressed.
2026-06-29 11:18:58 +08:00
e114bec5ee feat(enc): Encaps E6 - v = INTT(sum t_hat o y_hat) + e2 + mu
Storage choreography (per plan risk notes):
- TDEC now decodes t_hat[j] into bank_a slot j*K (was bank_t). This makes
  V's MAC reuse E4's u_aslot=u_j*K+u_row addressing with u_row=0, no mux
  change. bank_t has no room for K=4 (t_hat would fill all 4 slots vs
  psum's UPSUM slot), hence bank_a (16 slots, A_hat dead after E4).
- New ST_ENC_E2MV state relocates e2 (bank_t[0]) -> bank_a[1] so V-ADD
  reads psum (bank_t) and e2 (bank_a) from different banks (no port
  conflict). bank_se (y_hat + u) stays intact -> verify_e2/e3/e4 unaffected.
- V reuses the u_* MAC/INTT/ADD machine with u_row tied to 0 (u_row_max=1).
  ADD computes psum + e2 + mu mod Q -> bank_t[UPSUM] in place;
  mu[w] = m_r[w] ? 1665 : 0 (Decompress_1). FSM: C1->TDEC->E2MV->V->DONE.

Bug found+fixed during bring-up: e2 relocation was off-by-one (wrote
e2[i+1] into slot i) because em_we/em_widx were registered an extra cycle
past the bram read. Fixed: em_widx==em_ridx, write scheduled for the cycle
bt_rd_data presents e2[em_ridx].

TB: verify_e6 compares v (bank_t dbg slot 9, K=2) to ml-kem-r golden.
verify_e1 dropped (TDEC overwrites bank_a A_hat slots; A_hat transitively
verified by E4). Verified: K=2 E2/E3/E4/E6 == golden, E5 c1 == KAT prefix;
K=3/4 E0+E5 pass; KeyGen K=2 unregressed.
2026-06-29 11:03:33 +08:00
4fee8bded3 fix(enc): compile comp_decomp_sync + pipeline_reg in KeyGen tcl
mlkem_top now instantiates comp_decomp_sync (E5), so the shared
xsim_run.tcl must compile it (+ its pipeline_reg dep) before mlkem_top.
This unbreaks 'run_tb.sh top' which failed elaboration with
'Module comp_decomp_sync not found'. run_enc.sh simplified to reuse the
tcl's now-complete compile list (drops its duplicate leaf block).
2026-06-29 03:06:11 +08:00
3bc46f9640 feat(enc): Encaps E5 - c1 = byteEncode_du(Compress_du(u))
ST_ENC_C1: per-coeff Compress_du via comp_decomp_sync (mode 0) then
LSB-first byte packing into ct_bram. 5-phase micro-seq reads u[cp_poly]
from bank_se (rel K+poly), feeds the compressor (1-cyc pipe), appends du
bits to cp_buf, and drains whole bytes. Each poly = 256*du bits (whole
bytes) so the bit buffer empties at every poly boundary.

ST_ENC_U now advances to ST_ENC_C1 (was ST_DONE).

TB: verify_e5 compares ct_bram[0..c1_bytes-1] to the KAT.ct prefix via
the dbg_ct tap. run_enc.sh: encaps TB runner (compiles comp_decomp_sync
which the KeyGen tcl omits).

Verified K=2/3/4 c1 == KAT.ct prefix (640/960/1408 B; K=4 du=11
cross-byte path), K=2 cases 0-2.
2026-06-29 02:59:12 +08:00
ee875d2ff7 feat(enc): Encaps E4 - u = INTT(sum A^T o y_hat) + e1
ST_ENC_U computes u[i] per row in 3 sub-phases reusing shared u_pmul + u_ntt:
  sub0 MAC : sum_j A_hat[j][i] o y_hat[j] (TRANSPOSE: slot=j*K+i) -> NTT-domain
             psum in bank_t rel slot UPSUM=1 (e2 in slot 0), init 0 at j==0
  sub1 INTT: INTT(psum) mode=1 (built-in x3303) in place in bank_t[UPSUM]
  sub2 ADD : u[i][w] = psum[w] + e1[i][w] mod Q -> bank_se rel (K+i), over e1
y_hat (bank_se 0..K-1) preserved for V. ntt_core mode + input muxed for the
INTT sub-phase; bank_a/se/t read+write ports extended for all 3 sub-phases.

Fixed a duplicate 'assign bse_we' (stale + new both present -> ADD writes
X-dropped); collapsed to one. Verified (K=2 c0) u[0..1] == ml-kem-r golden
(transpose + INTT + e1 all correct); E0/E1/E3 pass, E2 trimmed to e2 (e1
consumed into u, transitively checked by E4); K=3/4 no timeout.
2026-06-29 02:26:01 +08:00
8ed4d59546 feat(enc): Encaps E3 - y_hat = NTT(y) in place
ST_ENC_N reuses the ST_N forward-NTT datapath (mode=0, read-ahead load,
in-place writeback to bank_se). Slot count parameterized: KeyGen 2K (s,e),
Encaps K (y only; e1/e2 stay time-domain) via n_slot_max. bse rd/wr muxes
and the C->N arming extended for ST_ENC_N.

Verified (K=2 c0) y_hat[0..1] == ml-kem-r golden; E0/E1/E2 still pass
(E2 y check dropped since NTT overwrites y in place -> covered by E3);
K=3/4 run through E3 without timeout.
2026-06-29 02:01:37 +08:00
cdc5ce25b1 feat(enc): Encaps E2 - sample y/e1/e2 (CBD eta1/eta2, r seed)
ST_ENC_C reuses the ST_C CBD datapath with Encaps muxes: seed=r (not sigma),
eta=eta1 for y[0..K-1] then eta2 for e1[0..K-1]/e2, nonce 0..2K. 2K+1 polys
(vs KeyGen 2K). y/e1 -> bank_se rel slots 0..2K-1; e2 -> bank_t rel slot 0
(free during C/N/U since TDEC is deferred to V-prep so the 28-slot banks hold
all of A+y_hat+e1+e2 at K=4 without resizing).

Bring-up golden via ml-kem-r dump_encaps_full (working-tree example):
vectors/encgold/ec_k2_c0_{y,e1,e2}.hex. Verified (K=2 c0) y[0..1],e1[0..1],e2
== ml-kem-r; A_hat (E1) and ss (E0) still pass; K=3/4 no timeout.
2026-06-29 01:55:47 +08:00
31c967c8a4 feat(enc): Encaps E1 - rho load + A regen + byteDecode12 t_hat
ST_ENC_LOAD: stream rho (32B) from ek_bram[384k..] into rho_r (read-ahead,
1-cyc bram latency). ST_ENC_A: regenerate A_hat via SampleNTT into bank_a
(reuses ST_A datapath, gated on st==ST_A||ST_ENC_A). ST_ENC_TDEC:
byteDecode12 ek[i*384..] -> t_hat[i] into bank_t (5-cycle micro-phase per
3-byte/2-coeff triple; bt write port muxed with ST_M).

Verified (K=2 c0) A_hat (1024 coeffs) + t_hat (512) == KeyGen golden via
dbg_coeff_o; E0 ss==KAT.ss still passes all K/cases (no timeout).
2026-06-29 01:44:50 +08:00
0a8b3dae69 feat(enc): Encaps E0 - op_i/msg_i/ek-load scaffold + H(ek)+G(m||H(ek))
Extend mlkem_top with a runtime op_i select (0=KeyGen, 1=Encaps) and the
first Encaps stages, reusing the shared keccak_core and the ST_H multi-block
SHA3-256 machinery:
  ST_ENC_H: H(ek) over preloaded ek_bram (same FSM as KeyGen ST_H)
  ST_ENC_G: (K,r) = G(m||H(ek)) via new 64-byte single-block SHA3-512

- sha3_top_shared: add mode=2'b11 = SHA3-512 over a full 512-bit message
  (g512_pad). Standalone tb_sha3_g512 confirms it byte-exact.
- mlkem_top: new ports op_i, msg_i, ek_in_{we,addr,byte} (ek preload), ss_o,
  dbg_ct_*, dbg_r_o/dbg_hek_o. st widened 4->5 bits; ST_ENC_* states added.
  Renamed message port to msg_i to avoid collision with ST_M counter m_i.
- TB tb_mlkem_enc_katK + gen_encaps_vectors.py (per-byte ek/m/ct/ss vectors).

Verified ss==KAT.ss for K=2/3/4, cases 0-2 (all PASS). KeyGen unaffected
(K=2 c0 still ek==pk, dk==sk byte-exact).
2026-06-29 01:00:47 +08:00
55 changed files with 25378 additions and 73 deletions

View File

@@ -0,0 +1,90 @@
# ML-KEM Encaps 顶层集成 — 实现计划
> 在现有 `mlkem_top`(KeyGen 已 KAT 通过)基础上扩展 Encaps(FIPS 203 Alg 17 + K-PKE.Encrypt Alg 14)。
> 决策(已与用户确认):**(1) 统一进 mlkem_top(加 op_i 选择 + ST_ENC_* 状态,复用同一套叶子 + BRAM 银行);(2) 一上来就做全 K(2/3/4);(3) golden 只做端到端 KAT(ct==KAT.ct, ss==KAT.ss),逐级用 dbg tap 在 bring-up 时对拍。**
## 算法(Encaps,全 K)
输入:ek(=KAT.pk,384K+32 B)、m(=KAT.msg,32 B)。输出:K=ss(32 B)、c=ct(32·(du·K+dv) B)。
1. `h = H(ek)` = SHA3-256(ek),多块。
2. `(K_ss, r) = G(m ‖ h)` = SHA3-512(64 B,单块)。`K_ss = hash[255:0]``r = hash[511:256]`。**ss 即 K_ss,无 KDF/J。**
3. `t̂[i] = byteDecode₁₂(ek[i·384 .. (i+1)·384])`i∈0..K-1`rho = ek[384K .. 384K+32]`
4. `Â[i][j] = SampleNTT(rho‖j‖i)` —— 与 KeyGen ST_A 完全相同。
5. `y[i] = CBD_η1(PRF(r, i))`i=0..K-1(nonce 0..K-1)。
6. `e1[i] = CBD_η2(PRF(r, K+i))`i=0..K-1(nonce K..2K-1)。**η2 恒=2。**
7. `e2 = CBD_η2(PRF(r, 2K))`(nonce 2K)。
8. `ŷ[i] = NTT(y[i])`(mode=0)。
9. `u[i] = INTT(Σⱼ Â[j][i]∘ŷ[j]) + e1[i]`i=0..K-1。**注意转置:用 Â[j][i](slot=j·K+i),不是 KeyGen 的 Â[i][j]。** INTT = ntt_core mode=1(内置 ×3303 缩放)。
10. `mu[c] = Decompress₁(byteDecode₁(m)[c])` = m 第 c bit ? 1665 : 0(无需存储,m 寄存器逐 bit 算)。
11. `v = INTT(Σⱼ t̂[j]∘ŷ[j]) + e2 + mu`
12. `c1 = byteEncode_du(Compress_du(u[i]))` 拼 K 个;`c2 = byteEncode_dv(Compress_dv(v))``ct = c1 ‖ c2`
13. du/dv:K=2/3 → (10,4);K=4 → (11,5)。ct 长度:K=2→768,K=3→1088,K=4→1568。
## 复用与新增
### 直接复用(零改动或仅加 phase mux)
- `u_sha3`(sha3_top_shared):H(ek) 多块 + G 单块 —— 与 KeyGen ST_H/ST_G 同。
- 共享 `u_keccak`:扩 sel_* 4-way mux,加 Encaps phase 选择。
- `u_snt`(sample_ntt):A 再生 —— 与 ST_A 同。
- `u_cbd`(sample_cbd):y/e1/e2 —— **新增 η2=2 驱动**(eta_i 现仅接 eta1_rt;Encaps 的 e1/e2 phase 驱动 2)。
- `u_ntt`(ntt_core):ŷ 用 mode=0;u/v 的 INTT 用 **mode=1**(缩放已内置)。
- `u_pmul`(poly_mul):点乘 Â[j][i]∘ŷ[j] 与 t̂[j]∘ŷ[j];累加在顶层逐系数 modQ(同 ST_M)。
- 3 个系数银行 bank_a/bank_se/bank_t:**容量够,见存储编排**,只加 Encaps 的读写 phase mux。
### 新增 RTL
- `byteDecode₁₂`:ek 3 字节 → 2 系数。`c0=b0|((b1&0xF)<<8); c1=(b1>>4)|(b2<<4)`。组合逻辑,流式写 bank_t。
- `Compress` 实例:实例化现有 `comp_decomp_sync`(mode=0,d=du/dv),top 当前未用。
- `byteEncode_d` 通用位打包器(d∈{4,5,10,11}):把 d-bit 压缩值 LSB-first 流式打包成字节写 ct_bram。**新增**(现有 byteEncode12 是 2→3 硬编码,不通用)。
- `mu` 流内生成:INTT v 输出时按 m 寄存器对应 bit 加 1665。
- `ct_bram`(sd_bram W=8 D=2048 A=11):ct 字节缓冲(≤1568 B)。
- ek 载入路径:`m_i[255:0]` 端口 + ek 流式载入接口(valid/ready 写入 ek_bram),Encaps 前预填。
- 输出:`ss_o`(寄存器 + dbg tap);ct 经 dbg tap 读 ct_bram(对齐现有"无流式输出、靠 readback"的风格)。
- `op_i`(KeyGen/Encaps 选择) + 新 FSM 状态。
## 存储编排(关键 — 全 K 用现有 28 slot 银行不扩容)
- bank_a (D=4096, 16 slot):Â[i][j],K=4 用满 16。
- bank_se (D=2048, 8 slot):y_hat[0..K-1] + e1[0..K-1] = 2K slot(K=4→8,刚好用满)。
- bank_t (D=1024, 4 slot):**E0 先放 t̂[0..K-1](从 ek 解码),也用作 e2 的临时家**。
- **e2 落点**:e2 只在算 v 时需要,算 u 时 bank_t 空闲 → e2 暂存 bank_t[K..](K=2/3 有空 slot)。K=4 时 bank_t 4 slot 被 t̂ 占满 → e2 先存 bank_se 某 slot(算 u 阶段 e1 仍在用,故 e2 需独立 slot)。
- **解法(全 K 统一,避免分支)**:算 u 时 t̂ 尚未需要 → **先做 u(用 A+y_hat+e1),u 全部算完压缩进 ct 后,e1 已用完** → 复用 bank_se 的 e1 区放 e2,再从 ek 解码 t̂ 进 bank_t 算 v。峰值 slot = 16(A)+ 2K(se)+ 0(t 尚未填)= K=4 时 24 ≤ 28。✅
- 时序:E_A(填 A)→ E_CBD(y/e1/e2... e2 先丢 bank_t[0])→ E_NTT(y→y_hat)→ E_U(算 u[i],压缩写 ct c1 区)→ E_V_PREP(t̂ 解码进 bank_t,e2 从 bank_t[0] 搬到 bank_se 空 slot 或就地)→ E_V(算 v,+e2+mu,压缩写 ct c2 区)。
- **简化**:e2 在 E_CBD 阶段先存 bank_se 的 e1 区**之后**的 slot 不够(K=4)。改为 e2 存 bank_t[0](此时 t̂ 未填),E_V_PREP 时 t̂ 从 ek 流式解码覆盖 bank_t,但 e2 要先读出暂存(单 poly 256×12b 可进一个小 reg 阵列,或搬到 bank_se 算完 u 后的空位)。bring-up 时定稿,以 dbg tap 验证。
## 运行时参数(新增)
```
eta2_rt = 2'd2; // 恒定
du_rt = (k==4) ? 5'd11 : 5'd10;
dv_rt = (k==4) ? 5'd5 : 5'd4;
c1_bytes_rt = 32*du_rt*k_r; // K2:640 K3:960 K4:1408
c2_bytes_rt = 32*dv_rt; // K2:128 K3:128 K4:160
ct_bytes_rt = c1_bytes_rt + c2_bytes_rt; // 768 / 1088 / 1568
```
## 顶层接口新增
- `op_i` (1b):0=KeyGen(现有),1=Encaps。在 start_i 锁存为 op_r。
- `m_i [255:0]`:Encaps 消息(byte0 在低)。
- ek 载入:`ek_in_valid_i/ek_in_byte_i[7:0]/ek_in_ready_o`(或复用 dbg 写口),Encaps 前把 ek 流进 ek_bram。
- `ss_o [255:0]` + `done_o`(复用);ct 经 `dbg_ct_idx_i[10:0] → dbg_ct_o[7:0]` readback。
## 实现阶段(逐阶段 KAT/dbg 对拍)
- **E0 — 脚手架 + ek 载入 + H/G**:加 op_i/m_i/ek 载入,ST_ENC_LOAD→ST_ENC_H(H(ek))→ST_ENC_G(G(m‖h))。dbg 验证 ss=K_ss、r(对 ml-kem-r logging::Encaps 的 K/r/H(ek))。
- **E1 — A 再生 + t̂ 解码**:ST_ENC_A 复用 snt 写 bank_a;byteDecode12 把 ek 解码进 bank_t。dbg 读系数对 KeyGen golden 的 Ahat / 对 KAT pk 解码的 t̂。
- **E2 — y/e1/e2 采样 (η1/η2)**:ST_ENC_C,nonce 0..2K,eta 在 e1/e2 切 2。dbg 验证 y/e1/e2(对 ml-kem-r)。
- **E3 — ŷ = NTT(y)**:ST_ENC_N,mode=0,就地。dbg 对 y_hat。
- **E4 — u = INTT(Σ Â[j][i]∘ŷ[j]) + e1**:ST_ENC_U,poly_mul + 累加 + INTT(mode=1) + 加 e1。**转置寻址 slot=j·K+i**。dbg 对 u。
- **E5 — Compress_du + byteEncode_du → c1** ✅:comp_decomp(mode0,d=du) + 通用 LSB-first 打包器(ST_ENC_C1)写 ct_bram c1 区。dbg_ct tap 比 ct[0..c1_bytes]==KAT.ct 前缀,K=2/3/4 全过(含 K=4 du=11 跨字节)。runner = `./run_enc.sh K CASE`
- **E6 — v = INTT(Σ t̂[j]∘ŷ[j]) + e2 + mu** ✅:ST_ENC_C1→ST_ENC_TDEC(t̂ 解码进 **bank_a** slot j·K)→ST_ENC_E2MV(e2 从 bank_t[0] 搬到 **bank_a[1]**)→ST_ENC_V(复用 u_* MAC/INTT/ADD,u_row≡0)。mu[w]=m_r[w]?1665:0。v 落 bank_t[UPSUM],dbg slot 9(K=2)。dbg 对 v==ml-kem-r golden 全过。**踩坑:e2 搬迁曾 off-by-one(写 e2[i+1] 到 slot i),已修(em_widx==em_ridx,写延后 1 拍对齐 bram 读)。** verify_e1 已废弃(TDEC 覆盖 bank_a 的 A_hat;A_hat 由 E4 转置 MAC 间接验证)。
- **E7 — Compress_dv + byteEncode_dv → c2 + 端到端 KAT** ✅:ST_ENC_V→ST_ENC_C2,复用 E5 打包器(cp_d=dv,coeff 源 bank_t[UPSUM]=v,poly 数=1),cp_wa 接着 c1_bytes 续写(不重置)。FSM:V→C2→DONE。verify_e7 比全长 ct==KAT.ct。**全 K(2/3/4)、多 case 端到端通过:ct==KAT.ct && ss==KAT.ss。Encaps 完成。**
## 验证
- TB `tb_mlkem_enc_katK_xsim.v`:从 `~/Dev/ml-kem-r/test_data/kat_MLKEM_{512,768,1024}.rsp` 取 pk(→ek)、msg(→m)、ct、ss,逐字节比 ct + 比 ss。
- bring-up 中间对拍:`cargo run --example logging`(已有 Encaps log::debug,输出 K/r/H(ek)/|c|),或临时加 dump_encaps.rs 出 256-coeff 中间量(仅工作树,不提交 ml-kem-r)。
- XSIM 环境同 KeyGen:`source settings64.sh; export LD_PRELOAD=libtinfo.so.5; rm -rf xsim.dir .Xil`
## 风险 / 注意
- **转置**:Encrypt 用 Â[j][i],KeyGen 用 Â[i][j]。slot = j*K+i(列优先)。最易错,E4 单列 dbg 对拍。
- **G 字节序**:KeyGen G 输入 d 原序无翻转(keygen_plan 已确认);但 xcheck 发现 KAT 文件 d/z 存的是翻转序。**m 喂入字节序需 E0 用 KAT.msg 实测确认**(很可能与 d 同约定)。
- **INTT 缩放**:ntt_core mode=1 已内置 ×3303,不要再缩放。
- **e2 落点(K=4)**:见存储编排,bring-up 定稿,dbg 验证不踩 t̂/e1。
- **byteEncode_d 通用打包**:d=10/11 跨字节,位序 LSB-first(同 byte_encode)。新写、单独 TB 或 E5 dbg 即验。
- **共享 keccak 4-way mux**:加 Encaps phase 的 sel_ + kc_valid_o 门控,勿与 KeyGen phase 冲突(op_r 已区分)。

44
run_enc.sh Executable file
View File

@@ -0,0 +1,44 @@
#!/bin/bash
# run_enc.sh - Run Vivado XSIM for the ML-KEM Encaps testbench (tb_mlkem_enc_katK).
#
# Usage: ./run_enc.sh [K] [CASE]
# ./run_enc.sh # K=2 CASE=0
# ./run_enc.sh 3 1 # K=3 CASE=1
#
# Compiles the same RTL as the KeyGen tcl (mlkem_top + leaves), elaborates the
# encaps TB for the requested K, and runs the requested CASE.
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
VIVADO_SETTINGS="/opt/Xilinx/Vivado/2019.2/settings64.sh"
SEL_K="${1:-2}"
SEL_CASE="${2:-0}"
source "$VIVADO_SETTINGS"
export LD_PRELOAD="${LD_PRELOAD}${LD_PRELOAD:+:}/usr/lib64/libtinfo.so.5"
cd "$SCRIPT_DIR"
rm -rf xsim.dir .Xil
# Compile every xvlog RTL line from the KeyGen tcl (same datapath, now incl.
# pipeline_reg + comp_decomp_sync + mlkem_top), skipping only the KeyGen TB.
TCL="sync_rtl/top/TB/xsim_run.tcl"
while read -r cmd; do
[[ "$cmd" == *tb_mlkem_kg_katK* ]] && continue # skip the KeyGen TB
echo " $cmd"
eval "$cmd" || { echo "COMPILE FAILED: $cmd"; exit 1; }
done < <(grep -E '^xvlog ' "$TCL")
# Compile the encaps TB
echo " xvlog -sv --relax sync_rtl/top/TB/tb_mlkem_enc_katK_xsim.v"
xvlog -sv --relax sync_rtl/top/TB/tb_mlkem_enc_katK_xsim.v \
|| { echo "TB COMPILE FAILED"; exit 1; }
echo " xelab tb_mlkem_enc_katK_xsim -generic_top KP=$SEL_K -s mlkem_enc_k$SEL_K --timescale 1ns/1ps"
xelab tb_mlkem_enc_katK_xsim -generic_top KP=$SEL_K -s mlkem_enc_k$SEL_K --timescale 1ns/1ps \
|| { echo "ELAB FAILED for K=$SEL_K"; exit 1; }
LOG="/tmp/run_enc_k${SEL_K}_c${SEL_CASE}.log"
echo " xsim mlkem_enc_k$SEL_K -R -testplusarg CASE=$SEL_CASE"
xsim "mlkem_enc_k$SEL_K" -R -testplusarg "CASE=$SEL_CASE" 2>&1 | tee "$LOG"

View File

@@ -0,0 +1,50 @@
// tb_sha3_g512.v - isolate sha3_top_shared mode=11 (64-byte SHA3-512).
`timescale 1ns/1ps
module tb_sha3_g512;
reg clk=0, rst_n=0;
reg [1:0] mode;
reg [511:0] data_i;
reg valid_i, ready_i;
wire ready_o, valid_o;
wire [511:0] hash_o;
// shared keccak
wire [1599:0] kc_state_i, kc_state_o;
wire kc_valid_i, kc_valid_o, kc_ready_o, kc_ready_i;
sha3_top_shared u_sha3 (
.clk(clk), .rst_n(rst_n), .mode(mode), .data_i(data_i),
.valid_i(valid_i), .ready_o(ready_o), .hash_o(hash_o), .valid_o(valid_o),
.ready_i(ready_i),
.mb_en(1'b0), .mb_block_i(1088'd0), .mb_valid_i(1'b0), .mb_last_i(1'b0), .mb_ready_o(),
.kc_state_o(kc_state_o), .kc_valid_o(kc_valid_o), .kc_ready_o(kc_ready_o),
.kc_state_i(kc_state_i), .kc_valid_i(kc_valid_i), .kc_ready_i(kc_ready_i)
);
keccak_core #(.ROUNDS(24)) u_kc (
.clk(clk), .rst_n(rst_n), .state_i(kc_state_i), .valid_i(kc_valid_i),
.ready_o(kc_ready_o), .state_o(kc_state_o), .valid_o(kc_valid_o), .ready_i(1'b1)
);
always #5 clk=~clk;
integer j;
initial begin
// m || hek (byte0 in [7:0]); m=20a7..ffff, hek=ca87..aac6
// build little-endian-in-register: byte0 at [7:0]
data_i = 512'd0;
// m bytes 0..31
data_i[ 0 +: 256] = 256'hffff80fc331b2ca1904ccf554ed114bf99f6de44b92082c36c49700fe1b7a720;
// hek bytes 32..63
data_i[256 +: 256] = 256'hc6aa5100ed06d0c2db8cc3d1a36a62055b182f8d51ea71602501857e7c5d87ca;
mode=2'b11; valid_i=0; ready_i=1;
rst_n=0; repeat(4) @(posedge clk); rst_n=1; @(posedge clk);
valid_i=1; @(posedge clk);
while(!(valid_i && ready_o)) @(posedge clk);
valid_i=0;
while(!valid_o) @(posedge clk);
$write("K_ss = "); for(j=0;j<32;j=j+1) $write("%02x", hash_o[8*j +: 8]); $write("\n");
$write("r = "); for(j=0;j<32;j=j+1) $write("%02x", hash_o[256+8*j +: 8]); $write("\n");
$display("want K_ss = 2b5c52ee72946331983ba050be0f435055c0547901e03559b356517889ea27c5");
$display("want r = 08cd245f59e6cb6e3687c6632749b6c0737d183701f0b0492b843358893c6a24");
$finish;
end
initial begin #100000; $display("timeout"); $finish; end
endmodule

View File

@@ -63,6 +63,7 @@ module sha3_top_shared (
// Absorb state: message || suffix || pad10*1 into rate bits
// ================================================================
wire [575:0] g_pad;
wire [575:0] g512_pad;
wire [1087:0] h_pad;
wire [1087:0] j_pad;
@@ -70,12 +71,15 @@ module sha3_top_shared (
assign h_pad = {1'b1, {828{1'b0}}, 1'b1, 2'b10, data_i[255:0]};
// J: SHAKE suffix is "1111" all ones, order irrelevant
assign j_pad = {1'b1, {570{1'b0}}, 1'b1, 4'b1111, data_i[511:0]};
// mode 11 = G over a full 64-byte (512-bit) message (Encaps: G(m||H(ek))).
// SHA3-512 rate=576; suffix 01 + pad10*1: 1 + 60 zeros + 1 + 2'b10 + 512 = 576.
assign g512_pad = {1'b1, {60{1'b0}}, 1'b1, 2'b10, data_i[511:0]};
wire [1599:0] absorb_state;
assign absorb_state = (mode == 2'b00) ? {{(1600-576){1'b0}}, g_pad} :
(mode == 2'b01) ? {{(1600-1088){1'b0}}, h_pad} :
(mode == 2'b10) ? {{(1600-1088){1'b0}}, j_pad} :
1600'd0;
{{(1600-576){1'b0}}, g512_pad};
// ================================================================
// Multi-block SHA3-256 absorb FSM (active only when mb_en=1)

View File

@@ -0,0 +1,76 @@
#!/usr/bin/env python3
"""gen_encaps_vectors.py - Emit per-byte Encaps KAT vectors for the XSIM TB.
For ML-KEM-512/768/1024, parse the NIST .rsp and write, per case:
enc_k{K}_c{N}_ek.hex : ek (=pk) bytes, one hex byte per line, byte 0 first
enc_k{K}_c{N}_m.hex : msg bytes, one per line, byte 0 first
enc_k{K}_c{N}_ct.hex : ct bytes, one per line, byte 0 first (golden)
enc_k{K}_c{N}_ss.hex : ss bytes, one per line, byte 0 first (golden)
Per-byte layout removes all endianness ambiguity: the TB preloads ek_bram with
addr i = line i, builds m_i[8*i +: 8] = m byte i, and compares ct/ss byte-wise.
Run: python3 gen_encaps_vectors.py [num_cases]
"""
import os
import re
import sys
ML_KEM_R = os.environ.get("ML_KEM_R", os.path.expanduser("~/Dev/ml-kem-r"))
OUT_DIR = os.path.join(os.path.dirname(__file__), "vectors")
KATS = {2: "kat_MLKEM_512.rsp", 3: "kat_MLKEM_768.rsp", 4: "kat_MLKEM_1024.rsp"}
def parse_kat(path, n):
"""Return list of dicts {count, msg, pk, ct, ss} (hex strings) for first n."""
vecs, cur = [], {}
with open(path) as f:
for line in f:
line = line.strip()
m = re.match(r"^count\s*=\s*(\d+)$", line)
if m:
if cur:
vecs.append(cur)
if len(vecs) >= n:
break
cur = {"count": int(m.group(1))}
continue
# exact-key match so "ct =" doesn't catch "ct_n ="
m = re.match(r"^(msg|pk|ct|ss)\s*=\s*([0-9a-fA-F]+)$", line)
if m and cur:
cur[m.group(1)] = m.group(2).lower()
if cur and len(vecs) < n:
vecs.append(cur)
return vecs
def write_bytes(path, hexstr):
"""Write hex string as one byte per line (byte 0 = first 2 hex chars)."""
with open(path, "w") as f:
for i in range(0, len(hexstr), 2):
f.write(hexstr[i:i + 2] + "\n")
def main():
ncases = int(sys.argv[1]) if len(sys.argv) > 1 else 3
os.makedirs(OUT_DIR, exist_ok=True)
for k, fname in KATS.items():
path = os.path.join(ML_KEM_R, "test_data", fname)
if not os.path.exists(path):
print(f"skip K={k}: {path} not found", file=sys.stderr)
continue
vecs = parse_kat(path, ncases)
for v in vecs:
n = v["count"]
base = os.path.join(OUT_DIR, f"enc_k{k}_c{n}")
write_bytes(f"{base}_ek.hex", v["pk"])
write_bytes(f"{base}_m.hex", v["msg"])
write_bytes(f"{base}_ct.hex", v["ct"])
write_bytes(f"{base}_ss.hex", v["ss"])
print(f"K={k}: wrote {len(vecs)} cases "
f"(ek={len(vecs[0]['pk'])//2}B ct={len(vecs[0]['ct'])//2}B)")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,269 @@
// tb_mlkem_enc_katK_xsim.v - ML-KEM Encaps vs NIST KAT, parametric K (KP) + CASE.
// E0 stage: verify H(ek), G(m||H(ek)) -> (ss=K, r). Preloads ek into ek_bram,
// pulses start with op=1, waits for done, checks ss == KAT.ss and dumps H(ek)/r.
//
// xelab -generic_top KP=2|3|4 ; xsim -testplusarg CASE=n
// ek/m/ct/ss vectors: sync_rtl/top/TB/vectors/enc_k{K}_c{N}_{ek,m,ct,ss}.hex
// (per-byte hex, byte 0 first).
`timescale 1ns/1ps
module tb_mlkem_enc_katK_xsim;
parameter KP = 2;
localparam EKB = 384*KP + 32; // ek (=pk) bytes
localparam CTB = (KP==4) ? 1568 : (32*(10*KP+4)); // ct bytes: K2 768,K3 1088,K4 1568
localparam DU = (KP==4) ? 11 : 10; // compression du
localparam C1B = 32*DU*KP; // c1 byte count: K2 640,K3 960,K4 1408
reg clk=0, rst_n=0, start_i=0;
reg [2:0] k_i;
reg [255:0] d_i, z_i, m_i;
wire busy_o, done_o;
// ek preload port
reg ek_in_we=0; reg [10:0] ek_in_addr=0; reg [7:0] ek_in_byte=0;
wire [255:0] ss_o;
reg [10:0] dbg_ct_idx_i=0; wire [7:0] dbg_ct_o;
reg [3:0] dbg_slot_i=0; reg [7:0] dbg_idx_i=0; wire [11:0] dbg_coeff_o;
reg dbg_byte_sel_i=0; reg [10:0] dbg_byte_idx_i=0; wire [7:0] dbg_byte_o;
reg [11:0] dbg_dk_idx_i=0; wire [7:0] dbg_dk_o;
wire [255:0] dbg_rho_o, dbg_sigma_o, dbg_r_o, dbg_hek_o;
mlkem_top dut (
.clk(clk), .rst_n(rst_n), .k_i(k_i), .op_i(1'b1),
.d_i(d_i), .z_i(z_i), .msg_i(m_i), .start_i(start_i),
.busy_o(busy_o), .done_o(done_o),
.ek_in_we(ek_in_we), .ek_in_addr(ek_in_addr), .ek_in_byte(ek_in_byte),
.ss_o(ss_o), .dbg_ct_idx_i(dbg_ct_idx_i), .dbg_ct_o(dbg_ct_o),
.dbg_slot_i(dbg_slot_i), .dbg_idx_i(dbg_idx_i), .dbg_coeff_o(dbg_coeff_o),
.dbg_byte_sel_i(dbg_byte_sel_i), .dbg_byte_idx_i(dbg_byte_idx_i), .dbg_byte_o(dbg_byte_o),
.dbg_dk_idx_i(dbg_dk_idx_i), .dbg_dk_o(dbg_dk_o),
.dbg_rho_o(dbg_rho_o), .dbg_sigma_o(dbg_sigma_o),
.dbg_r_o(dbg_r_o), .dbg_hek_o(dbg_hek_o)
);
always #5 clk = ~clk;
reg [7:0] ek_b [0:EKB-1];
reg [7:0] m_b [0:31];
reg [7:0] ss_b [0:31];
reg [7:0] ct_b [0:CTB-1];
integer c, i, errors, casenum, j;
reg [8*80-1:0] tag, ekfile, mfile, ssfile, ctfile;
initial begin
if (!$value$plusargs("CASE=%d", casenum)) casenum = 0;
$sformat(tag, "k%0d", KP);
$sformat(ekfile, "sync_rtl/top/TB/vectors/enc_%0s_c%0d_ek.hex", tag, casenum);
$sformat(mfile, "sync_rtl/top/TB/vectors/enc_%0s_c%0d_m.hex", tag, casenum);
$sformat(ssfile, "sync_rtl/top/TB/vectors/enc_%0s_c%0d_ss.hex", tag, casenum);
$sformat(ctfile, "sync_rtl/top/TB/vectors/enc_%0s_c%0d_ct.hex", tag, casenum);
$readmemh(ekfile, ek_b);
$readmemh(mfile, m_b);
$readmemh(ssfile, ss_b);
$readmemh(ctfile, ct_b);
// build m_i: byte i in m_i[8*i +: 8]
m_i = 256'd0;
for (j = 0; j < 32; j = j + 1) m_i[8*j +: 8] = m_b[j];
k_i = KP[2:0];
$display("=== ML-KEM K=%0d Encaps KAT case %0d (E0) ===", KP, casenum);
$write(" m = "); for (j=0;j<32;j=j+1) $write("%02x", m_b[j]); $write("\n");
rst_n=0; repeat(4) @(posedge clk); rst_n=1; @(posedge clk);
// ---- preload ek into ek_bram (1 byte/cycle) ----
for (i = 0; i < EKB; i = i + 1) begin
ek_in_we = 1'b1; ek_in_addr = i[10:0]; ek_in_byte = ek_b[i];
@(posedge clk);
end
ek_in_we = 1'b0; @(posedge clk);
// ---- run Encaps ----
start_i=1; @(posedge clk); start_i=0;
c=0; while(!done_o && c<2000000) begin @(posedge clk); c=c+1; end
if(!done_o) begin $display("FAIL K=%0d case %0d: timeout", KP, casenum); $finish; end
$display("=== Encaps E0 done in %0d cyc ===", c);
$write(" H(ek) = "); for (j=0;j<32;j=j+1) $write("%02x", dbg_hek_o[8*j +: 8]); $write("\n");
$write(" r = "); for (j=0;j<32;j=j+1) $write("%02x", dbg_r_o[8*j +: 8]); $write("\n");
$write(" ss = "); for (j=0;j<32;j=j+1) $write("%02x", ss_o[8*j +: 8]); $write("\n");
// ---- check ss == KAT.ss ----
errors = 0;
for (j = 0; j < 32; j = j + 1)
if (ss_o[8*j +: 8] !== ss_b[j]) begin
if (errors < 8) $display(" SS[%0d] got=%02x exp=%02x", j, ss_o[8*j +: 8], ss_b[j]);
errors = errors + 1;
end
if (errors == 0) $display("K=%0d CASE %0d PASS (E0): ss == KAT.ss", KP, casenum);
else $display("K=%0d CASE %0d FAIL (E0): %0d ss mismatches", KP, casenum, errors);
// ---- E1: verify A_hat (slots 0..K^2-1). t_hat (byteDecode12) is re-
// verified at E6 (V uses it); TDEC is deferred to V-prep so e2 can use
// bank_t during C/N/U. A_hat equals KeyGen golden (K=2 c0). ----
// ---- E2: verify y[i], e1[i] (bank_se), e2 (bank_t slot_t) vs ml-kem-r.
if (KP == 2 && casenum == 0) begin
// E1 (verify_e1) dropped: E6's TDEC overwrites bank_a (A_hat slots)
// with t_hat, so a post-run A_hat readback is invalid. A_hat is
// transitively verified by E4 (transpose MAC) and E6 (v uses t_hat).
verify_e2;
verify_e3;
verify_e4;
verify_e6;
end
// E5: c1 = byteEncode_du(Compress_du(u)) must equal KAT.ct[0..C1B-1].
// Runs for every K/case (ct_b is the full KAT ciphertext).
verify_e5;
// E7: full ct = c1 || c2 must equal KAT.ct (all CTB bytes). End-to-end.
verify_e7;
$finish;
end
// E1 golden: A_hat[i][j] (KeyGen golden, K=2 c0)
reg [11:0] ga [0:4*256-1];
// E2 golden: y0,y1,e1_0,e1_1 (bank_se rel slots 0..3), e2 (bank_t slot 0)
reg [11:0] gy [0:4*256-1];
reg [11:0] ge2 [0:255];
integer ce, slot, idx;
task verify_e1;
begin
$readmemh("test_framework/modules/mlkem_keygen/golden/c000_Ahat_0_0.hex", ga, 0, 255);
$readmemh("test_framework/modules/mlkem_keygen/golden/c000_Ahat_0_1.hex", ga, 256, 511);
$readmemh("test_framework/modules/mlkem_keygen/golden/c000_Ahat_1_0.hex", ga, 512, 767);
$readmemh("test_framework/modules/mlkem_keygen/golden/c000_Ahat_1_1.hex", ga, 768, 1023);
ce = 0;
for (slot = 0; slot < 4; slot = slot + 1)
for (idx = 0; idx < 256; idx = idx + 1) begin
dbg_slot_i = slot[3:0]; dbg_idx_i = idx[7:0];
@(posedge clk); @(posedge clk); @(posedge clk);
if (dbg_coeff_o !== ga[slot*256+idx]) begin
if (ce < 8) $display(" A[s%0d,%0d] got=%03x exp=%03x", slot, idx, dbg_coeff_o, ga[slot*256+idx]);
ce = ce + 1;
end
end
if (ce == 0) $display("K=2 CASE 0 PASS (E1): A_hat (1024) == KeyGen golden");
else $display("K=2 CASE 0 FAIL (E1): %0d A mismatches", ce);
end
endtask
// y[i],e1[i] live in bank_se at rel slots 0..K-1 (y), K..2K-1 (e1).
// dbg slot for bank_se = slot_s_rt + rel. K=2: slot_s_rt=4 -> y0=4,y1=5,e1_0=6,e1_1=7.
// e2 lives in bank_t rel slot 0 -> dbg slot = slot_t_rt = 8.
task verify_e2;
begin
$readmemh("sync_rtl/top/TB/vectors/encgold/ec_k2_c0_e2.hex", ge2);
ce = 0;
// e2 at bank_t dbg slot 8 (survives; e1 is consumed/overwritten by u
// in E4 -> e1 correctness is transitively verified by E4's u check).
for (idx = 0; idx < 256; idx = idx + 1) begin
dbg_slot_i = 8; dbg_idx_i = idx[7:0];
@(posedge clk); @(posedge clk); @(posedge clk);
if (dbg_coeff_o !== ge2[idx]) begin
if (ce < 8) $display(" E2[%0d] got=%03x exp=%03x", idx, dbg_coeff_o, ge2[idx]);
ce = ce + 1;
end
end
if (ce == 0) $display("K=2 CASE 0 PASS (E2): e2 == ml-kem-r golden");
else $display("K=2 CASE 0 FAIL (E2): %0d e2 mismatches", ce);
end
endtask
// y_hat[i] = NTT(y[i]) in place at bank_se rel slots 0..K-1 -> dbg slots 4..5 (K=2).
reg [11:0] gyh [0:2*256-1];
task verify_e3;
begin
$readmemh("sync_rtl/top/TB/vectors/encgold/ec_k2_c0_yhat_0.hex", gyh, 0, 255);
$readmemh("sync_rtl/top/TB/vectors/encgold/ec_k2_c0_yhat_1.hex", gyh, 256, 511);
ce = 0;
for (slot = 0; slot < 2; slot = slot + 1)
for (idx = 0; idx < 256; idx = idx + 1) begin
dbg_slot_i = (4+slot); dbg_idx_i = idx[7:0];
@(posedge clk); @(posedge clk); @(posedge clk);
if (dbg_coeff_o !== gyh[slot*256+idx]) begin
if (ce < 8) $display(" YH[s%0d,%0d] got=%03x exp=%03x", slot, idx, dbg_coeff_o, gyh[slot*256+idx]);
ce = ce + 1;
end
end
if (ce == 0) $display("K=2 CASE 0 PASS (E3): y_hat[0..1] == ml-kem-r golden");
else $display("K=2 CASE 0 FAIL (E3): %0d coeff mismatches", ce);
end
endtask
// u[i] = INTT(sum A^T o y_hat) + e1[i] over e1 in bank_se rel K+i -> dbg 6,7 (K=2).
reg [11:0] gu [0:2*256-1];
task verify_e4;
begin
$readmemh("sync_rtl/top/TB/vectors/encgold/ec_k2_c0_u_0.hex", gu, 0, 255);
$readmemh("sync_rtl/top/TB/vectors/encgold/ec_k2_c0_u_1.hex", gu, 256, 511);
ce = 0;
for (slot = 0; slot < 2; slot = slot + 1)
for (idx = 0; idx < 256; idx = idx + 1) begin
dbg_slot_i = (6+slot); dbg_idx_i = idx[7:0]; // bank_se rel K+slot (K=2)
@(posedge clk); @(posedge clk); @(posedge clk);
if (dbg_coeff_o !== gu[slot*256+idx]) begin
if (ce < 8) $display(" U[s%0d,%0d] got=%03x exp=%03x", slot, idx, dbg_coeff_o, gu[slot*256+idx]);
ce = ce + 1;
end
end
if (ce == 0) $display("K=2 CASE 0 PASS (E4): u[0..1] == ml-kem-r golden");
else $display("K=2 CASE 0 FAIL (E4): %0d coeff mismatches", ce);
end
endtask
initial begin #120000000; $display("FAIL: global timeout"); $finish; end
// E5: read ct_bram bytes 0..C1B-1 via dbg_ct tap; compare to KAT.ct prefix.
// dbg_ct_idx_i -> ct_rd_addr (1-cyc registered read) -> dbg_ct_o (comb tap):
// wait 3 cycles per byte (same cadence as the coeff readback tasks).
task verify_e5;
integer be;
begin
be = 0;
for (i = 0; i < C1B; i = i + 1) begin
dbg_ct_idx_i = i[10:0];
@(posedge clk); @(posedge clk); @(posedge clk);
if (dbg_ct_o !== ct_b[i]) begin
if (be < 8) $display(" C1[%0d] got=%02x exp=%02x", i, dbg_ct_o, ct_b[i]);
be = be + 1;
end
end
if (be == 0) $display("K=%0d CASE %0d PASS (E5): c1 (%0d B) == KAT.ct prefix", KP, casenum, C1B);
else $display("K=%0d CASE %0d FAIL (E5): %0d c1 byte mismatches", KP, casenum, be);
end
endtask
// E6: v = INTT(sum_j t_hat[j] o y_hat[j]) + e2 + mu lives in bank_t rel slot
// UPSUM=1 -> dbg slot slot_t_rt+1 = 9 (K=2). Compare to ml-kem-r golden v.
reg [11:0] gv [0:255];
task verify_e6;
begin
$readmemh("sync_rtl/top/TB/vectors/encgold/ec_k2_c0_v.hex", gv);
ce = 0;
for (idx = 0; idx < 256; idx = idx + 1) begin
dbg_slot_i = 9; dbg_idx_i = idx[7:0]; // bank_t rel UPSUM (K=2)
@(posedge clk); @(posedge clk); @(posedge clk);
if (dbg_coeff_o !== gv[idx]) begin
if (ce < 8) $display(" V[%0d] got=%03x exp=%03x", idx, dbg_coeff_o, gv[idx]);
ce = ce + 1;
end
end
if (ce == 0) $display("K=2 CASE 0 PASS (E6): v == ml-kem-r golden");
else $display("K=2 CASE 0 FAIL (E6): %0d coeff mismatches", ce);
end
endtask
// E7: full ciphertext ct = c1 || c2 read from ct_bram (0..CTB-1) via dbg_ct
// tap; compare to KAT.ct byte-exact. This is the end-to-end Encaps check
// (ct == KAT.ct). ss == KAT.ss is already checked at E0.
task verify_e7;
integer be;
begin
be = 0;
for (i = 0; i < CTB; i = i + 1) begin
dbg_ct_idx_i = i[10:0];
@(posedge clk); @(posedge clk); @(posedge clk);
if (dbg_ct_o !== ct_b[i]) begin
if (be < 8) $display(" CT[%0d] got=%02x exp=%02x", i, dbg_ct_o, ct_b[i]);
be = be + 1;
end
end
if (be == 0) $display("K=%0d CASE %0d PASS (E7): ct (%0d B) == KAT.ct [ct==KAT.ct && ss==KAT.ss]", KP, casenum, CTB);
else $display("K=%0d CASE %0d FAIL (E7): %0d ct byte mismatches", KP, casenum, be);
end
endtask
endmodule

View File

@@ -19,12 +19,16 @@ module tb_mlkem_kg_katK_xsim;
// KMAX defaults to 4 (worst-case sizing); KP selects the runtime k value.
mlkem_top dut (
.clk(clk), .rst_n(rst_n), .k_i(k_i), .d_i(d_i), .z_i(z_i), .start_i(start_i),
.clk(clk), .rst_n(rst_n), .k_i(k_i), .op_i(1'b0),
.d_i(d_i), .z_i(z_i), .msg_i(256'd0), .start_i(start_i),
.busy_o(busy_o), .done_o(done_o),
.ek_in_we(1'b0), .ek_in_addr(11'd0), .ek_in_byte(8'd0),
.ss_o(), .dbg_ct_idx_i(11'd0), .dbg_ct_o(),
.dbg_slot_i(dbg_slot_i), .dbg_idx_i(dbg_idx_i), .dbg_coeff_o(dbg_coeff_o),
.dbg_byte_sel_i(dbg_byte_sel_i), .dbg_byte_idx_i(dbg_byte_idx_i), .dbg_byte_o(dbg_byte_o),
.dbg_dk_idx_i(dbg_dk_idx_i), .dbg_dk_o(dbg_dk_o),
.dbg_rho_o(dbg_rho_o), .dbg_sigma_o(dbg_sigma_o)
.dbg_rho_o(dbg_rho_o), .dbg_sigma_o(dbg_sigma_o),
.dbg_r_o(), .dbg_hek_o()
);
always #5 clk = ~clk;

View File

@@ -0,0 +1,768 @@
91
7e
59
d1
e1
82
a2
96
48
a6
19
55
a1
54
b3
04
a8
42
f4
58
eb
a5
93
f3
06
5f
b7
d7
44
fb
a2
4f
a3
a0
d5
38
85
4e
32
84
4d
b2
48
d4
81
00
c3
89
c4
c4
b3
ca
6c
23
4f
2f
61
a6
79
32
ae
ee
80
8d
bf
e9
8d
89
6d
1e
96
68
82
09
65
c6
34
3b
bb
4a
4d
e6
4b
7a
99
fb
53
b5
26
4e
31
99
d5
87
ff
a5
e0
47
9f
6b
73
86
b2
3c
b9
c2
43
fa
6f
54
57
fc
97
db
c9
6d
cc
03
9b
d6
c4
e7
e8
5a
90
b5
c5
23
24
16
43
4e
a9
42
cc
71
13
4b
b9
a2
f4
99
1e
05
95
e3
48
7f
ea
ba
c4
79
ca
b9
51
0d
57
b8
62
50
ee
7c
96
a6
7a
9f
2c
61
21
f7
da
a0
2c
5c
fa
3b
23
b0
c7
32
c2
b1
56
94
e1
cc
ba
c8
2b
78
7c
f2
11
8d
08
42
5c
bb
a1
21
88
22
17
94
0c
89
4c
be
47
aa
e2
54
1f
5c
6e
0b
d1
ba
ab
31
fd
2b
2e
cb
34
b9
e6
93
f6
fc
0f
de
ea
90
67
16
d0
88
18
f5
1d
f0
c4
69
40
29
e8
c3
23
4b
e0
b6
24
71
b2
76
9d
9a
c4
ce
b9
47
60
23
80
f3
a4
97
b2
a0
1f
f7
b8
74
6c
1c
7a
e8
19
83
e0
16
bd
65
c7
cd
17
62
c1
91
85
7e
41
c2
32
19
81
f6
c7
aa
8d
7a
fa
aa
9f
a0
b5
57
ec
1e
c1
28
5f
8b
4d
6c
78
8a
ff
15
9e
a5
86
2e
81
4d
08
25
c8
83
4b
7c
a4
5d
b7
c8
ed
a3
fa
6a
6a
7b
8a
40
51
95
29
bf
74
b6
a0
f8
0c
48
49
17
f4
0c
10
7d
18
2b
ce
3e
34
4f
d3
6d
1b
37
7a
98
2f
6b
f2
36
1b
8d
66
28
75
c1
66
dc
ca
73
24
0b
86
df
5e
e0
fa
42
31
b3
56
f0
cd
d6
b3
17
0f
f8
91
13
db
0b
1b
9d
d2
64
33
57
83
22
2c
be
7b
e8
44
64
2b
0b
19
88
d1
8b
26
8d
a6
f7
8c
c9
44
f4
3b
82
71
43
c4
dc
5e
e1
f0
d6
58
b8
7b
9c
00
86
2f
26
3d
6f
57
98
fc
82
e8
be
07
9a
11
08
de
fd
d4
c7
86
3c
31
47
e9
bd
f0
fb
c8
4d
eb
a2
15
fd
fb
9c
a4
23
7a
84
19
b2
6f
de
ff
63
a7
f9
5c
44
2b
ce
67
96
6e
be
6b
5f
9a
f1
fd
2a
7c
be
d6
48
ea
72
76
db
74
2d
ac
3e
47
0f
6c
c7
41
d8
2e
77
e9
c0
dd
01
9b
54
58
17
75
51
97
5b
59
63
3b
e6
7b
35
c0
d4
30
b7
25
52
4d
ea
fd
eb
a6
d3
64
3c
5c
82
eb
b5
24
79
66
9c
41
1b
b5
6b
39
7f
8d
37
b8
f7
fa
4c
ed
03
16
54
6c
aa
ee
41
9c
0e
7f
1d
96
a0
ec
61
4c
6c
9c
8e
03
e0
10
03
17
65
12
1f
1e
b8
fd
54
9f
de
04
6a
50
44
3e
ba
b9
fe
a2
e7
8a
29
f4
96
44
55
92
8d
b1
f9
e7
82
0e
53
3c
57
12
98
9b
3a
36
37
ea
00
a1
de
3e
46
9a
80
0c
43
1d
4d
f2
43
c1
dc
7d
6a
89
ba
79
00
d5
2b
78
bc
c1
03
47
4f
9d
2c
21
28
02
5c
31
93
c4
d1
a0
9f
50
90
5a
d2
de
7f
e8
e0
9f
04
7e
0e
72
e6
da
b0
ed
f7
e3
b0
8e
d1
31
6a
cf
85
72
54
b6
c1
fb
f6
4c
e5
82
f2
99
0c
ce
cf
95
05
fd
7e
85
17
99
8a
af
58
3b
e1
aa
64
1e
9b
54
db
b9
1c
a9
d0
70
09
13
96
7f
b0
34
92
01
b5
d6
79
b3
2d

View File

@@ -0,0 +1,800 @@
80
b7
01
00
83
1d
7e
e1
68
f4
73
92
48
31
19
f9
38
63
ec
b0
bc
60
53
12
d3
57
28
87
6b
00
f5
f5
7a
f4
c8
5e
da
97
28
1d
57
43
90
bc
72
56
19
36
68
dc
98
62
53
54
ab
52
b9
bc
e7
81
c5
77
1c
c2
60
99
f6
fb
ac
be
e1
78
4d
19
48
87
73
1f
09
7c
87
e0
82
cb
ea
c5
7d
30
b7
b9
a2
93
87
2c
84
14
66
f2
24
4c
c6
5f
f4
ba
65
3d
67
51
df
a2
20
51
d5
53
36
99
42
c3
1c
29
f9
13
07
af
57
32
92
d6
97
a8
c3
16
12
e0
7b
53
35
cf
08
32
9f
d2
46
bf
2a
32
20
0a
8c
b0
c4
b0
3b
9d
09
c5
ba
1c
39
19
53
9e
92
29
c6
96
92
43
48
28
2f
69
6b
15
25
e5
60
38
06
b4
db
61
8b
3d
c8
63
0c
b2
86
e4
31
17
21
bc
50
31
f2
57
aa
92
5b
f8
09
60
44
5a
a8
d8
e6
97
88
e9
9d
a9
5c
1d
10
cc
3b
e8
58
52
8d
b0
cf
ea
00
3c
74
69
37
80
a6
5a
36
e6
28
43
b3
be
15
40
65
43
d2
2d
83
50
7c
87
b2
78
67
92
c8
0f
a5
62
84
54
a3
10
39
4d
da
4c
2a
b5
94
93
85
02
57
d6
d3
bc
10
71
86
d9
06
27
07
f3
54
e8
1a
1a
10
fc
b7
63
d3
1a
4e
c4
09
aa
24
3e
d2
e5
9b
b1
89
85
5e
b1
65
62
66
bb
37
50
07
85
ea
08
cd
88
c2
22
a8
c5
3a
87
77
ca
b4
2c
9c
23
8a
00
d5
93
69
42
50
26
e9
9d
2a
e6
04
0a
f6
70
90
29
ca
87
89
c8
97
b3
29
fb
a7
48
d6
9c
8a
71
48
c9
5a
bb
0c
71
78
7c
58
f1
2f
21
f2
21
3e
38
92
42
aa
7f
bd
32
0c
12
ac
42
c6
11
60
6c
b8
c1
d1
b4
62
58
86
a1
45
a5
35
bd
65
bd
0d
99
6b
33
0c
16
57
d6
1a
87
e9
04
17
00
32
25
75
98
20
a3
bb
ec
50
5c
da
f1
11
93
22
9a
ae
17
3c
d1
2b
ad
22
a7
a3
0a
76
a9
fa
76
36
c3
d5
aa
48
e1
78
40
12
a0
12
f1
41
68
b7
85
3d
2a
16
f9
0c
a0
2c
c3
3b
20
06
c0
8f
26
c1
5f
ca
29
61
2c
c7
92
e1
cf
02
e1
32
1a
75
a8
10
89
19
86
66
7d
41
48
af
36
e6
5e
1a
59
25
89
02
96
17
73
4c
31
5c
0e
39
b7
51
8c
86
60
cd
c2
65
d0
c8
13
ef
20
a0
43
31
7f
ae
5b
8e
40
54
6e
ec
f7
1d
6c
05
4f
a6
6b
49
40
13
09
be
f3
0f
d5
1a
55
19
75
5d
a9
10
46
89
b2
6f
08
39
15
4c
84
7b
ef
23
65
94
3c
02
49
48
3a
ad
9a
73
67
c9
80
a3
d1
ce
46
d2
00
8a
15
27
5c
a3
bc
a4
83
4e
6f
9a
30
36
c0
cd
80
ba
22
8d
34
b9
78
02
44
d5
c0
cb
e9
07
c6
fb
43
82
4a
9c
07
46
47
16
39
cb
86
18
8c
60
c3
b2
53
21
5c
c9
16
92
bc
d1
49
3d
6a
44
4d
53
64
46
e0
29
68
13
80
01
cc
28
7e
0e
51
8f
3a
a2
5d
8c
3b
95
b3
c3
5c
59
f4
81
9d
48
49
76
02
9a
f0
5a
26
3c
35
33
6b
26
1f
77
b2
cd
c2
93
89
f0
84
c0
4c
bb
37
0c
48
56
2b
5b
50
77
1c
0f
b8
16
90
8e
19
8d
d6
d5
3f
76
e4
8b
f0
42
c2
b1
f8
2a
3a
40
b8
da
f5
1f
46
d7
6f
a4
bc
c9
d3
c8
94
ff
85
0c
0f
aa
32
e0
ac
33
90
1a
4c
79
13
9f
5f
20
41
7e
c1
a1
90
60
70
44
f1
8b
b8
24
cf
35
0c
78
ab
3d
df
3c
2c
86
ca
55
43
f7
15

View File

@@ -0,0 +1,32 @@
20
a7
b7
e1
0f
70
49
6c
c3
82
20
b9
44
de
f6
99
bf
14
d1
4e
55
cf
4c
90
a1
2c
1b
33
fc
80
ff
ff

View File

@@ -0,0 +1,32 @@
2b
5c
52
ee
72
94
63
31
98
3b
a0
50
be
0f
43
50
55
c0
54
79
01
e0
35
59
b3
56
51
78
89
ea
27
c5

View File

@@ -0,0 +1,768 @@
1c
43
de
77
0e
9c
d5
98
46
b6
f8
1f
9c
61
cc
d8
37
97
8e
26
d3
2c
33
0d
50
9d
8e
29
d9
e7
fb
1a
4f
ba
52
10
1e
48
88
0d
80
61
6e
53
3a
ac
59
1f
eb
d3
93
cb
b1
28
2d
e1
53
56
0d
43
73
cb
88
2c
66
d3
07
32
95
97
91
0e
d3
ff
10
58
40
96
4a
64
0b
c7
62
e6
32
9b
9f
3b
a4
1a
9e
c3
1e
04
c8
c9
ef
ec
96
35
e0
a9
b4
56
f6
19
f1
06
58
be
d3
6a
13
3c
ed
0c
23
0b
3c
fd
d8
07
37
75
d7
59
49
2a
7e
3b
e0
ce
27
72
5e
b7
c2
47
4c
56
8d
03
92
43
fe
81
0b
31
db
2f
ce
8e
e4
03
73
06
a5
a9
bb
ee
1b
a7
45
c2
b4
fc
11
11
65
9f
5d
e9
19
94
1c
89
c8
cc
66
1e
ca
aa
e3
e9
61
0e
ac
66
cd
41
28
e3
d4
bb
5a
bb
38
83
7d
99
6d
b7
e5
c3
1f
d0
92
22
f2
2f
85
4c
25
fa
d8
ae
12
de
d3
e3
37
c3
24
14
68
ee
eb
ec
da
5d
d6
82
e6
e5
7f
51
ad
35
28
58
d0
40
48
a4
70
3a
dc
13
52
63
c4
7b
3a
5d
6e
6c
59
5b
a1
ea
06
02
bd
34
35
3e
19
1b
fd
f3
6d
56
b2
05
39
74
8a
d6
1c
66
c2
50
e0
7f
2e
3c
6d
60
89
44
72
fe
7e
67
7c
35
3f
70
a1
75
f0
4c
60
f6
9d
d9
21
e9
b9
24
9b
d6
29
14
40
58
29
ae
fa
05
2c
92
9c
f2
3a
ba
06
7a
7e
b7
fe
d0
c1
5f
40
1e
f5
08
4a
97
a6
1c
ed
6f
bf
87
91
48
72
31
c0
5f
c2
3a
38
7c
77
c0
31
65
38
ad
09
be
82
b1
0e
e8
f8
d6
a9
d9
79
f6
3a
2e
c2
36
4f
08
67
30
6e
9b
f6
e3
c0
38
84
96
be
c8
ad
16
15
15
b0
16
e9
1b
5a
b4
e4
ee
9c
48
f0
de
49
50
aa
49
6b
3b
ac
3a
bf
a8
6b
9c
be
27
a9
2a
c8
a8
17
65
0b
2c
4c
53
6e
da
1d
2a
b5
81
95
cd
42
3e
0f
4a
fb
5b
ae
71
01
43
88
21
b8
9a
99
20
6b
a5
fd
d9
d0
6c
39
df
d6
f0
6f
ba
8c
71
94
21
3d
0e
86
f8
0e
4e
5a
24
97
7e
fa
ac
f7
eb
c0
2b
02
8c
fc
96
73
de
6c
8a
0c
c6
ae
1e
57
73
50
93
5c
91
2c
e1
d5
6c
67
08
75
c4
d6
be
d8
75
0a
9e
fb
b4
50
79
1c
3d
56
0c
e5
10
21
32
74
f7
d4
b3
b8
8a
d9
96
70
34
75
10
68
58
0a
9d
ed
f0
ab
3c
ad
bb
2f
3b
bf
37
19
ce
73
e9
38
66
6f
2a
7f
e8
2f
10
f0
8d
32
5d
20
3e
c0
b0
58
5b
58
22
16
b7
fc
05
a7
29
14
81
d1
22
27
91
38
5b
64
16
e8
07
e6
97
02
6b
e2
18
c5
19
c1
b2
15
84
2a
fa
0e
58
f9
88
f8
8f
3d
90
cf
6c
f4
21
87
87
6b
db
d7
be
0b
2c
26
1b
0d
d3
6d
16
dd
e6
ed
83
54
bd
74
32
b6
6d
10
bc
ac
cb
69
c8
94
47
78
90
2f
c3
6d
c7
0f
4e
63
85
b9
d5
9a
ec
c6
44
5c
e4
ad
65
bc
c9
58
e8
86
a9
2a
1d
4d
17
5c
f3
54
b4
fe
e8
89
0e
a4
ce
21
f5
e8
31
f6
90
5a
e5
28
db
39
91
83
4a
24
52
f5
91
c3
ea
88
d7
61
2a
59
9a
30
14
fc
8e
10
b3
0d
48
39
8b
b8
99
1c
0f
f1
2a
73
56
64
50
32
53
0d
81
8d
8a
a2
50
0b
25
21
a7
3e
18
59
1e
c6
ef
42
2d
ae
ed
66
d2

View File

@@ -0,0 +1,800 @@
de
e7
89
22
bb
8d
a2
f4
76
4d
ca
45
f8
ea
4c
1f
53
0a
1c
57
1d
3a
d1
92
4b
58
96
98
cb
27
19
e0
69
fd
94
3c
14
52
c5
d1
68
b2
b3
57
b2
65
83
1c
01
9c
b3
55
7a
0b
f7
18
7e
4d
10
8b
f7
70
c7
4d
b4
03
89
cc
71
8f
3b
c1
1c
e3
ab
a8
43
66
ab
24
51
94
b9
41
f8
1b
7a
e7
02
41
9b
b9
8d
73
ba
00
37
83
30
6c
7b
3a
36
77
a5
43
a0
10
0c
31
75
e8
c0
20
ca
26
65
12
90
9c
35
50
c4
f6
5c
0e
a3
e2
4a
47
23
7d
9a
4a
0b
5a
e5
88
f9
83
31
1f
aa
36
e8
91
af
8e
a1
b3
08
c8
31
79
24
61
54
c7
65
ac
5b
5a
15
45
6e
19
33
08
00
28
37
d1
43
54
e0
66
a3
4a
44
09
af
bb
15
08
5a
ad
c9
e2
2b
8d
b5
58
3d
45
b0
a4
ac
72
47
4a
2a
b9
4b
79
2e
53
1a
b0
cb
88
2c
13
a4
13
9a
71
ff
a3
78
3b
53
71
78
f3
4e
11
1b
6c
3f
12
0a
76
d4
cd
ce
c4
61
84
30
35
ac
d2
85
ed
62
7d
8b
d2
b0
b9
97
cc
ce
b4
ad
ae
36
15
a7
3b
ba
0a
7c
7b
b9
b1
33
58
bb
51
ff
8a
57
4d
86
b5
00
02
72
cd
27
0a
0a
1b
24
bb
91
75
06
70
1c
2f
44
1f
c5
b7
9d
d4
51
cb
3c
ac
c7
40
12
7b
d4
11
60
4b
da
c4
64
da
1a
2f
83
91
8c
5b
2f
b6
e5
28
4c
97
2b
93
35
7a
83
78
28
b1
13
26
32
bb
6f
7b
fb
be
c3
d9
47
bd
40
3d
86
99
00
66
db
65
53
72
24
34
c7
c0
e3
99
2f
00
9b
b2
38
f7
a6
b3
e5
25
1e
da
94
3a
77
03
fb
a2
89
aa
20
53
a8
57
79
6c
2c
b9
45
49
4c
0b
a7
91
a9
e3
cb
fa
80
0d
89
88
c8
12
19
97
d9
75
b3
d0
35
95
ad
d6
4a
3e
ac
b8
ba
36
a4
d8
b3
bf
dc
11
b7
d5
62
39
08
7c
90
f3
52
c0
ee
c4
08
57
f0
89
cc
fa
7c
9a
68
3a
1d
e3
cd
8f
f2
8b
22
15
3d
de
23
1e
5f
74
80
5d
68
3e
b8
c3
46
ba
16
c7
fe
68
06
4b
20
59
c8
73
8e
5a
c1
9b
64
d4
34
3f
5c
9d
8b
f9
78
03
02
b0
67
6c
20
2a
21
29
2c
c1
5f
c1
58
9a
69
83
8a
d1
ea
3d
0c
37
06
f8
e1
b0
11
f6
12
99
a5
6e
c2
51
50
51
fb
94
73
4b
30
8a
f3
c3
5e
45
ab
fa
dc
12
8f
e6
98
38
aa
37
08
05
14
d6
c3
74
8c
91
6b
d6
55
08
0a
10
35
ff
1a
76
3e
45
0b
56
86
4c
c2
32
af
ee
53
91
9f
f8
89
a8
20
a7
a6
55
86
31
b8
8f
73
18
c0
33
80
0f
30
7c
19
b2
d0
a8
b6
58
82
d8
77
09
79
a5
70
1a
c6
02
f7
1b
72
a2
6b
82
52
5a
a6
7d
77
c7
5e
b6
87
1d
c0
19
b4
65
58
3a
25
0d
b4
70
49
06
18
7e
8d
fb
3b
70
72
69
88
f9
c5
2c
12
26
6c
63
91
d4
92
6c
b7
99
78
00
7c
a4
6e
f6
08
82
80
6f
fd
59
c6
4e
d7
03
33
98
9a
ac
51
86
99
04
40
b8
9c
3c
d1
36
3b
e4
04
70
6d
bb
63
a5
a0
07
a0
fa
c2
61
a0
28
8f
91
6f
af
0a
a4
e9
44
55
2f
10
80
1a
3a
5d
de
26
33
98
01
5c
c3
52
27
bd
17
11
35
62
51
aa
93
5a
89
bc
2e
3d
2c
08
e1
c9
a8
c1
e4
41
6f
30
3b
b7
3b
31
48
58
ca
4c
21
0c
95
92
83
fc
86
5b
02
77
68
c5
d6
04
7f
d3
6d
bc
bc
4e
df
3e
a5
cc
6a
50
cb
05
2b
cd
31

View File

@@ -0,0 +1,32 @@
01
21
cb
32
ac
d1
87
11
35
cb
34
e2
9c
1a
0e
26
cc
c0
01
b9
39
ea
fa
ac
c2
8f
13
f1
93
8d
bf
91

View File

@@ -0,0 +1,32 @@
63
df
b8
42
bf
76
7f
89
71
78
39
64
2a
9b
92
fc
cf
82
bf
46
a9
f3
9b
a1
a3
29
29
95
f3
f9
34
dc

View File

@@ -0,0 +1,768 @@
55
33
60
42
56
12
0d
54
80
65
76
94
13
b8
2f
b5
ab
d0
01
4e
7e
9f
10
49
2f
f1
5f
d4
5d
c7
82
b2
dc
4c
55
32
5f
cc
57
68
5f
13
4f
f7
e1
23
cf
02
8f
a7
b4
5d
cc
71
7c
f2
d7
b2
74
d8
f2
a8
b7
d1
ac
d6
63
53
a5
63
35
f4
82
ec
3d
04
50
4d
2e
05
2d
ed
28
11
2a
c7
41
0f
a8
e4
7f
0d
7c
5e
b1
d6
a2
9e
94
87
81
db
38
63
76
7b
7e
a8
7a
59
1e
0d
7e
a4
13
0c
1c
9f
a5
e8
14
2d
ab
f7
ee
8c
02
19
1c
df
1b
8c
80
4d
38
e2
b6
e4
44
5c
d8
fd
34
1a
63
ec
00
01
b9
d8
82
9d
4c
8f
5e
53
dc
6e
87
86
df
67
f4
ac
0b
b9
d1
88
f0
64
da
50
c1
fa
b3
96
55
10
a0
48
eb
6b
4a
a7
8a
85
1c
47
b1
06
42
9b
30
f8
a9
a3
b5
46
48
c8
b4
3d
cf
76
19
0b
bc
8c
66
a6
a3
6d
f7
b9
5a
e3
d9
78
4a
dd
87
58
23
5b
29
1c
0a
1d
b1
ba
80
54
12
e8
b9
2c
14
16
fb
e6
4c
42
db
12
38
30
ed
1b
d9
7e
69
e5
22
e4
82
e8
33
25
e9
e8
8a
d9
40
3f
7e
86
d8
8d
53
5e
39
1a
e4
cd
33
0e
e0
58
92
a1
14
e4
43
9b
59
b3
06
02
d9
d9
87
04
aa
55
30
5f
a1
f8
5b
23
d7
c3
b0
f3
06
54
c8
b7
cb
4c
e0
29
85
e6
cb
e9
a8
7c
f0
e9
99
a5
65
41
30
99
fd
fa
f5
77
84
5a
40
7c
d6
c2
ea
5e
de
db
04
ba
43
4d
80
e1
13
24
67
08
88
61
d6
51
99
81
8e
d4
ba
3a
09
5e
06
63
39
f3
53
39
48
77
e3
bf
79
26
28
8c
dd
37
ac
31
cd
b4
99
b5
eb
8c
a0
68
59
be
b5
c6
60
73
0f
a7
93
cf
11
34
7f
bf
ed
73
a8
2e
1d
2b
22
9a
09
59
32
79
ad
04
45
bc
11
b4
f1
64
d0
15
ec
51
41
da
dc
10
d3
22
c9
28
3e
5a
64
11
57
df
e5
3b
da
4c
3c
a7
36
46
99
df
0b
f7
94
d4
68
3f
b1
fd
ec
e8
e3
18
da
3f
f0
28
b6
3a
a7
d9
f5
0b
58
78
53
78
be
79
fc
7e
8a
2b
12
73
a8
d7
87
74
85
33
57
ae
c5
23
ef
7d
92
76
44
b0
7d
3d
0f
28
76
bf
0b
55
d4
59
2e
33
a6
58
c4
61
c9
6c
8b
81
cc
c2
b1
d4
8c
39
29
ad
99
4d
01
5a
e6
dc
4c
98
a7
54
16
76
7c
7b
a1
60
bf
74
91
b4
a0
aa
db
5e
43
a3
97
f6
3c
e1
cf
7f
91
64
79
f7
63
35
0c
54
dc
29
6a
22
31
4b
4f
48
4c
8c
22
e3
64
fc
e5
a6
ca
6e
15
0b
81
02
1b
44
b5
f4
9f
91
49
27
89
64
37
21
3d
0a
bc
ae
a2
80
62
db
28
54
13
8d
0e
0b
ec
84
1e
6b
e8
e0
39
b8
a0
d7
62
e6
0e
c8
b6
41
6d
fe
7c
7c
8e
d9
b7
41
59
08
b8
dd
9a
69
89
50
69
7f
a5
fa
a5
b1
92
6a
54
de
98
6a
00
93
da
97
6c
89
ed
bf
83
71
1a
4b
aa
bc
2c
21
c7
4f
2b
7f
e9
6a
aa
9e
b0
82
dd
66
e3
40
8c
d3
00
02
cd
bd
57
3d
27
f6
6a
80
6e
b0
b3
14
4c
42
7e
07
ef
7a
39
67
f0
4f
0a
43
36
f5
5e
8e
12
c6
3a
67
80
25
18
44
80
22
73
ac
90
1d
4f
6a
55
65
02
db
49
6d
4b
b4
61
09
be
1f
90
b7
ef
a7
6d
34
03
a3
bb
ec
6a
32
e8
e5
cf
4e
db
a3

View File

@@ -0,0 +1,800 @@
f5
e2
4e
4e
14
b6
65
36
65
ca
02
89
a3
72
8c
bb
a2
28
fe
11
67
26
c1
25
1e
99
92
a9
f0
06
09
34
64
5b
26
23
24
ac
b5
c6
b5
7d
26
e3
92
26
e2
2c
f0
c3
3f
7f
f5
a4
d9
79
23
4f
2b
79
49
f5
66
db
66
c3
5b
27
3d
c9
77
8a
64
f2
bc
fe
91
4c
0d
81
52
7d
41
8a
11
25
79
e5
d0
8b
1c
42
95
87
32
34
25
d7
a7
83
51
45
34
57
cd
86
83
45
af
a1
62
18
33
20
02
c9
5d
84
06
c1
49
38
c0
39
69
3d
6c
12
16
af
b9
98
30
99
03
11
09
be
01
93
a1
b6
e1
24
36
10
3f
dd
08
4a
7b
84
38
0a
cc
35
81
78
31
c0
55
8d
4f
80
82
ba
58
b9
17
48
41
a8
40
c2
96
48
53
65
6c
23
27
f7
95
21
32
c6
dd
12
9d
bf
50
23
ce
1b
3a
92
f7
73
6f
c1
95
28
b7
1d
21
a2
7c
3d
7b
74
51
d5
a8
fc
02
a7
86
f7
55
45
d2
45
15
49
bc
95
db
bb
87
72
4f
72
d2
ad
f1
d6
19
b1
b9
43
86
c1
4c
37
12
8c
2c
1c
60
f4
c0
2b
28
cc
53
6c
50
8a
37
0b
a9
a2
f4
61
8c
f1
c6
4f
35
56
84
f2
5a
6e
e9
9d
3f
89
ce
01
36
b4
7d
7b
26
f0
e6
a6
0c
c9
4f
c4
57
38
34
17
2a
3e
fb
84
c9
fb
66
40
1b
76
c9
00
07
e8
f7
b1
9b
51
32
92
13
8b
79
14
7a
36
46
80
db
cb
21
17
62
35
8c
d3
2a
3c
44
72
0d
f6
ba
22
dc
8d
30
19
c0
c4
80
3f
2a
56
7d
9e
bc
6a
5b
c0
12
d1
f6
34
71
98
91
da
13
24
ea
f2
28
37
92
64
b3
da
95
5d
aa
3a
2f
b8
83
68
94
c8
e8
00
06
78
21
41
25
7c
25
4d
90
5a
23
8a
6b
41
ac
3c
76
cb
87
ea
34
27
28
ea
6e
48
bc
66
81
68
42
ff
24
55
e8
5c
67
f8
c4
88
74
f4
69
bd
a5
6f
dd
83
a5
7d
d4
07
67
98
a3
d8
54
ce
40
bc
c6
b3
49
a1
98
fc
6f
a4
71
3c
94
79
49
46
e2
49
20
17
79
70
9a
b7
51
04
59
e2
fa
32
5b
b3
c8
16
b2
af
3d
9c
af
36
fa
5c
21
73
79
cf
eb
79
7a
90
80
fe
23
37
4f
a0
2f
04
7c
77
5c
b4
60
2b
78
59
f7
d7
9c
0a
f7
3f
11
b4
28
47
91
5b
3d
32
46
e1
04
40
31
f6
1b
aa
d9
87
f3
c6
cc
93
28
0b
23
c8
39
0e
48
a2
10
80
92
c7
b4
19
ba
e1
3a
e5
00
67
81
3a
99
b5
da
80
e5
80
05
c6
96
5f
fe
45
3a
e5
73
50
1b
24
21
24
51
52
57
c4
06
27
8c
2f
7f
39
45
74
89
44
45
c6
12
e4
11
4f
0a
60
40
4c
da
97
6f
a6
3b
9a
28
57
81
e0
ab
3d
77
ad
2b
00
2f
1c
88
5e
f7
46
61
02
43
b7
51
ab
4b
ce
a3
88
02
7c
41
06
3b
01
67
91
36
08
73
64
cf
db
13
92
fa
ab
b9
e2
0a
51
77
b9
4b
f5
a3
93
b7
bd
d8
3a
7d
82
34
31
73
b8
78
1b
44
33
44
84
35
4b
71
79
b2
25
aa
be
e9
9f
23
07
95
d1
fb
24
8a
a5
61
5e
85
c0
ad
b4
9b
7f
51
04
71
2b
86
d4
03
4d
45
79
75
d4
1b
7c
88
c0
66
4e
09
1e
47
e9
79
83
03
c3
90
15
83
c1
36
06
ee
d7
88
3a
53
7a
c0
e1
47
06
8b
8c
4a
c0
56
fb
a1
08
ff
10
83
a9
18
6e
c0
5b
33
86
27
a8
dc
e4
3e
5c
41
41
0c
d6
bb
35
a3
30
d2
0b
77
bb
3a
90
34
b4
e3
c4
43
bb
eb
41
b6
69
1f
11
ab
11

View File

@@ -0,0 +1,32 @@
34
b9
61
af
5d
62
54
af
72
c0
d5
0e
70
dd
9b
49
91
15
0c
cc
09
19
2a
a4
6f
19
53
d5
c2
9a
33
ec

View File

@@ -0,0 +1,32 @@
13
5b
97
48
c6
aa
6d
1a
e9
b5
42
0c
72
67
9f
f6
5c
ae
62
2b
8a
7d
f5
4c
d7
65
01
31
b5
fd
77
f8

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,32 @@
20
a7
b7
e1
0f
70
49
6c
c3
82
20
b9
44
de
f6
99
bf
14
d1
4e
55
cf
4c
90
a1
2c
1b
33
fc
80
ff
ff

View File

@@ -0,0 +1,32 @@
b4
08
d5
d1
15
71
3f
0a
93
04
7d
bb
ea
83
2e
43
40
78
76
86
d5
9a
9a
2d
10
6b
d6
62
ba
0a
a0
35

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,32 @@
01
21
cb
32
ac
d1
87
11
35
cb
34
e2
9c
1a
0e
26
cc
c0
01
b9
39
ea
fa
ac
c2
8f
13
f1
93
8d
bf
91

View File

@@ -0,0 +1,32 @@
8c
97
02
42
40
61
11
e2
63
68
ad
87
60
c4
d0
2a
8b
28
d1
7d
13
82
10
ad
c1
27
19
7b
50
96
81
40

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,32 @@
34
b9
61
af
5d
62
54
af
72
c0
d5
0e
70
dd
9b
49
91
15
0c
cc
09
19
2a
a4
6f
19
53
d5
c2
9a
33
ec

View File

@@ -0,0 +1,32 @@
c0
d4
57
64
e3
db
f0
94
8b
91
4d
6f
65
c9
2b
d0
eb
d2
15
56
e5
07
67
53
af
48
df
8f
ff
d6
ba
dc

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,32 @@
20
a7
b7
e1
0f
70
49
6c
c3
82
20
b9
44
de
f6
99
bf
14
d1
4e
55
cf
4c
90
a1
2c
1b
33
fc
80
ff
ff

View File

@@ -0,0 +1,32 @@
23
f2
11
b8
4a
6e
e2
0c
8c
29
f6
e5
31
4c
91
b4
14
e9
40
51
3d
38
0a
dd
17
bd
72
4a
b3
a1
3a
52

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,32 @@
01
21
cb
32
ac
d1
87
11
35
cb
34
e2
9c
1a
0e
26
cc
c0
01
b9
39
ea
fa
ac
c2
8f
13
f1
93
8d
bf
91

View File

@@ -0,0 +1,32 @@
26
22
50
3a
2a
54
4f
35
83
92
90
3e
6f
2a
dc
5a
2d
94
fe
01
05
83
b5
74
a5
4d
9a
7e
6d
22
3a
24

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,32 @@
34
b9
61
af
5d
62
54
af
72
c0
d5
0e
70
dd
9b
49
91
15
0c
cc
09
19
2a
a4
6f
19
53
d5
c2
9a
33
ec

View File

@@ -0,0 +1,32 @@
72
3a
b6
2b
92
58
0b
3d
ef
8c
e8
87
00
1e
ef
e4
d9
05
65
aa
ca
f5
43
0e
e2
aa
b7
de
cf
99
db
76

View File

@@ -0,0 +1,256 @@
cff
d00
000
001
d00
001
d00
d00
d00
d00
cff
d00
d00
000
000
000
001
000
000
001
d00
000
002
d00
d00
001
001
002
002
d00
001
001
000
d00
000
001
001
000
cff
000
d00
d00
000
000
cff
cff
000
d00
001
000
d00
d00
001
d00
d00
001
cff
000
001
d00
000
d00
002
001
000
002
d00
d00
d00
001
001
002
000
001
000
d00
000
d00
000
001
002
d00
cff
cff
d00
001
cff
000
000
002
001
001
d00
000
d00
d00
000
cff
002
d00
cff
000
000
d00
d00
001
001
d00
d00
000
cff
cff
cff
002
d00
d00
001
000
001
001
001
001
001
000
000
001
d00
002
cff
d00
001
000
000
001
000
d00
000
001
001
001
000
000
000
000
000
001
000
d00
d00
d00
000
000
d00
000
000
000
000
000
000
000
001
001
d00
000
d00
001
002
d00
000
d00
d00
001
d00
d00
000
d00
000
000
001
d00
002
001
d00
000
d00
000
002
000
d00
000
cff
002
d00
000
000
001
001
d00
d00
000
d00
002
000
d00
000
d00
001
001
d00
000
001
001
000
d00
000
000
d00
000
000
001
000
000
002
d00
d00
000
d00
002
001
d00
000
000
001
002
001
d00
002
001
001
000
d00
000
001
d00
cff
d00
001
cff
001
001
001
001
d00
001
000
d00

View File

@@ -0,0 +1,256 @@
d00
000
d00
000
d00
000
001
000
000
000
000
001
001
002
cff
d00
d00
002
d00
000
000
001
001
001
001
d00
000
000
000
000
000
000
000
000
d00
d00
000
001
002
d00
000
000
d00
000
001
001
000
001
001
000
002
d00
d00
000
001
000
001
000
000
000
001
002
000
000
000
001
d00
d00
002
001
001
000
000
000
d00
d00
000
000
d00
001
001
001
000
000
d00
000
001
d00
000
000
000
001
d00
cff
002
000
000
d00
d00
d00
000
000
cff
000
001
001
000
001
d00
002
001
cff
001
000
000
001
001
001
d00
000
000
001
000
000
001
000
000
001
d00
000
001
000
cff
000
002
001
001
001
001
000
d00
000
001
002
000
d00
000
000
cff
000
000
cff
001
002
d00
d00
000
000
001
d00
001
000
000
002
000
cff
001
d00
000
000
001
d00
d00
002
001
d00
002
000
d00
cff
000
000
d00
001
000
d00
001
001
001
002
001
000
cff
000
d00
001
000
d00
000
d00
000
d00
002
000
d00
001
001
d00
001
001
001
000
d00
d00
002
001
000
000
000
d00
001
001
000
000
001
cff
000
001
001
001
001
d00
000
001
000
000
000
000
000
001
001
001
cff
d00
cff
cff
d00
001
000
001
001
000
002
000
001
000

View File

@@ -0,0 +1,256 @@
cff
000
000
000
d00
002
d00
000
000
d00
d00
001
001
d00
d00
001
000
000
000
000
000
d00
001
002
001
001
001
000
002
000
001
002
d00
000
000
d00
000
001
d00
d00
001
000
d00
d00
d00
d00
d00
d00
001
001
001
001
001
000
001
001
001
000
cff
001
000
002
000
000
001
000
000
000
000
001
000
cff
000
d00
000
001
002
000
000
d00
d00
001
000
002
001
001
001
d00
d00
d00
000
d00
001
001
001
d00
001
000
000
000
d00
000
000
d00
001
001
001
001
000
001
001
d00
000
001
001
001
001
000
002
001
000
002
d00
000
d00
001
001
000
001
000
001
000
000
000
000
000
002
001
000
000
001
000
000
d00
d00
001
002
000
000
002
000
000
000
000
002
001
d00
000
d00
000
000
d00
d00
d00
000
000
002
000
d00
d00
000
001
001
000
000
d00
d00
d00
000
001
001
000
000
d00
000
000
001
d00
000
cff
000
d00
d00
d00
001
001
001
d00
000
000
000
d00
001
001
d00
cff
d00
000
d00
001
000
d00
000
001
d00
d00
001
001
001
001
001
000
001
d00
000
000
cff
000
001
000
001
000
000
000
000
001
d00
000
000
000
000
000
000
000
000
000
002
d00
001
001
002
000
d00
d00
000
000

View File

@@ -0,0 +1,256 @@
857
7b5
384
b79
827
564
1bc
873
391
113
431
91b
00e
22a
a9e
483
63d
2f5
a7a
057
af4
643
0f9
cc2
bce
2af
6a2
ad7
3f5
bcc
a37
6b3
77a
710
41d
698
9c2
7eb
0eb
9fe
8c6
a63
72f
403
3d9
530
bb5
28e
8b6
0c0
2bf
9ba
636
7c3
940
188
1e7
1f6
1ed
523
285
91c
c08
3c8
77a
9a9
bd6
7ca
cf1
452
7db
3f6
3e1
48c
197
cfc
219
666
65a
576
7f6
20d
c55
966
c36
856
9bf
448
11c
67c
59a
a3e
162
317
57d
ae4
c3d
739
577
755
58c
311
757
11e
75b
78f
088
a61
b31
8ff
ba3
842
65a
bdb
108
791
2e3
c6d
8a1
97d
5bc
882
bbb
423
9ec
6c5
70b
415
305
546
7d5
63a
204
0f3
6c8
c8b
2c4
a44
5b6
cb7
a80
019
18f
293
5b8
56f
421
b76
918
715
8e5
619
814
192
2a8
06f
0d7
93a
6d8
1b3
83a
5cb
415
0a4
1bf
b9f
18f
8a5
2e0
c75
5b5
59b
364
8c9
8e2
283
cf6
b81
243
2ae
8d9
32b
b15
cd7
6b0
8d2
36f
543
048
72b
4fb
c73
05d
402
87d
342
085
32c
745
3cf
959
3d4
9fa
90f
4bf
89e
0ed
a7f
c1a
036
731
67f
316
636
a45
828
a24
746
ab3
580
6dc
6e3
542
6a9
95a
aa0
7a7
a1f
c5c
1b2
049
768
830
134
076
294
392
549
19d
8ae
84b
881
8b9
81a
549
642
901
191
274
c50
24d
3f0
160
882
ce6
11a

View File

@@ -0,0 +1,256 @@
541
565
972
68c
0fb
416
1a8
6b2
0f3
3a4
604
94e
5c9
330
beb
56d
b19
883
019
421
525
c52
ab4
943
207
a89
1a1
3b9
04b
a86
33f
65b
a0f
b82
cbf
2a3
ac0
b3b
590
2cc
18c
cae
8c2
c4f
a70
aa4
7d1
20b
4bc
57d
5c5
a4d
176
90e
139
b5b
131
8d7
099
280
8c7
045
2d4
aea
c06
c41
b60
766
9fe
99f
57d
7f9
2ac
2c3
4b7
6aa
070
b84
c21
bcd
0dc
941
243
144
4fc
99b
7d2
72a
bde
a87
1ee
37e
cdb
1cf
a10
36c
27c
c15
6c5
c3a
2b7
6c8
c20
7f1
67f
c9d
7bf
31a
b2a
6c5
c4e
6a3
972
64a
548
0e5
69b
b43
441
a27
1b4
101
176
bd9
267
9b3
1d1
3f2
97b
492
c67
ccb
1fa
2f7
bd0
6b8
6d1
cbf
62d
cfe
b03
7d5
5e2
377
70c
657
48b
59c
c2c
c85
55a
c45
9b8
9e1
cb0
ae5
769
25c
b11
b24
4ba
9e6
cba
39a
031
607
05b
afd
a56
7ae
02e
b45
9c5
3bc
4f2
12d
4be
5f1
59b
488
b03
50e
c2a
2b4
271
0ad
b36
1e9
44b
85d
c92
bfa
bdc
3e9
c43
4ad
b67
4ce
773
627
14c
150
58a
931
49d
c60
2ba
2d1
c18
8e8
2a1
c0e
689
350
901
8a6
646
9f4
2f5
672
6df
079
910
4f7
0f8
a18
2f7
02c
2d9
27d
4ad
521
9fa
b77
b64
ce0
ad2
bdf
0fa
564
103
b98
bd2
96b
9b9
632
237
21b
99b
3b7
450
76f
50b
7de
81d
6a3

View File

@@ -0,0 +1,256 @@
b05
019
247
3b4
9a8
2d3
58a
3f0
201
110
62d
6fb
8d0
789
842
260
4a8
239
5a2
212
819
b2b
ccb
062
076
7e8
b62
adf
b26
282
4e2
38c
816
76f
022
6ca
a18
03b
292
394
a33
11b
a68
370
17b
c7e
20e
305
07d
9e7
9b0
a9d
aa1
610
87b
51a
701
6a7
7ef
905
79d
56a
cb0
ca9
43d
aef
8f8
170
633
5c4
a01
8a2
086
9d7
250
047
558
304
c3a
333
a60
788
a18
142
0d5
202
628
201
174
05c
9b9
46f
0f2
29b
2d6
786
30e
9f9
0d8
a2b
02d
884
c6d
7b7
cd9
445
04e
75e
812
3c0
1b5
ae1
bb3
aa1
bdf
5f0
6cb
b14
ce4
b35
c0c
797
392
c9d
b13
5d0
b33
065
166
5d7
4ba
bb8
7de
a8f
d00
8a8
a54
b99
5e8
c8d
254
b88
027
8a2
b2e
6be
06e
aee
121
24c
810
4ca
beb
970
41b
6cb
17b
552
345
3c4
4e0
942
113
a1b
91c
c83
529
c54
989
326
456
b35
189
6bb
1a8
c0c
781
714
9b0
04e
b4a
991
c97
a01
3eb
7b2
470
01f
a7c
beb
b64
5bf
43c
6c0
58e
132
6ed
79e
834
6a8
c2a
81e
685
3cc
939
2ae
098
b84
830
810
2f6
537
b35
06c
89d
729
33b
3eb
90a
af5
77f
92b
a00
0f4
6ee
7ed
034
ab3
01d
574
6f6
ce4
24d
104
4bf
767
bee
5d5
cc7
93d
346
227
13a
74c
0b5
cc0
3ea
890
50a
a36
765
5b2
268
943
a37
1ee

View File

@@ -0,0 +1,256 @@
d00
001
d00
001
002
cff
002
d00
003
000
000
000
d00
000
003
000
001
002
cff
cfe
cff
d00
001
cff
000
002
000
001
000
001
002
002
001
001
d00
cff
d00
001
001
002
002
001
000
000
000
002
000
d00
001
001
001
d00
001
000
cff
000
000
001
001
002
000
cff
003
000
cff
000
001
000
d00
cff
000
002
d00
003
001
d00
cff
002
cff
d00
d00
000
000
d00
000
d00
cff
cff
000
002
002
000
000
001
000
d00
003
001
cff
001
000
cff
001
001
001
d00
001
d00
001
d00
001
001
d00
001
000
000
000
000
002
d00
001
001
000
001
d00
000
cff
000
001
d00
001
d00
002
000
001
d00
cfe
001
001
001
001
000
001
002
d00
002
d00
cff
001
003
000
000
000
d00
002
001
001
000
000
000
cff
000
d00
001
d00
001
000
cff
001
002
002
d00
002
000
d00
001
002
cff
d00
002
001
000
000
000
001
000
000
d00
000
000
d00
000
cff
d00
000
d00
001
d00
002
001
000
000
d00
000
001
001
000
001
001
000
cff
000
000
002
002
000
000
001
000
002
001
001
cff
000
d00
d00
cff
000
002
001
000
000
000
002
000
000
d00
cff
000
d00
d00
d00
002
d00
002
003
000
001
d00
002
002
000
d00
000
002
002

View File

@@ -0,0 +1,256 @@
000
d00
d00
cff
000
cff
002
000
001
cff
002
001
001
d00
000
d00
001
d00
d00
d00
d00
001
001
d00
000
000
cff
000
d00
d00
001
001
000
000
001
001
001
000
d00
001
000
d00
cff
000
002
000
002
001
d00
000
000
d00
d00
000
002
cff
001
000
d00
001
001
000
d00
001
d00
000
000
d00
001
001
001
d00
d00
001
d00
001
001
cff
001
000
d00
d00
002
000
001
001
d00
d00
000
000
d00
002
d00
cff
d00
d00
cff
d00
002
cfe
001
002
001
001
d00
001
001
002
000
cff
d00
d00
cfe
000
d00
d00
001
000
002
cff
d00
cff
d00
000
cff
002
000
001
000
d00
001
d00
001
003
001
d00
000
000
001
002
000
001
d00
002
001
d00
000
001
cff
002
002
000
000
001
000
d00
000
000
001
002
001
d00
d00
d00
cff
d00
002
000
001
000
000
001
003
cff
000
000
d00
cff
000
d00
003
cff
cfe
d00
d00
002
002
001
000
d00
d00
000
d00
002
001
000
000
001
d00
d00
000
cff
000
002
000
002
000
d00
000
000
cff
000
000
001
d00
d00
003
000
001
001
cff
d00
000
000
002
d00
001
000
cff
003
000
002
001
000
001
cfe
003
001
000
001
002
d00
000
cff
001
000
000
001
000
cff
000
000
001
001
000
d00

View File

@@ -0,0 +1,256 @@
793
7a2
012
c51
c83
055
745
0d1
41c
4d5
29b
b80
485
19c
19b
462
c11
c32
84f
6ec
4aa
8aa
1cb
00f
359
298
a34
60f
8aa
342
c3a
301
55d
7c8
403
97f
544
8c1
34b
95e
a82
384
aa6
515
9f0
2fc
4ff
a4d
4f2
13b
64c
8f4
c7e
172
55e
809
9ff
360
182
3fd
101
078
804
82a
6f8
21d
bb1
19b
a3f
2df
632
9b0
cef
7f8
c29
1be
0f4
cc1
af3
31c
7c9
45e
92a
890
bec
2c5
42d
4bb
8ed
10d
050
2dc
9a3
006
36d
331
732
365
7f0
5d9
461
ab4
6a9
bbe
042
952
84f
0e2
67b
0d5
cd8
bad
8dd
8d6
c94
9d4
cbd
bf5
422
85b
031
45e
afb
061
a3f
718
b95
780
a5e
8d6
a36
13a
813
7f6
166
2ff
320
8c3
53a
115
7a7
c57
1b6
25a
ab1
55d
13d
ba7
62d
343
35c
69d
50c
3e0
066
c9a
a9e
bf5
b25
722
19b
821
95d
05b
6e1
3c1
6af
06e
5a4
c46
b10
2af
bf7
364
198
21b
654
35e
c6e
78b
b19
22e
82d
208
17b
a2b
1a1
ccb
770
362
242
a3e
82f
73d
409
83b
091
a70
776
2b1
880
ae5
98c
1c5
299
83b
4b0
850
7a5
bba
34b
7e0
2c6
c1a
5e5
861
474
8fc
54c
6fb
abf
3d7
99b
0e9
2bd
a05
215
a66
be8
55d
10b
ca1
5da
47a
1cd
9a9
a80
1c3
711
1fa
5eb
856
6ee
cae
0cf
532
529
801
30a
508
b07
cc5
c46
6a7
140
61b

View File

@@ -0,0 +1,256 @@
a0d
990
c4b
481
9e3
190
135
bfe
0d4
579
a7f
66a
863
20a
9a4
b18
7f8
492
909
b37
101
750
4b9
104
3f4
b6c
b80
139
144
09f
b5f
20b
0d5
b3c
a70
6df
c31
698
2e6
15c
2d2
148
2a4
572
a56
5d2
a3e
0c7
cc6
55e
6b7
cff
683
877
76e
10d
5d5
1bd
a9b
617
9ee
930
2dc
088
5ac
ce7
413
56c
422
478
51a
369
9b0
3c7
032
79e
9d0
043
95a
11a
6ca
c1d
981
07a
43e
4cc
c2d
08f
454
c74
2df
cf1
02c
6da
191
b51
61b
453
303
921
520
396
6f6
405
4ce
797
b9e
20f
cfb
a50
7c4
c82
bb1
402
276
c12
ae2
242
4d1
689
c8b
88c
835
360
866
5ea
66c
02b
af9
29f
905
783
9c1
9ff
500
4a1
984
bb0
a05
08d
636
8da
887
ab6
37e
7ae
7f3
06d
1e6
29b
942
72a
1e1
13e
6ac
4fe
a34
994
8db
bda
3c1
4ec
8b4
6d7
227
946
a62
9aa
163
6d6
96f
bb7
161
a7f
651
8e1
622
78d
60b
86b
8bd
031
246
55e
7a0
736
cc9
a07
2c3
58b
691
8c7
c13
381
49a
85d
c91
43b
86a
0fb
2a8
5b9
743
283
8a7
bef
be1
20d
a3a
b6d
42f
b91
501
bc8
0be
66b
3fe
994
418
440
6c2
8d1
995
980
800
8c6
0f4
6d2
c7f
cef
781
738
3ec
065
a50
b75
46a
4d1
ad8
377
3ee
a4a
3a2
5e9
29f
597
56a
c70
8dc
7c0
989
c5f
3c1
05a
497
afd

View File

@@ -20,6 +20,8 @@ xvlog -sv --relax -i . sync_rtl/poly_mul/basecase_mul.v
xvlog -sv --relax -i . sync_rtl/poly_mul/poly_mul_zeta_rom.v
xvlog -sv --relax -i . sync_rtl/poly_mul/poly_mul_sync.v
xvlog -sv --relax -i . sync_rtl/storage/sd_bram.v
xvlog -sv --relax -i . sync_rtl/common/pipeline_reg.v
xvlog -sv --relax -i . sync_rtl/comp_decomp/comp_decomp_sync.v
xvlog -sv --relax -i . sync_rtl/top/mlkem_top.v
# ---- Step 2: compile parametric KAT testbench ----

File diff suppressed because it is too large Load Diff