diff --git a/fuzzers/005-tilegrid/generate_iob.tcl b/fuzzers/005-tilegrid/generate_iob.tcl index 0ea201e0..4b1127f5 100644 --- a/fuzzers/005-tilegrid/generate_iob.tcl +++ b/fuzzers/005-tilegrid/generate_iob.tcl @@ -19,11 +19,16 @@ proc loc_iob_old {} { proc loc_iob {} { # Get all possible sites - set duts [make_iob_sites] + # set duts [make_iob_sites] + # set dut_sites [get_sites -of_objects [get_pblocks roi] -filter {SITE_TYPE =~ RAMBFIFO36E1*}] + #set duts [get_sites -filter {SITE_TYPE =~ IOB33*}] + set duts [get_bels -filter {TYPE =~ PAD}] + # Sort them into CMT columns set dut_columns [group_dut_cols $duts 75] # Assign one from each - return [loc_dut_col_bels $dut_columns {di[} {]} ] + write_checkpoint -force tmp.dcp + return [loc_dut_col_bels $dut_columns {di_bufs[} {].ibuf} ] } proc write_iob { selected_iobs } { diff --git a/fuzzers/005-tilegrid/top.v b/fuzzers/005-tilegrid/top.v index 0d321e3f..3f9bb6ce 100644 --- a/fuzzers/005-tilegrid/top.v +++ b/fuzzers/005-tilegrid/top.v @@ -15,6 +15,14 @@ module top(input clk, stb, [DIN_N-1:0] di, output do); parameter integer DIN_N = `N_DI; parameter integer DOUT_N = `N_LUT + `N_BRAM; + wire [DIN_N-1:0] di_buf; + genvar i; + generate + for (i = 0; i < `N_LUT; i = i+1) begin:di_bufs + IBUF ibuf(.I(di[i]), .O(di_buf[i])); + end + endgenerate + reg [DIN_N-1:0] din; wire [DOUT_N-1:0] dout; @@ -22,7 +30,7 @@ module top(input clk, stb, [DIN_N-1:0] di, output do); reg [DOUT_N-1:0] dout_shr; always @(posedge clk) begin - din_shr <= {din_shr, di}; + din_shr <= {din_shr, di_buf}; dout_shr <= {dout_shr, din_shr[DIN_N-1]}; if (stb) begin din <= din_shr; @@ -34,7 +42,7 @@ module top(input clk, stb, [DIN_N-1:0] di, output do); roi roi ( .clk(clk), - .din(din), + .din(din[7:0]), .dout(dout) ); endmodule diff --git a/fuzzers/005-tilegrid/util.tcl b/fuzzers/005-tilegrid/util.tcl index 523678e4..e43b3eea 100644 --- a/fuzzers/005-tilegrid/util.tcl +++ b/fuzzers/005-tilegrid/util.tcl @@ -48,16 +48,18 @@ proc loc_dut_col_bels { dut_columns cellpre cellpost } { set dut_index 0 dict for {column duts_in_column} $dut_columns { - set selected_dut_bel_str [min_ysite $duts_in_column] - set selected_dut_bel [get_bels $selected_dut_bel_str] - set selected_dut_site [get_sites -of_objects $selected_dut_bel] + set sel_bel_str [min_ysite $duts_in_column] + set sel_bel [get_bels $sel_bel_str] + if {"$sel_bel" == ""} {error "Bad bel $sel_bel from bel str $sel_bel_str"} + set sel_site [get_sites -of_objects $sel_bel] + if {"$sel_site" == ""} {error "Bad site $sel_site from bel $sel_bel"} set cell [get_cells $cellpre$dut_index$cellpost] - puts "LOCing cell $cell to site $selected_dut_site (from bel $selected_dut_bel)" - set_property LOC $selected_dut_site $cell + puts "LOCing cell $cell to site $sel_site (from bel $sel_bel)" + set_property LOC $sel_site $cell set dut_index [expr $dut_index + 1] - lappend ret_bels $selected_dut_bel + lappend ret_bels $sel_bel } return $ret_bels