Phase 2.1: Merged Path00+Path01 NTT engine. - barrett_mul.v: Barrett modular multiplication (a·b mod 3329) - butterfly_unit.v: Cooley-Tukey/Gentleman-Sande butterfly - zeta_rom.v: 128-entry ROM with bit-reversed roots of unity - ntt_core.v: 7-layer NTT FSM, 256×12-bit register file - ntt_sync.v: valid/ready streaming wrapper Verified: 13/13 vectors bit-exact vs Python NTT/NTTInverse
142 lines
5.0 KiB
Verilog
142 lines
5.0 KiB
Verilog
// zeta_rom.v - Precomputed Zeta ROM for ML-KEM NTT
|
|
//
|
|
// Stores 128 bit-reversed roots of unity for Z_q (q=3329).
|
|
// Address 0..127, each entry is a 12-bit value.
|
|
// Pure combinational, single continuous assignment.
|
|
|
|
module zeta_rom (
|
|
input [6:0] addr, // 0..127
|
|
output [11:0] zeta
|
|
);
|
|
assign zeta =
|
|
(addr == 7'd0) ? 12'd1 :
|
|
(addr == 7'd1) ? 12'd1729 :
|
|
(addr == 7'd2) ? 12'd2580 :
|
|
(addr == 7'd3) ? 12'd3289 :
|
|
(addr == 7'd4) ? 12'd2642 :
|
|
(addr == 7'd5) ? 12'd630 :
|
|
(addr == 7'd6) ? 12'd1897 :
|
|
(addr == 7'd7) ? 12'd848 :
|
|
(addr == 7'd8) ? 12'd1062 :
|
|
(addr == 7'd9) ? 12'd1919 :
|
|
(addr == 7'd10) ? 12'd193 :
|
|
(addr == 7'd11) ? 12'd797 :
|
|
(addr == 7'd12) ? 12'd2786 :
|
|
(addr == 7'd13) ? 12'd3260 :
|
|
(addr == 7'd14) ? 12'd569 :
|
|
(addr == 7'd15) ? 12'd1746 :
|
|
(addr == 7'd16) ? 12'd296 :
|
|
(addr == 7'd17) ? 12'd2447 :
|
|
(addr == 7'd18) ? 12'd1339 :
|
|
(addr == 7'd19) ? 12'd1476 :
|
|
(addr == 7'd20) ? 12'd3046 :
|
|
(addr == 7'd21) ? 12'd56 :
|
|
(addr == 7'd22) ? 12'd2240 :
|
|
(addr == 7'd23) ? 12'd1333 :
|
|
(addr == 7'd24) ? 12'd1426 :
|
|
(addr == 7'd25) ? 12'd2094 :
|
|
(addr == 7'd26) ? 12'd535 :
|
|
(addr == 7'd27) ? 12'd2882 :
|
|
(addr == 7'd28) ? 12'd2393 :
|
|
(addr == 7'd29) ? 12'd2879 :
|
|
(addr == 7'd30) ? 12'd1974 :
|
|
(addr == 7'd31) ? 12'd821 :
|
|
(addr == 7'd32) ? 12'd289 :
|
|
(addr == 7'd33) ? 12'd331 :
|
|
(addr == 7'd34) ? 12'd3253 :
|
|
(addr == 7'd35) ? 12'd1756 :
|
|
(addr == 7'd36) ? 12'd1197 :
|
|
(addr == 7'd37) ? 12'd2304 :
|
|
(addr == 7'd38) ? 12'd2277 :
|
|
(addr == 7'd39) ? 12'd2055 :
|
|
(addr == 7'd40) ? 12'd650 :
|
|
(addr == 7'd41) ? 12'd1977 :
|
|
(addr == 7'd42) ? 12'd2513 :
|
|
(addr == 7'd43) ? 12'd632 :
|
|
(addr == 7'd44) ? 12'd2865 :
|
|
(addr == 7'd45) ? 12'd33 :
|
|
(addr == 7'd46) ? 12'd1320 :
|
|
(addr == 7'd47) ? 12'd1915 :
|
|
(addr == 7'd48) ? 12'd2319 :
|
|
(addr == 7'd49) ? 12'd1435 :
|
|
(addr == 7'd50) ? 12'd807 :
|
|
(addr == 7'd51) ? 12'd452 :
|
|
(addr == 7'd52) ? 12'd1438 :
|
|
(addr == 7'd53) ? 12'd2868 :
|
|
(addr == 7'd54) ? 12'd1534 :
|
|
(addr == 7'd55) ? 12'd2402 :
|
|
(addr == 7'd56) ? 12'd2647 :
|
|
(addr == 7'd57) ? 12'd2617 :
|
|
(addr == 7'd58) ? 12'd1481 :
|
|
(addr == 7'd59) ? 12'd648 :
|
|
(addr == 7'd60) ? 12'd2474 :
|
|
(addr == 7'd61) ? 12'd3110 :
|
|
(addr == 7'd62) ? 12'd1227 :
|
|
(addr == 7'd63) ? 12'd910 :
|
|
(addr == 7'd64) ? 12'd17 :
|
|
(addr == 7'd65) ? 12'd2761 :
|
|
(addr == 7'd66) ? 12'd583 :
|
|
(addr == 7'd67) ? 12'd2649 :
|
|
(addr == 7'd68) ? 12'd1637 :
|
|
(addr == 7'd69) ? 12'd723 :
|
|
(addr == 7'd70) ? 12'd2288 :
|
|
(addr == 7'd71) ? 12'd1100 :
|
|
(addr == 7'd72) ? 12'd1409 :
|
|
(addr == 7'd73) ? 12'd2662 :
|
|
(addr == 7'd74) ? 12'd3281 :
|
|
(addr == 7'd75) ? 12'd233 :
|
|
(addr == 7'd76) ? 12'd756 :
|
|
(addr == 7'd77) ? 12'd2156 :
|
|
(addr == 7'd78) ? 12'd3015 :
|
|
(addr == 7'd79) ? 12'd3050 :
|
|
(addr == 7'd80) ? 12'd1703 :
|
|
(addr == 7'd81) ? 12'd1651 :
|
|
(addr == 7'd82) ? 12'd2789 :
|
|
(addr == 7'd83) ? 12'd1789 :
|
|
(addr == 7'd84) ? 12'd1847 :
|
|
(addr == 7'd85) ? 12'd952 :
|
|
(addr == 7'd86) ? 12'd1461 :
|
|
(addr == 7'd87) ? 12'd2687 :
|
|
(addr == 7'd88) ? 12'd939 :
|
|
(addr == 7'd89) ? 12'd2308 :
|
|
(addr == 7'd90) ? 12'd2437 :
|
|
(addr == 7'd91) ? 12'd2388 :
|
|
(addr == 7'd92) ? 12'd733 :
|
|
(addr == 7'd93) ? 12'd2337 :
|
|
(addr == 7'd94) ? 12'd268 :
|
|
(addr == 7'd95) ? 12'd641 :
|
|
(addr == 7'd96) ? 12'd1584 :
|
|
(addr == 7'd97) ? 12'd2298 :
|
|
(addr == 7'd98) ? 12'd2037 :
|
|
(addr == 7'd99) ? 12'd3220 :
|
|
(addr == 7'd100) ? 12'd375 :
|
|
(addr == 7'd101) ? 12'd2549 :
|
|
(addr == 7'd102) ? 12'd2090 :
|
|
(addr == 7'd103) ? 12'd1645 :
|
|
(addr == 7'd104) ? 12'd1063 :
|
|
(addr == 7'd105) ? 12'd319 :
|
|
(addr == 7'd106) ? 12'd2773 :
|
|
(addr == 7'd107) ? 12'd757 :
|
|
(addr == 7'd108) ? 12'd2099 :
|
|
(addr == 7'd109) ? 12'd561 :
|
|
(addr == 7'd110) ? 12'd2466 :
|
|
(addr == 7'd111) ? 12'd2594 :
|
|
(addr == 7'd112) ? 12'd2804 :
|
|
(addr == 7'd113) ? 12'd1092 :
|
|
(addr == 7'd114) ? 12'd403 :
|
|
(addr == 7'd115) ? 12'd1026 :
|
|
(addr == 7'd116) ? 12'd1143 :
|
|
(addr == 7'd117) ? 12'd2150 :
|
|
(addr == 7'd118) ? 12'd2775 :
|
|
(addr == 7'd119) ? 12'd886 :
|
|
(addr == 7'd120) ? 12'd1722 :
|
|
(addr == 7'd121) ? 12'd1212 :
|
|
(addr == 7'd122) ? 12'd1874 :
|
|
(addr == 7'd123) ? 12'd1029 :
|
|
(addr == 7'd124) ? 12'd2110 :
|
|
(addr == 7'd125) ? 12'd2935 :
|
|
(addr == 7'd126) ? 12'd885 :
|
|
12'd2154;
|
|
|
|
endmodule
|