feat: add ML-KEM accelerator with AXI slave wrapper
Wrap mlkem_top in an AXI4 burst slave (mlkem_axi_slave) mapped to the freed FFT slot 6 at 0x1f400000 (virtual 0xbf400000). The core runs on sys_clk/2 (25 MHz); the wrapper handles the clock-domain crossing: start toggle->pulse, wait-stated byte-preload handshake, busy/done sync, and direct readback taps (ek/dk/ct/ss). CPU drives it via a register map (CTRL/STATUS/CONFIG, d/z/msg, preload + readback windows). Wire into soc_top on the existing axiOut_6 nets (no crossbar change), add mlkem_intr on intrpt[3]. Add sdk mlkem_test example running a KeyGen->Encaps->Decaps self-consistency round trip.
This commit is contained in:
@@ -604,6 +604,7 @@ wire axiOut_7_bready ;
|
||||
|
||||
wire confreg_int;
|
||||
wire matmul_intr;
|
||||
wire mlkem_intr;
|
||||
|
||||
AxiCrossbar_2x8 u_AxiCrossbar_2x8 (
|
||||
.clk ( sys_clk ),
|
||||
@@ -1035,8 +1036,8 @@ AxiCrossbar_2x8 u_AxiCrossbar_2x8 (
|
||||
|
||||
|
||||
core_top u_cpu(
|
||||
.intrpt ({5'd0, matmul_intr, dma_finish, confreg_int}), //high active
|
||||
// intrpt[2]=matmul, intrpt[1]=dma, intrpt[0]=confreg
|
||||
.intrpt ({4'd0, mlkem_intr, matmul_intr, dma_finish, confreg_int}), //high active
|
||||
// intrpt[3]=mlkem, intrpt[2]=matmul, intrpt[1]=dma, intrpt[0]=confreg
|
||||
|
||||
.aclk (cpu_clk ),
|
||||
.aresetn (cpu_resetn ), //low active
|
||||
@@ -1424,18 +1425,54 @@ axi_dvi u_axi_dvi (
|
||||
.video_blue ( video_blue )
|
||||
);
|
||||
|
||||
// slave 6 (FFT) removed — tie off
|
||||
assign fft_bid = 5'b0;
|
||||
assign fft_bresp = 2'b0;
|
||||
assign fft_bvalid = 1'b0;
|
||||
assign fft_rid = 5'b0;
|
||||
assign fft_rdata = 32'b0;
|
||||
assign fft_rresp = 2'b0;
|
||||
assign fft_rlast = 1'b0;
|
||||
assign fft_rvalid = 1'b0;
|
||||
assign fft_arready = 1'b1;
|
||||
assign fft_awready = 1'b1;
|
||||
assign fft_wready = 1'b1;
|
||||
// slave 6 - ML-KEM accelerator (0x1f400000, virtual 0xbf400000)
|
||||
// Bus runs at sys_clk; the core is internally clocked at sys_clk/2 (25 MHz).
|
||||
mlkem_axi_slave u_mlkem_axi_slave (
|
||||
.clk (sys_clk),
|
||||
.resetn (sys_resetn),
|
||||
|
||||
.s_axi_awid (fft_awid ),
|
||||
.s_axi_awaddr (fft_awaddr ),
|
||||
.s_axi_awlen (fft_awlen ),
|
||||
.s_axi_awsize (fft_awsize ),
|
||||
.s_axi_awburst (fft_awburst),
|
||||
.s_axi_awlock (fft_awlock ),
|
||||
.s_axi_awcache (fft_awcache),
|
||||
.s_axi_awprot (fft_awprot ),
|
||||
.s_axi_awvalid (fft_awvalid),
|
||||
.s_axi_awready (fft_awready),
|
||||
|
||||
.s_axi_wid (fft_wid ),
|
||||
.s_axi_wdata (fft_wdata ),
|
||||
.s_axi_wstrb (fft_wstrb ),
|
||||
.s_axi_wlast (fft_wlast ),
|
||||
.s_axi_wvalid (fft_wvalid),
|
||||
.s_axi_wready (fft_wready),
|
||||
|
||||
.s_axi_bid (fft_bid ),
|
||||
.s_axi_bresp (fft_bresp ),
|
||||
.s_axi_bvalid (fft_bvalid),
|
||||
.s_axi_bready (fft_bready),
|
||||
|
||||
.s_axi_arid (fft_arid ),
|
||||
.s_axi_araddr (fft_araddr ),
|
||||
.s_axi_arlen (fft_arlen ),
|
||||
.s_axi_arsize (fft_arsize ),
|
||||
.s_axi_arburst (fft_arburst),
|
||||
.s_axi_arlock (fft_arlock ),
|
||||
.s_axi_arcache (fft_arcache),
|
||||
.s_axi_arprot (fft_arprot ),
|
||||
.s_axi_arvalid (fft_arvalid),
|
||||
.s_axi_arready (fft_arready),
|
||||
|
||||
.s_axi_rid (fft_rid ),
|
||||
.s_axi_rdata (fft_rdata ),
|
||||
.s_axi_rresp (fft_rresp ),
|
||||
.s_axi_rlast (fft_rlast ),
|
||||
.s_axi_rvalid (fft_rvalid),
|
||||
.s_axi_rready (fft_rready),
|
||||
.intr (mlkem_intr)
|
||||
);
|
||||
|
||||
//slave 7 - matmul accelerator
|
||||
matmul_axi_slave u_matmul_axi_slave (
|
||||
|
||||
Reference in New Issue
Block a user