EDK : FSL macros defined by Xilinx are wrong

On 2017/04/11 7:26 PM, John Larkin wrote:
On Tue, 11 Apr 2017 21:09:52 -0400, krw@notreal.com wrote:

On Mon, 10 Apr 2017 20:06:57 -0700, John Larkin
jjlarkin@highlandtechnology.com> wrote:

On Mon, 10 Apr 2017 22:15:50 -0400, krw@notreal.com wrote:

On Mon, 10 Apr 2017 18:13:13 -0700, John Larkin
jjlarkin@highland_snip_technology.com> wrote:

We have a ZYNQ whose predicted timing isn't meeting decent margins.
And we don't want a lot of output pin timing variation in real life.

We can measure the chip temperature with the XADC thing. So, why not
make an on-chip heater? Use a PLL to clock a bunch of flops, and vary
the PLL output frequency to keep the chip temp roughly constant.

Why not? Don't bother with the output frequency, just vary the number
of flops wiggling.

That would work too. Maybe have a 2-bit heat control word, to get
coarse steps of power dissipation, 4 groups of flops. I suppose a
single on-off bit could be a simple bang-bang thermostat.

The PLL thing would be elegant, proportional control of all the flops
in the distributed heater array.

You can do the same thing with the flops. Use a shift register to
enable flops in a "thermometer code" sort of thing. Too low - shift
right. Wait. Still to low - shift right. Wait. Too high - shift
left...

There are all sorts of algorithms that can be built into spare flops.

I'm thinking we could reduce the overall effect of ambient temp
changes by some healthy factor, 4:1 or 10:1 or something.

Seems reasonable. IBM used to add heater chips for the same purpose
(bipolar circuits run faster at high temperature).

CMOS is slower at high temps. Somewhere between about 1000 and 3000
PPM/K prop delay.

Do you use that property of CMOS (slower the warmer it gets) as an
automatic negative feedback loop for your heater?

John
 
On 4/15/2017 12:21 PM, John Robertson wrote:
On 2017/04/11 7:26 PM, John Larkin wrote:
On Tue, 11 Apr 2017 21:09:52 -0400, krw@notreal.com wrote:

On Mon, 10 Apr 2017 20:06:57 -0700, John Larkin
jjlarkin@highlandtechnology.com> wrote:

On Mon, 10 Apr 2017 22:15:50 -0400, krw@notreal.com wrote:

On Mon, 10 Apr 2017 18:13:13 -0700, John Larkin
jjlarkin@highland_snip_technology.com> wrote:

We have a ZYNQ whose predicted timing isn't meeting decent margins.
And we don't want a lot of output pin timing variation in real life.

We can measure the chip temperature with the XADC thing. So, why not
make an on-chip heater? Use a PLL to clock a bunch of flops, and vary
the PLL output frequency to keep the chip temp roughly constant.

Why not? Don't bother with the output frequency, just vary the number
of flops wiggling.

That would work too. Maybe have a 2-bit heat control word, to get
coarse steps of power dissipation, 4 groups of flops. I suppose a
single on-off bit could be a simple bang-bang thermostat.

The PLL thing would be elegant, proportional control of all the flops
in the distributed heater array.

You can do the same thing with the flops. Use a shift register to
enable flops in a "thermometer code" sort of thing. Too low - shift
right. Wait. Still to low - shift right. Wait. Too high - shift
left...

There are all sorts of algorithms that can be built into spare flops.

I'm thinking we could reduce the overall effect of ambient temp
changes by some healthy factor, 4:1 or 10:1 or something.

Seems reasonable. IBM used to add heater chips for the same purpose
(bipolar circuits run faster at high temperature).

CMOS is slower at high temps. Somewhere between about 1000 and 3000
PPM/K prop delay.


Do you use that property of CMOS (slower the warmer it gets) as an
automatic negative feedback loop for your heater?

That would likely not work nearly as well as directly measuring the
temperature of the die. Notice he said the chip has a built in
thermometer. The only issue with using the thermometer is the
temperature across the die will vary. Using the delay to control the
heater might work well in concept, but would be hard to measure and
still only work for the output being measured. Any other outputs will
be spread around the die and so not isothermal. But mostly the timing
would be hard to measure.

He has an oven/refrigerator. He could measure the change in timing over
temperature for some number of samples. This would give him an idea of
how much spread is involved. There are multiple sources of timing
spread and he can control one and sort of control another. He wants an
idea of how much timing spread is left.

--

Rick C
 
On 2017/04/15 9:37 AM, rickman wrote:
On 4/15/2017 12:21 PM, John Robertson wrote:
On 2017/04/11 7:26 PM, John Larkin wrote:
On Tue, 11 Apr 2017 21:09:52 -0400, krw@notreal.com wrote:

On Mon, 10 Apr 2017 20:06:57 -0700, John Larkin
jjlarkin@highlandtechnology.com> wrote:

On Mon, 10 Apr 2017 22:15:50 -0400, krw@notreal.com wrote:

On Mon, 10 Apr 2017 18:13:13 -0700, John Larkin
jjlarkin@highland_snip_technology.com> wrote:

We have a ZYNQ whose predicted timing isn't meeting decent margins.
And we don't want a lot of output pin timing variation in real life.

We can measure the chip temperature with the XADC thing. So, why not
make an on-chip heater? Use a PLL to clock a bunch of flops, and
vary
the PLL output frequency to keep the chip temp roughly constant.

Why not? Don't bother with the output frequency, just vary the
number
of flops wiggling.

That would work too. Maybe have a 2-bit heat control word, to get
coarse steps of power dissipation, 4 groups of flops. I suppose a
single on-off bit could be a simple bang-bang thermostat.

The PLL thing would be elegant, proportional control of all the flops
in the distributed heater array.

You can do the same thing with the flops. Use a shift register to
enable flops in a "thermometer code" sort of thing. Too low - shift
right. Wait. Still to low - shift right. Wait. Too high - shift
left...

There are all sorts of algorithms that can be built into spare flops.

I'm thinking we could reduce the overall effect of ambient temp
changes by some healthy factor, 4:1 or 10:1 or something.

Seems reasonable. IBM used to add heater chips for the same purpose
(bipolar circuits run faster at high temperature).

CMOS is slower at high temps. Somewhere between about 1000 and 3000
PPM/K prop delay.


Do you use that property of CMOS (slower the warmer it gets) as an
automatic negative feedback loop for your heater?

That would likely not work nearly as well as directly measuring the
temperature of the die. Notice he said the chip has a built in
thermometer. The only issue with using the thermometer is the
temperature across the die will vary. Using the delay to control the
heater might work well in concept, but would be hard to measure and
still only work for the output being measured. Any other outputs will
be spread around the die and so not isothermal. But mostly the timing
would be hard to measure.

He has an oven/refrigerator. He could measure the change in timing over
temperature for some number of samples. This would give him an idea of
how much spread is involved. There are multiple sources of timing
spread and he can control one and sort of control another. He wants an
idea of how much timing spread is left.

Thanks for the explanation. I am not a qualified board designer, just a
bit of a hacker designing and making the few I need for my restoration
business. It is nice to get the background of design considerations as I
find that information useful in determining where designs have gone
wrong in our equipment and try to make improvements to the systems.

As an example - Common/Ground designs in early arcade games were not
always at their best. A number of early electronic pinball games used to
burn up driver transistors and coils at random until I traced the
problem - which was a design error where all the commons (MPU, Audio,
Solenoids, Lamps) came together at the regulator board through several
different pins, and as each pin connection oxidized slightly it allowed
ground potential differences between the MPU and the solenoid logic
grounds, leading to the transistors being slightly biased on...
And this game logic had been designed by Rockwell.

John
 
On Saturday, 4/15/2017 1:15 PM, John Robertson wrote:

As an example - Common/Ground designs in early arcade games were not
always at their best. A number of early electronic pinball games used to
burn up driver transistors and coils at random until I traced the
problem - which was a design error where all the commons (MPU, Audio,
Solenoids, Lamps) came together at the regulator board through several
different pins, and as each pin connection oxidized slightly it allowed
ground potential differences between the MPU and the solenoid logic
grounds, leading to the transistors being slightly biased on...
And this game logic had been designed by Rockwell.

John

This sort of poor design is common in consumer electronics. Likely
the engineer wanted more or better ground connections, but got shot
down due to increased cost of connectors with either more pins or
better plating (silver or gold). As long as the oxidation issue
happens _after_ the warranty period expires, there's no incentive
to correct the design, either.

--
Gabor
 
i am having problem while doing pipeline zbt sram,plzz help if zbt possible give me the zbt sram controller codes....(verilog)....plzz help me i m doing an mtech project still struglling to complete i took 5 years
 
i m doing project on zbt sram controller....i m having problem in pipeline operation of zbt sram...i took 5 years till now not at completed the project...plzz if u have zbt sram controller working code give me...plzz give ur contact no to disscuss
 
On Wednesday, 16 September 1998 08:00:00 UTC+1, Stefan Rave wrote:
What is the best choice for use with an XC4000XL FPGA: synchronous or
asynchronous SRAM? What's the advantage of synchronous SRAM, anyway?

1998 eh
 
Here is a generic VHDL gray counter function.
http://www.vlsiip.com/intel/vhdlf.html
Hope you can convert it into verilog
Kr,
Avi.

On Wednesday, January 10, 2001 at 9:25:22 AM UTC, Bill Lenihan wrote:
I know how to make binary up/down counters and LFSR-based counters in
verilog, but does anyone know of an algorithmic/equation-based way to
make grey-code counters?

The only examples I've seen are from old PAL application notes, and they
are for 4-bit grey counters that are described as 16-state state
machines, which is ok if you are keeping the counter at 4-bits, but
impractical if you are going to much wider bit widths.

--
==============================
William Lenihan
lenihan3weNOSPAM@earthlink.net
.... remove "NOSPAM" when replying
==============================
 
On 14/11/17 11:34, aviralmittal@gmail.com wrote:
Here is a generic VHDL gray counter function.
http://www.vlsiip.com/intel/vhdlf.html
Hope you can convert it into verilog
Kr,
Avi.

Please look at the date of that question - it was asked nearly 18 years
ago. It's great that you want to help people, but do you /really/ think
this guy has spend 18 years trying to figure out how to make a grey code
counter?

My advice to you is that if you want to use Usenet, drop the crappy
Google Groups interface. Get a proper newsreader, and a proper
newserver (both are free), and then you join the newsgroups that
interest you. You get a vastly better interface, and become part of a
living community instead of talking to ghosts.


On Wednesday, January 10, 2001 at 9:25:22 AM UTC, Bill Lenihan wrote:
I know how to make binary up/down counters and LFSR-based counters in
verilog, but does anyone know of an algorithmic/equation-based way to
make grey-code counters?

The only examples I've seen are from old PAL application notes, and they
are for 4-bit grey counters that are described as 16-state state
machines, which is ok if you are keeping the counter at 4-bits, but
impractical if you are going to much wider bit widths.

--
==============================
William Lenihan
lenihan3weNOSPAM@earthlink.net
.... remove "NOSPAM" when replying
==============================
 
The Muslim is on the right path. He has rejected truth and is on
the path to Hell. It is the right path for one who rejects
truth, rejects Jesus Christ.

The Buddhist is on the right path. He has rejected truth and is on
the path to Hell. It is the right path for one who rejects
truth, rejects Jesus Christ.

The Hindu is on the right path. He has rejected truth and is on
the path to Hell. It is the right path for one who rejects
truth, rejects Jesus Christ.

The atheist is on the right path. He has rejected truth and is on
the path to Hell. It is the right path for one who rejects
truth, rejects Jesus Christ.

The agnostic is on the right path. He has rejected truth and is on
the path to Hell. It is the right path for one who rejects
truth, rejects Jesus Christ.

YOU TOO are on the right path if you have rejected truth, because
you are also on the the path to Hell. It is the right path
for one who rejects truth, rejects Jesus Christ.

-----
But for the one who receives Jesus Christ...
For the one who asks for and accepts forgiveness for their sin by
what Jesus Christ did for them at the cross, that blessed cross
where He took on our shame, where His blood poured out in our
place, where He transferred our sin onto Himself, and where He
then left this Earth to go and pay the true price of that sin
before God Almighty to the point where He was crushed ... yea,
that soul is on the right path because they embraced truth, they
grabbed hold of it with both hands and would not let go.

-----
Based on where you are, you ARE on the right path today. The only
question is ... is the path you're on the right one to be on?

IT IS the right one for where you are, but is it the right one for
where you want to be? Ask yourself that question, and ponder it
when you are alone, in silence, with only you and your thoughts.
Ask yourself if you are on the path you want to be on given the
eternal future ahead of you?

-----
The time is now, today, right now. Ask Jesus to forgive your sin
and leave your path of death behind, and walk the path of life
leading to be with God in the paradise of Heaven forever. It's
His domain, and it is splendid beyond imagination. It's what He
has in store for all who return to Him from their sin and sin-
loving ways. In fact, it's what He had in mind for all souls
before sin entered in and destroyed everything.

Jesus loves you. It's why He came here to this Earth ... to
save you. He came to make a way Home for you. He came because
He wants you to be with Him where He is in the paradise of Heaven,
seeing all things He has in store for you, in all their full glory.

Thank you,
Rick C. Hodgin
 
On Thursday, November 16, 2017 at 8:05:45 AM UTC-5, Rick C Hodgin wrote:
> [snip]

I apologize for posting this reply to the above spam from Peter Cheung,
but he is impersonating me and I want to make sure people realize I am
not this individual.

He is posting content from prior posts I have posted under completely
different subject headings. He uses the email rickchodginjesus@gmail.com
where as I use rick.c.hodgin@gmail.com.

I do not make posts that use my name in the subject, and I do not make
the claims he does.

Here is some more information:

https://groups.google.com/d/msg/comp.lang.c++/X9lgo_CquUc/I_-pAWvuAAAJ

--
Rick C. Hodgin
 
On Wed, 13 Dec 2017 19:43:20 -0800, John Larkin
<jjlarkin@highlandtechnology.com> wrote:

I have an async signal, call it TRIG, inside a Zynq 7020.

At the rising edge of TRIG, I want to make an async one-shot. It will
leave the chip as RX and reset some outboard ecl logic. Anything from,
say, 2 ns to 10 ns width would work.

The board is built, and we can't easily add more connections to the
FPGA or hack in glue logic. Well, it would be ugly.

Here are some ideas:

https://www.dropbox.com/s/4azi5hzkqzsyeiy/FPGA_OneShots.JPG?raw=1

How about (A) *AND* not(A), with an external delay, or capacitor on
not(A)?
We could play with i/o cell slew rates and drive strengths to tune the
timing. And use as many delay stages (circuit B) as we like... there
are tons of unused balls.

Or maybe use some internal delay path, if we can find one that is
reasonably repeatable.

That's going to be difficult without a low-level editing tool (and
even with, is _highly_ not recommended).
The compiler will probably let us do circuit A or B without whining
much, but might object to the third one.

I grew up on async hairball logic, so this seems reasonable to me, but
my FPGA guys are horrified. We don't want to spin up a 250 MHz PLL
here and do it synchronously, for various reasons.

An internal passive pullup resistor charging an i/o pin capacitance
would be fun, but I don't think we could make a short enough blip.

Any other ideas or comments?
 
On Wed, 13 Dec 2017 22:57:40 -0500, krw@notreal.com wrote:

On Wed, 13 Dec 2017 19:43:20 -0800, John Larkin
jjlarkin@highlandtechnology.com> wrote:


I have an async signal, call it TRIG, inside a Zynq 7020.

At the rising edge of TRIG, I want to make an async one-shot. It will
leave the chip as RX and reset some outboard ecl logic. Anything from,
say, 2 ns to 10 ns width would work.

The board is built, and we can't easily add more connections to the
FPGA or hack in glue logic. Well, it would be ugly.

Here are some ideas:

https://www.dropbox.com/s/4azi5hzkqzsyeiy/FPGA_OneShots.JPG?raw=1

How about (A) *AND* not(A), with an external delay, or capacitor on
not(A)?

I could do all sorts of stuff if I could access some FPGA balls, but I
can't. I brought out some test points, but we used them for another
hack!

And kluging parts onto the board is second-best to doing something
invisible like this.


--

John Larkin Highland Technology, Inc

lunatic fringe electronics
 
On 12/13/17 10:43 PM, John Larkin wrote:
I have an async signal, call it TRIG, inside a Zynq 7020.

At the rising edge of TRIG, I want to make an async one-shot. It will
leave the chip as RX and reset some outboard ecl logic. Anything from,
say, 2 ns to 10 ns width would work.

The board is built, and we can't easily add more connections to the
FPGA or hack in glue logic. Well, it would be ugly.

Here are some ideas:

https://www.dropbox.com/s/4azi5hzkqzsyeiy/FPGA_OneShots.JPG?raw=1

We could play with i/o cell slew rates and drive strengths to tune the
timing. And use as many delay stages (circuit B) as we like... there
are tons of unused balls.

Or maybe use some internal delay path, if we can find one that is
reasonably repeatable.

The compiler will probably let us do circuit A or B without whining
much, but might object to the third one.

I grew up on async hairball logic, so this seems reasonable to me, but
my FPGA guys are horrified. We don't want to spin up a 250 MHz PLL
here and do it synchronously, for various reasons.

An internal passive pullup resistor charging an i/o pin capacitance
would be fun, but I don't think we could make a short enough blip.

Any other ideas or comments?

The big issue with trying to do this sort of stuff asynchronously in an
FPGA is that timing is tremendously dependent on routing and placement,
including at times things that you really can't control at the typical
programming level. It is quite different from the old days of using
discrete chips where the gates were the slow part, and the wires were
mostly negligible. Inside the FPGA, the wires are significant part of
timing, and the tools and chip designs go to a LOT of work to make
synchronous stuff work.

My guess is that the most repeatable method would be to build a delay
line by instancing a buffer, with the synthesis directives to force the
system to not optimize/remove the buffer, and force it at one end of the
FPGA, and then have that drive a similar buffer which you have forced to
be on the other side of the chip, and so on back and forth until you
have built up enough delay.
 
John Larkin wrote on 12/13/2017 10:43 PM:
I have an async signal, call it TRIG, inside a Zynq 7020.

At the rising edge of TRIG, I want to make an async one-shot. It will
leave the chip as RX and reset some outboard ecl logic. Anything from,
say, 2 ns to 10 ns width would work.

The board is built, and we can't easily add more connections to the
FPGA or hack in glue logic. Well, it would be ugly.

Here are some ideas:

https://www.dropbox.com/s/4azi5hzkqzsyeiy/FPGA_OneShots.JPG?raw=1

We could play with i/o cell slew rates and drive strengths to tune the
timing. And use as many delay stages (circuit B) as we like... there
are tons of unused balls.

Or maybe use some internal delay path, if we can find one that is
reasonably repeatable.

The compiler will probably let us do circuit A or B without whining
much, but might object to the third one.

I grew up on async hairball logic, so this seems reasonable to me, but
my FPGA guys are horrified. We don't want to spin up a 250 MHz PLL
here and do it synchronously, for various reasons.

An internal passive pullup resistor charging an i/o pin capacitance
would be fun, but I don't think we could make a short enough blip.

Any other ideas or comments?

The variation in delay in an FPGA for any given route aren't all that bad,
about the same as with regular logic. I assume Xilinx still has a manual
chip editing tool. It will give you delays of routes. So you can do a run
of the chip and manually reroute the one delay path to get your time delay.
There are ways to force placement of the FF with attributes in your source
code. So as long as the routes you need are not used it would be a simple
matter to hand route the same path each time. Getting a 2 ns minimum pulse
width shouldn't be hard at all.

You seem to be thinking you can tune the loop with I/O pad delays, but that
will still require manual work in the chip editor to make adjustments each
time you get a different route on the delay path and so need different I/O
pad slew rates.

One other thought is to use some number of LUTs as the main delay element,
there are ways to force the use of such a component in HDL source. By
constraining the placement to cells that are in the same logic block you
will get consistent route delays and routing variation should go away. I
believe it is the inter-logic cell routes that have lots of variation.

The main reason why your FPGA guys are reacting in horror is because they
know what a royal PITA it will be to learn the tools well enough to make all
this happen.

--

Rick C

Viewed the eclipse at Wintercrest Farms,
on the centerline of totality since 1998
 
On Wed, 13 Dec 2017 19:43:20 -0800, John Larkin wrote:

I have an async signal, call it TRIG, inside a Zynq 7020.

At the rising edge of TRIG, I want to make an async one-shot. It will
leave the chip as RX and reset some outboard ecl logic. Anything from,
say, 2 ns to 10 ns width would work.

The board is built, and we can't easily add more connections to the FPGA
or hack in glue logic. Well, it would be ugly.

Here are some ideas:

https://www.dropbox.com/s/4azi5hzkqzsyeiy/FPGA_OneShots.JPG?raw=1

We could play with i/o cell slew rates and drive strengths to tune the
timing. And use as many delay stages (circuit B) as we like... there are
tons of unused balls.

Or maybe use some internal delay path, if we can find one that is
reasonably repeatable.

The compiler will probably let us do circuit A or B without whining
much, but might object to the third one.

I grew up on async hairball logic, so this seems reasonable to me, but
my FPGA guys are horrified. We don't want to spin up a 250 MHz PLL here
and do it synchronously, for various reasons.

An internal passive pullup resistor charging an i/o pin capacitance
would be fun, but I don't think we could make a short enough blip.

Any other ideas or comments?

"Some internal delay mechanism" on your block diagram could be an IDELAY
(or IODELAY), which gives you a calibrated delay that will be independent
of PVT. Of course, it's independent of PVT because you give it (actually
an IDELAY_CTRL) a reference clock at 200MHz (or some other, higher
frequencies). Max delay is a few ns, delay resolution is some tens of ps,
and jitter is some tens of ps as well.

I recently ran some ring oscillator experiments in the same FPGA family.
I used LUTs as delay elements and when coded (in VHDL) such that all
elements were in the same slice and the routing was all in the local
switchbox, I measured a frequency of 945MHz for a 3 element ring. That
should give you some idea of the achievable delays.

The placement and routing is quite easy to control from your favourite
HDL, once you know how. This is important to get right as otherwise the
results will not be repeatable.


Watch the minimum pulse widths on the FF clear input. This will be
specified in the datasheet somewhere.

I'm guessing you want an IOB FF rather than a CLB flip flop though. The
IOB FF are described in the "SelectIO Logic Resources" chapter of UG471.
They should be as fast as the internal FF. Maybe faster, as they are
designed for superior metastability resolution.

[Assuming the trig input is on a pin.]
You also have the option of using special IO clocking resources to get
the clock from a pin to the FF clock input with much less delay / delay
variation / jitter than you would get through the global clock networks.
(These are the clocking resources that are used for DDR3 data clocks,
etc. so they have to have low, predictable delays.) This will only work
if you put the trig input on the correct pin (as not all pins can be used
as clock inputs this way), but hey, of course you picked that up at the
schematic design review.

Allan
 
On Thu, 14 Dec 2017 10:49:41 +0000, Allan Herriman wrote:


The placement and routing is quite easy to control from your favourite
HDL, once you know how. This is important to get right as otherwise the
results will not be repeatable.

This Xilinx forum thread gives some examples of placement and routing in VHDL:

https://forums.xilinx.com/t5/UltraScale-Architecture/Gated-ring-oscillator/m-p/808774/highlight/true#M5557

Regards,
Allan
 
In comp.arch.fpga rickman <gnuarm@gmail.com> wrote:
The main reason why your FPGA guys are reacting in horror is because they
know what a royal PITA it will be to learn the tools well enough to make
all this happen.

Is this a mature product, or one which is likely to see frequent updates?

That may direct your strategy. If it's mature, it might be feasible to use
the ECO tools to manually add cells to an existing design.

If it's still in flux, you probably need to understand how to direct the
tool that this piece of logic needs special treatment and should be
constructed like so. This means it will persist over respins of the rest of
the logic. You will likely still need to verify over a number of respins
that it does in fact persist, given that it's hard to get this right.

Theo
 
On Thu, 14 Dec 2017 02:10:06 -0500, rickman <gnuarm@gmail.com> wrote:

John Larkin wrote on 12/13/2017 10:43 PM:

I have an async signal, call it TRIG, inside a Zynq 7020.

At the rising edge of TRIG, I want to make an async one-shot. It will
leave the chip as RX and reset some outboard ecl logic. Anything from,
say, 2 ns to 10 ns width would work.

The board is built, and we can't easily add more connections to the
FPGA or hack in glue logic. Well, it would be ugly.

Here are some ideas:

https://www.dropbox.com/s/4azi5hzkqzsyeiy/FPGA_OneShots.JPG?raw=1

We could play with i/o cell slew rates and drive strengths to tune the
timing. And use as many delay stages (circuit B) as we like... there
are tons of unused balls.

Or maybe use some internal delay path, if we can find one that is
reasonably repeatable.

The compiler will probably let us do circuit A or B without whining
much, but might object to the third one.

I grew up on async hairball logic, so this seems reasonable to me, but
my FPGA guys are horrified. We don't want to spin up a 250 MHz PLL
here and do it synchronously, for various reasons.

An internal passive pullup resistor charging an i/o pin capacitance
would be fun, but I don't think we could make a short enough blip.

Any other ideas or comments?

The variation in delay in an FPGA for any given route aren't all that bad,
about the same as with regular logic.

It's higher in FPGAs since the wires are longer (higher capacitance),
though distance between gates may (or may not) be similar. The wires
in an FPGA are "fixed" length, where they are only as long as needed
in an ASIC. There is also a lot of capacitance from all of the muxes
(pass gates) hanging off the wire. The higher magnitude will mean a
higher variation, too.

I assume Xilinx still has a manual
chip editing tool. It will give you delays of routes. So you can do a run
of the chip and manually reroute the one delay path to get your time delay.
There are ways to force placement of the FF with attributes in your source
code. So as long as the routes you need are not used it would be a simple
matter to hand route the same path each time. Getting a 2 ns minimum pulse
width shouldn't be hard at all.

A very poor way of doing things but it may be the only way to make
such a kludge.

You seem to be thinking you can tune the loop with I/O pad delays, but that
will still require manual work in the chip editor to make adjustments each
time you get a different route on the delay path and so need different I/O
pad slew rates.

One other thought is to use some number of LUTs as the main delay element,
there are ways to force the use of such a component in HDL source. By
constraining the placement to cells that are in the same logic block you
will get consistent route delays and routing variation should go away. I
believe it is the inter-logic cell routes that have lots of variation.

The main reason why your FPGA guys are reacting in horror is because they
know what a royal PITA it will be to learn the tools well enough to make all
this happen.

Not to mention the maintenance of this kludge for the life of the
product.
 
krw@notreal.com wrote on 12/14/2017 9:12 AM:
On Thu, 14 Dec 2017 02:10:06 -0500, rickman <gnuarm@gmail.com> wrote:

John Larkin wrote on 12/13/2017 10:43 PM:

I have an async signal, call it TRIG, inside a Zynq 7020.

At the rising edge of TRIG, I want to make an async one-shot. It will
leave the chip as RX and reset some outboard ecl logic. Anything from,
say, 2 ns to 10 ns width would work.

The board is built, and we can't easily add more connections to the
FPGA or hack in glue logic. Well, it would be ugly.

Here are some ideas:

https://www.dropbox.com/s/4azi5hzkqzsyeiy/FPGA_OneShots.JPG?raw=1

We could play with i/o cell slew rates and drive strengths to tune the
timing. And use as many delay stages (circuit B) as we like... there
are tons of unused balls.

Or maybe use some internal delay path, if we can find one that is
reasonably repeatable.

The compiler will probably let us do circuit A or B without whining
much, but might object to the third one.

I grew up on async hairball logic, so this seems reasonable to me, but
my FPGA guys are horrified. We don't want to spin up a 250 MHz PLL
here and do it synchronously, for various reasons.

An internal passive pullup resistor charging an i/o pin capacitance
would be fun, but I don't think we could make a short enough blip.

Any other ideas or comments?

The variation in delay in an FPGA for any given route aren't all that bad,
about the same as with regular logic.

It's higher in FPGAs since the wires are longer (higher capacitance),
though distance between gates may (or may not) be similar. The wires
in an FPGA are "fixed" length, where they are only as long as needed
in an ASIC. There is also a lot of capacitance from all of the muxes
(pass gates) hanging off the wire. The higher magnitude will mean a
higher variation, too.

I assume Xilinx still has a manual
chip editing tool. It will give you delays of routes. So you can do a run
of the chip and manually reroute the one delay path to get your time delay.
There are ways to force placement of the FF with attributes in your source
code. So as long as the routes you need are not used it would be a simple
matter to hand route the same path each time. Getting a 2 ns minimum pulse
width shouldn't be hard at all.

A very poor way of doing things but it may be the only way to make
such a kludge.

You seem to be thinking you can tune the loop with I/O pad delays, but that
will still require manual work in the chip editor to make adjustments each
time you get a different route on the delay path and so need different I/O
pad slew rates.

One other thought is to use some number of LUTs as the main delay element,
there are ways to force the use of such a component in HDL source. By
constraining the placement to cells that are in the same logic block you
will get consistent route delays and routing variation should go away. I
believe it is the inter-logic cell routes that have lots of variation.

The main reason why your FPGA guys are reacting in horror is because they
know what a royal PITA it will be to learn the tools well enough to make all
this happen.

Not to mention the maintenance of this kludge for the life of the
product.

Something like this was done in test equipment from a major manufacturer.
They needed to mux a clock and the delay through the chip needed to be
minimal. I don't recall if the LUT was hand placed or not, but the routing
was done by hand in the chip editor. I found out about it because we had to
touch the chip. My boss was the guy who had originally done this and not
documented a single thing on it. He gave a demonstration on how to do the
hand mod to few of us and that was how he passed the torch, by oral
tradition. lol

--

Rick C

Viewed the eclipse at Wintercrest Farms,
on the centerline of totality since 1998
 

Welcome to EDABoard.com

Sponsor

Back
Top