Since you are targeting Virtex parts, you can use the Xilinx RLOC
attributes to place your logic in a relative way. I know this can be
done from VHDL and Verilog, but I know nothing about JHDL. Can JHDL
provide attributes in a way that the Xilinx software can understand?
Hi,
This may sound like an odd thing to want to do, but is there anyway to take
an EDIF file, have it mapped and placed and then turn it back into an EDIF
file? Specifically I want to be able to do this targeting a Virtex FPGA.
The reason I want to do this, is that I'm developing a design in JHDL, which
seems to provide a nice interface for placing blocks of logic. For example,
I can write 'place(blockA, RIGHT_OF, logicB)'. The catch seems to be, that
for this to work blockA and blockB have to already have all their internal
wires and logic placed. While technically I could do this manually, it is
infeasible for the project I'm working on.
So I'm hoping there might be some way I can take advantage of another
feature of JHDL, which is the ability to parse and translate EDIF into a
JHDL representation. Then perhaps there is some way I can have the EDIF
placed for me by external tools.
Is it the case that I'm simply asking for the impossible, wanting to place
blocks logic relative to other logic blocks in a reasonably high-level and
abstract way when targeting an FPGA?
The problem with using RLOCs directly, firstly is that (as far as I
understand them anyway) they only let me place individual logic elements like
flip-flops for example. They won't let me place a macro-block which contains
two multipliers and an adder for example. Not at least without first
manually placing all the sub-elements of the multipliers and adder
anyway, which brings me back to my original problem.
The second problem is that RLOCs require relative co-ordinates specified in
rows, columns and slice. This is useless if I want to say "put large logic A
right of large logic B" or even perhaps "put small logic A and the bottom
left hand corner of large logic B". In theory this should be possible in
JHDL.
At least this is my understanding, please correct me if I am wrong.
- Jake
Everything you want placed has to have RLOCs down to the primitive. RLOCs are
hierarchical (unlike most of the rest of the xilinx tools, but that is another
story).
You can construct larger macros out of smaller ones, by putting an RLOC on a
placed macro. I use this capability extensively to build up large placed designs
in
relatively short time (you can see examples on the gallery page of my website at
http://www.andraka.com/gallery.htm ). The constructed macros are relatively
placed
within themselves, but the macro will 'float' allowing it to be picked up and
placed
absolutely either in floorplanning or automatically by the tools.
A different approach would be to use the Floorplanner feature which
generates a reusable RPM core. You have the option of generating UCF
constraints or a fully annotated core in NGC format (a binary file
similar to the NGO file). Then as Ray mentioned you can add RLOCs
throughout the hierarchy to further manipulate the relative placement.
http://toolbox.xilinx.com/docsan/xilinx ... lanner.htm
I honestly don't understand your constraints. How do you plan to
express your relative constraints if you don't want to put them in the
EDIF file? What is your input format? Are you saying that you don't
want to add the RLOCs, but rather you want the Xilinx tools to do it and
then reproduce your original EDIF file with the RLOCs?
Perhaps you could explain your intended tool flow more clearly. Like
Denzel Washington said in "Philadelphia", "explain it to me like I'm a 6
year old". :)
Unfortunately this again brings me back to the crux of my problem, which is
that in future I may have some macro blocks only available to me as EDIF.
Manually annotating each primitive in the EDIF with RLOCs, really isn't
feasible : )
Is there really no way at all that it is possible to use for example the
Xilinx map and par tools to map and relatively place a design and then
provide this in an EDIF form (possibly via some transformation utility)?
If this really is impossible, is there some automated/programmable way I can
modify a placed & routed design from the Xilinx tools, and then re-p&r them
to take into account the changes?
Thanks,
- Jake
Unfortunately this again brings me back to the crux of my problem, which is
that in future I may have some macro blocks only available to me as EDIF.
Manually annotating each primitive in the EDIF with RLOCs, really isn't
feasible : )
Is there really no way at all that it is possible to use for example the
Xilinx map and par tools to map and relatively place a design and then
provide this in an EDIF form (possibly via some transformation utility)?
If this really is impossible, is there some automated/programmable way I can
modify a placed & routed design from the Xilinx tools, and then re-p&r them
to take into account the changes?
Rickman,
Since you are targeting Virtex parts, you can use the Xilinx RLOC
attributes to place your logic in a relative way. I know this can be
done from VHDL and Verilog, but I know nothing about JHDL. Can JHDL
provide attributes in a way that the Xilinx software can understand?
Ultimately, the place functions in JHDL map down to RLOC properties in the
EDIF output. I could also explicitly annotate things with EDIF properties if
I wanted.
The problem with using RLOCs directly, firstly is that (as far as I
understand them anyway) they only let me place individual logic elements like
flip-flops for example. They won't let me place a macro-block which contains
two multipliers and an adder for example. Not at least without first
manually placing all the sub-elements of the multipliers and adder
anyway, which brings me back to my original problem.
The second problem is that RLOCs require relative co-ordinates specified in
rows, columns and slice. This is useless if I want to say "put large logic A
right of large logic B" or even perhaps "put small logic A and the bottom
left hand corner of large logic B". In theory this should be possible in
JHDL.
At least this is my understanding, please correct me if I am wrong.
Bret,
A different approach would be to use the Floorplanner feature which
generates a reusable RPM core. You have the option of generating UCF
constraints or a fully annotated core in NGC format (a binary file
similar to the NGO file). Then as Ray mentioned you can add RLOCs
throughout the hierarchy to further manipulate the relative placement.
http://toolbox.xilinx.com/docsan/xilinx ... lanner.htm
Yes! this seems to be what I want to do thanks.
The only thing missing is annotating the EDIF file directly with the
constraints generated by the Floorplanner in UCF format. I think I can
probably manage writing a tool to do this though.
Thanks,
- Jake
I'm glad you liked the idea. I'm not yet clear on why the RLOCs need to
be annotated back into the EDIF netlist. An easier option would be to
just copy the UCF constraints to an NCF file with the same name as the
EDIF file. From a Xilinx tool perspective, that is identical to the
constraints being in the netlist.
Bret,
A different approach would be to use the Floorplanner feature which
generates a reusable RPM core. You have the option of generating UCF
constraints or a fully annotated core in NGC format (a binary file
similar to the NGO file). Then as Ray mentioned you can add RLOCs
throughout the hierarchy to further manipulate the relative placement.
http://toolbox.xilinx.com/docsan/xilinx ... lanner.htm
The only thing missing is annotating the EDIF file directly with the
constraints generated by the Floorplanner in UCF format. I think I can
probably manage writing a tool to do this though.
http://toolbox.xilinx.com/docsan/xilinx6/help/floorplanner/floorplanner.htm
It doesn't work very well ... yet. I have a couple of webcases open on
that, and hopefully Xilinx are working to fix some of the problems.
The only thing missing is annotating the EDIF file directly with the
constraints generated by the Floorplanner in UCF format. I think I can
probably manage writing a tool to do this though.
This MAY be possible. The floorplanner writes an UCF for the RPM, and
(assuming that UCF works) can invoke "NGCbuild" to back-annotate the
placement information into the proprietary NGC file from the XST
synthesis tool.
There is an "NGC2EDIF" tool which I have used to verify that the
resulting NGC tool contained valid placement info from the above process
- its EDIF output did - while trying to debug the above approach.
So if you can convert from EDIF to NGC in the first place, there is the
basis for a loop. I haven't tried the EDIF flow so can't comment, though
it's interesting that NGC2EDIF is present but NGD2EDIF is now
unsupported.
Users browsing this forum: No registered users and 0 guests