[Cryptech Tech] Test build of the Cryptech rosc entropy source
Павел Шатов
meisterpaul1 at yandex.ru
Mon Apr 13 22:58:16 UTC 2015
On 13.04.2015 16:36, Joachim Strömbergson wrote:
>
> For Xilinx Spartan-6 one can see that the feedback path from carry out
> to carry in is always connected outside the FPGA logic block (the
> slice). This means that the intrinsic delay and thus the frequency of
> the oscillator is affected by routing for a given oscillator. This also
> means that the oscillators in separate builds of the same design for the
> same type of FPGA device may vary since placement can vary based on P&R
> seed.
>
> For operands that are one or two bits, the adder is implemented in a
> single slice. For three bit operands and more, the adder is split onto
> more than one slice. This introduces more routing effects on the
> oscillator frequency.
Well, you can use LOC constraint to enforce placement. Let's lock
location of LED blink counter in novena_base design, for example.
First of all, we need to find out where ISE initially placed our
register. You can use FPGA Editor to find out target slice coordinates
(fpga_site.png) Use filter to quickly find target register, double-click
it and then click that red box on the left to display its actual
location in the status bar. In my case it is "SLICE_X49Y107".
Then we need to find out, how our register was named during synthesis.
Click Tools->Schematic Viewer->Technology->Start with Explorer Wizard.
Use filter to quickly find target register. In my case it is named
"led/cnt_0" (fpga_net.png)
If I'm happy with location of SLICE_X49Y107, I can use the following
constraint in my UCF file to enforce placement of register "led/cnt_0"
into this slice:
INST "led/cnt_0" LOC = "SLICE_X49Y107" ;
After this the same LOC constraint should be created for BUFG that is
clocking this register. If you only lock target slice, ISE may place
clock buffer in different parts of the chip, this will lead to different
clock path delays.
If your design passes Translate step without errors, then your LOC
constraint was successfully applied. If you specify non-existent
register of invalid target location, your project will not compile,
because Translate will stop with an error.
One more thing to consider is that enforcing placement may not be enough
to always get consistent results. In Spartan-6 every slice has 8
registers. LOC constraint can't control placement within a slice, so
your target register can end up in different parts of a slice. I don't
know whether it matters or not, because I don't know how slices are laid
out in silicon. Another thing to keep in mind is that if your design is
large, ISE can decide to reuse free registers in your target slice for
something else. You may want to instantiate slices directly to prevent
ISE from stuffing unwanted logic in it.
--
With best regards,
Pavel Shatov
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fpga_site.png
Type: image/png
Size: 136872 bytes
Desc: not available
URL: <https://lists.cryptech.is/archives/tech/attachments/20150414/bb4e68a5/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fpga_net.png
Type: image/png
Size: 216186 bytes
Desc: not available
URL: <https://lists.cryptech.is/archives/tech/attachments/20150414/bb4e68a5/attachment-0003.png>
More information about the Tech
mailing list