This Week's Goals:
My first step is to
get VPR to operate on FPGAs in which some channels are wider than others.
Approach 1 - VPR requires an input file with the
extension .arch that describes the structure of the FPGA being used. I will
see if FPGAs with varrying channel sizes can be described by modifying
a .arch file rather than VPR's code.
Approach 2 - When VPR reads the .arch file, it stores
information about the FPGA being used in a data structure called a routing resource
graph. I will find the part of the code where the routing resource graph
is built and modify the fields describing channel width.
Approach 3 - I will trace through the code to find out where
the currently implemented options for unusual channel structures are converted
into actual channel widths, and modify channel widths in this location.
We want VPR to choose several logic blocks from the netlist being placed and routed and place them together to represent a hard macro. The blocks comprising the hard macro should not be particularly related to eachother or to other blocks near the hard macro so that there will be a lot of connections between the hard macro and the rest of the FPGA (as would occur with a real hard macro).
VPR's placer works by originally placing all logic blocks randomly, and then gradually moving the blocks into positions where adjacent blocks are very related and have as few connections as possible to far away blocks. To create our hard macro, in the part of the FPGA where the hard macro will be, we want the original random logic blocks to remain and not be replaced by the placing algorithm by blocks that are more related to eachother. I need to modify VPR so that the placer will not move logic blocks that will be part of a hard macro.
|
Progress Toward Goals:
Completed Friday:
Abandoned Last Week - This method is not sufficient because it can only widen
multiple channels if they are adjacent. There is no .arch file that could describe
an FPGA with two non-adjacent wide channels with normal sized channels between them.
Abandoned Wednesday - Unfortunately, this approach does not work. VPR's routing algorithm experiments
to find the smallest possible width each channel could have and uses this value
in its final output. During this experimentation, it overwrites the value originally
stored in "capacity" for each channel. Thus, modifying the graph as it is built does
not effect the final contents of the graph (at least not as desired).
VPR can run in a mode where this experimentation is disabled and specific
channel widths are specified as inputs. If only this mode of operation were desired,
this method might have been successful. However we do not want to disable this experimentation.
Completed Friday - By tracing where the information
from the .arch file goes within the VPR code, I located the method that
is repeatedly called during the routing algorithm to set channel sizes.
I modified this function so that now the width of arbitrary channels can
be chosen as desired.
VPR has two routing algorithms. The channel width modification causes problems
with the one algorithm, but not the other, so now it is necessary to use the second
algorithm. We may try to make this modification compatible with the first algorithm
as well, if time permits.
In Progress at End of Week - A former student working with my
mentor already wrote code performing either
this task or a very similar task in VPR. My mentor is finding me this code so I can
either use it directly or use it as a model in making this modification.
|