blob: 8202ae73f3dcf3d0f8a28e5e498a99fdca1db7d4 [file] [log] [blame]
module config_tile #(
parameter COMB_N = 4236,
parameter MEM_N = 132
) (
input clk,
input rst,
input shift_enable,
output [COMB_N-1:0] comb_config,
output [MEM_N-1:0] mem_config,
output comb_set, // Set signal from set_soft or set_hard depending on which one you're using.
output mem_set, // Gated by second configuration bit, controls whether you set configuration values.
input set_soft, // From fabric.
input set_hard, // From tile/column.
input shift_in_hard,
input shift_in_soft,
output shift_out
);
wire set_internal;
wire shift_in_internal;
wire mem_ctrl;
wire input_mux;
assign shift_in_internal = input_mux ? shift_in_soft : shift_in_hard;
assign set_internal = input_mux ? set_soft : set_hard;
assign mem_set = (~mem_ctrl) & set_internal;
assign comb_set = set_internal;
wire [1:0] internal_config_inter;
config_latch #(.LENGTH(2)) internal_config (
.clk(clk),
.rst(rst),
.set(set_internal),
.shifter_data(internal_config_inter),
.config_bits({input_mux, mem_ctrl})
);
wire comb_mem_bridge;
shift_chain #(.LENGTH(COMB_N + 2)) comb_shifter (
.clk(clk),
.rst(rst),
.shift_enable(shift_enable),
.shift_in(shift_in_internal),
.shift_out(comb_mem_bridge),
.config_data({internal_config_inter, comb_config})
);
shift_chain #(.LENGTH(MEM_N)) mem_shifter (
.clk(clk),
.rst(rst),
.shift_enable(shift_enable),
.shift_in(comb_mem_bridge),
.shift_out(shift_out),
.config_data(mem_config)
);
endmodule