| 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 |