Research-Stack/hardware/tangnano9k/rtl/generated/Genome18Address.v

28 lines
1 KiB
Verilog

// Auto-generated from Lean: Semantics.Hardware.TangNano9K.emitGenome18Address
// Source of truth: Semantics.Genome18.addr
// Theorem: verilogAddr_eq_addr (forall g, verilogAddr g = g.addr)
// Theorem: addr_injective (Function.Injective addr)
// Theorem: addr_range (addr < 262144)
//
// DO NOT EDIT BY HAND. Regenerate via: lake exe tangnano9k_emitter
`timescale 1ns / 1ps
module Genome18Address (
input wire [2:0] muBin,
input wire [2:0] rhoBin,
input wire [2:0] cBin,
input wire [2:0] mBin,
input wire [2:0] neBin,
input wire [2:0] sigmaBin,
output wire [17:0] addr
);
// Each bin is 3-bit (0..7). The weights are exact powers of two
// so synthesis maps them to shifts; no multiplier DSP needed.
assign addr = ({15'd0, muBin} * 18'd32768) +
({15'd0, rhoBin} * 18'd4096) +
({15'd0, cBin} * 18'd512) +
({15'd0, mBin} * 18'd64) +
({15'd0, neBin} * 18'd8) +
{12'd0, sigmaBin};
endmodule