Go Back   Velocity Reviews > Newsgroups > VHDL
User Name
Password
Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

Reply

VHDL - Random Value for LFSR (just simulation)

 
Thread Tools Search this Thread
Old 02-17-2009, 03:31 PM   #1
Default Random Value for LFSR (just simulation)


Hi

I have a very simple LFSR in my design that looks as follows:

architecture Behavior of PRNG is
signal temp : std_logic_vector(7 downto 0) := B"01110101";

begin
process(clk)
begin
if ( clk'event and clk='1' ) then
temp <= (temp(1) xor temp(0)) & temp(7 downto 1);
PRNG_OUT <= temp;
end if;
end process;
end architecture Behavior;

The problem that I have here now is obviously that I have the same
seed for each startup of
the simulation! I wonder if there is a very easy way to get 8 random
bits for my temp signal
at the beginning? When checking google the most things I found was
making use of some
random sources from the hardware with oscis and so on but in my case I
just need it for simulation!

Many thanks!


Martin
  Reply With Quote
Old 02-17-2009, 03:45 PM   #2
Tricky
 
Posts: n/a
Default Re: Random Value for LFSR (just simulation)
On 17 Feb, 15:31, Martin <sportfre...@gmx.at> wrote:
> Hi
>
> I have a very simple LFSR in my design that looks as follows:
>
> architecture Behavior of PRNG is
> * signal temp : std_logic_vector(7 downto 0) := B"01110101";
>
> * begin
> * process(clk)
> * begin
> * * * * *if ( clk'event and clk='1' ) then
> * * * * * * * * temp * * *<= (temp(1) xor temp(0)) & temp(7 downto 1);
> * * * * * * * * PRNG_OUT *<= temp;
> * * * * * end if;
> * end process;
> end architecture Behavior;
>
> The problem that I have here now is obviously that I have the same
> seed for each startup of
> the simulation! I wonder if there is a very easy way to get 8 random
> bits for my temp signal
> at the beginning? When checking google the most things I found was
> making use of some
> random sources from the hardware with oscis and so on but in my case I
> just need it for simulation!
>
> Many thanks!


Unfortunatly there is no way of getting hold of anything that changes
(like system time) in VHDL. You would have the same problems if you
used the uniform function (generates random reals between 0 and 1)
from the ieee.math_real package too (although this is useful for re-
running input vector sequences).

The only solution I have heard of is to set up a generic in the
testbench as the seed value that is then set via a TCL script when you
run the testbench.


Tricky
  Reply With Quote
Old 02-17-2009, 03:56 PM   #3
kennheinrich@sympatico.ca
 
Posts: n/a
Default Re: Random Value for LFSR (just simulation)
On Feb 17, 10:45*am, Tricky <Trickyh...@gmail.com> wrote:
> On 17 Feb, 15:31, Martin <sportfre...@gmx.at> wrote:
>
>
>
> > Hi

>
> > I have a very simple LFSR in my design that looks as follows:

>
> > architecture Behavior of PRNG is
> > * signal temp : std_logic_vector(7 downto 0) := B"01110101";

>
> > * begin
> > * process(clk)
> > * begin
> > * * * * *if ( clk'event and clk='1' ) then
> > * * * * * * * * temp * * *<= (temp(1) xor temp(0)) & temp(7 downto 1);
> > * * * * * * * * PRNG_OUT *<= temp;
> > * * * * * end if;
> > * end process;
> > end architecture Behavior;

>
> > The problem that I have here now is obviously that I have the same
> > seed for each startup of
> > the simulation! I wonder if there is a very easy way to get 8 random
> > bits for my temp signal
> > at the beginning? When checking google the most things I found was
> > making use of some
> > random sources from the hardware with oscis and so on but in my case I
> > just need it for simulation!

>
> > Many thanks!

>
> Unfortunatly there is no way of getting hold of anything that changes
> (like system time) in VHDL. You would have the same problems if you
> used the uniform function (generates random reals between 0 and 1)
> from the ieee.math_real package too (although this is useful for re-
> running input vector sequences).
>
> The only solution I have heard of is to set up a generic in the
> testbench as the seed value that is then set via a TCL script when you
> run the testbench.


How about (if you're running *nix operating system), reading from and
parsing one of the special files (somewhere in dev/* or proc/*) that
might get changed on the fly?

- Kenn


kennheinrich@sympatico.ca
  Reply With Quote
Old 02-18-2009, 11:04 AM   #4
Marcus Harnisch
 
Posts: n/a
Default Re: Random Value for LFSR (just simulation)
Martin <> writes:

> The problem that I have here now is obviously that I have the same
> seed for each startup of the simulation! I wonder if there is a very
> easy way to get 8 random bits for my temp signal at the beginning?


You seem to mix up two issues:

1. You want to change the seed: Valid requirement. Pseudo random
number sequences get kind of boring after a while. Other have
posted solutions. I prefer using generics for that kind of stuff.

2. You want a random seed. Do you really? Think about it. What if you
find a bug and now want to verify your fix. Will you be able to
reproduce the exact system state?

I would use reproducible generated numbers, perhaps the output from
$(date +%s). Store that number along with your simulation data.

Regards
Marcus

--
note that "property" can also be used as syntaxtic sugar to reference
a property, breaking the clean design of verilog; [...]

(seen on http://www.veripool.com/verilog-mode_news.html)


Marcus Harnisch
  Reply With Quote
Old 02-19-2009, 11:05 PM   #5
whygee
 
Posts: n/a
Default Re: Random Value for LFSR (just simulation)
Martin wrote:
> Hi

<snip>

> The problem that I have here now is obviously that I have the same
> seed for each startup of
> the simulation! I wonder if there is a very easy way to get 8 random
> bits for my temp signal
> at the beginning? When checking google the most things I found was
> making use of some
> random sources from the hardware with oscis and so on but in my case I
> just need it for simulation!


back in 2001 we had the same requirements for the design of F-CPU,
you'll find the solution in http://f-cpu.seul.org/whygee/pres-is...29_07_2002.tbz
in the f-cpu/vhdl/common directory of the archive.

for clarity, i have put the 2 relevant files at
http://yasep.org/~whygee/random.txt
http://yasep.org/~whygee/random_simple.vhdl
This version gets data from a file,
which is /dev/urandom in this case.
If you want to input from a regular file,
i'll have to search an earlier version
that properly handles wrap-around at
the end of the input file...

> Many thanks!

enjoy and adapt,
yg

--
http://ygdes.com / http://yasep.org


whygee
  Reply With Quote
Old 02-28-2009, 01:48 PM   #6
David Binnie
 
Posts: n/a
Default Re: Random Value for LFSR (just simulation)
If you are actually going to implement this you can count the phase
difference between a dividend of the board clock (chip oscilator) and an
FPGA generated clock (ring oscilator) of the same approximate frequency, to
generate a random seed.

Dr B




David Binnie
  Reply With Quote
Old 03-02-2009, 02:54 PM   #7
roden@rochester.rr.com
 
Posts: n/a
Default Re: Random Value for LFSR (just simulation)
Just a little warning: you'll need 3 taps to get a maximum length 8-
bit sequence.


roden@rochester.rr.com
  Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
Simulation question Issue Rahul MCITP 9 06-30-2008 09:53 PM
Post-Route Simulation does not give output for the first clock cycle Options velocityreviews Software 0 04-17-2007 05:47 PM
simulation Tom MCITP 0 04-05-2007 01:40 AM
Next Problem: Random HDD Write Errors Dave Hardenbrook A+ Certification 3 10-02-2006 05:38 AM
DVD Verdict reviews: ICE STATION ZEBRA, RANDOM HARVEST, and more! DVD Verdict DVD Video 0 01-31-2005 10:14 AM




SEO by vBSEO 3.3.2 ©2009, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46