zachbe / digial-ising

An all-digital, ring-oscillator-based Ising solver.
MIT License
14 stars 2 forks source link

Leverage manual routing to improve performance #27

Open zachbe opened 4 months ago

zachbe commented 4 months ago

It'll be a lot of work, but manual routing may significantly increase system stability and performance.

https://docs.amd.com/r/en-US/ug904-vivado-implementation/Routing-Assignment-Window

WeustiS commented 4 months ago

https://docs.amd.com/r/en-US/ug903-vivado-using-constraints/About-Relatively-Placed-Macros

WeustiS commented 4 months ago

ie:

(* RLOC = "X0Y0" *) FD sr0 (.C(clk), .D(d[0]), .Q(y[0]));
(* RLOC = "X0Y1" *) FD sr1 (.C(clk), .D(d[1]), .Q(y[1]));
(* RLOC = "X0Y2" *) FD sr2 (.C(clk), .D(d[2]), .Q(y[2]));
(* RLOC = "X0Y3" *) FD sr3 (.C(clk), .D(d[3]), .Q(y[3]));
(* RLOC = "X0Y4" *) FD sr4 (.C(clk), .D(d[4]), .Q(y[4]));
(* RLOC = "X0Y5" *) FD sr5 (.C(clk), .D(d[5]), .Q(y[5]));
(* RLOC = "X0Y6" *) FD sr6 (.C(clk), .D(d[6]), .Q(y[6]));
(* RLOC = "X0Y7" *) FD sr7 (.C(clk), .D(d[7]), .Q(y[7]));

becomes image

WeustiS commented 4 months ago

I still don't have a great visual image of what the high level design looks like, but it certainly seems like HU_SETS an/or BEL placements can get you pretty close to what you need. Don't forget to either mark the important cells as DONT_TOUCH or don't run phys opt/opt stages in your dcp generating tcl script. Vivado will probably be smart with the routing if you're smart with the placements, but certainly double check the DCP. In fact, if you have a DCP handy I'd like to poke around at it (can you attach the file to this github issue?)