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

Reply

VHDL - Shared Variables...

 
Thread Tools Search this Thread
Old 10-24-2004, 10:29 AM   #1
Default Shared Variables...


Hi All,
I want to use variables that should be common to various
processes in a architecture.These variables represent status signals and
are updated "instantaneously",and must be visible to various processes.How
do I achieve this ?
Skeleton Code:
architecture behave of ename is
variable status_signal:bit;
begin
process1(Clock,In1)
begin
if(status_signal) then
...
end if;
status_signal :='0';
end process;
process2(Clock,In2)
begin
if(!(status_signal)) then
....
end if;
status_signal:='1';
end process;
end architecture
This gives a compile error,saying variables need to be shared..How do I
get both processes to read and write the status signals?
Thanks a lot,
Bye


Element Blue
  Reply With Quote
Old 10-24-2004, 05:15 PM   #2
Mike Treseler
 
Posts: n/a
Default Re: Shared Variables...
Element Blue wrote:

> This gives a compile error,saying variables need to be shared..How do I
> get both processes to read and write the status signals?


Declare the shared variables in a package for simulation.
For synthesis use signals.

-- Mike Treseler


Mike Treseler
  Reply With Quote
Old 10-24-2004, 11:12 PM   #3
rickman
 
Posts: n/a
Default Re: Shared Variables...
Element Blue wrote:
>
> Hi All,
> I want to use variables that should be common to various
> processes in a architecture.These variables represent status signals and
> are updated "instantaneously",and must be visible to various processes.How
> do I achieve this ?
> Skeleton Code:
> architecture behave of ename is
> variable status_signal:bit;
> begin
> process1(Clock,In1)
> begin
> if(status_signal) then
> ...
> end if;
> status_signal :='0';
> end process;
> process2(Clock,In2)
> begin
> if(!(status_signal)) then
> ....
> end if;
> status_signal:='1';
> end process;
> end architecture
> This gives a compile error,saying variables need to be shared..How do I
> get both processes to read and write the status signals?
> Thanks a lot,
> Bye


In this situation, you will not see a difference between a signal and a
variable. The variable is updated immediately inside the process while
a signal is not updated until the process halts. But the other process
will not see the variable until the first process has halted anyway! So
the result will be the same either way. Besides, if the variable was
updated immediately and another process run before the first was
complete, it would be indeterminant as to which ran first and you would
get indeterminant results.

--

Rick "rickman" Collins


Ignore the reply address. To email me use the above address with the XY
removed.

Arius - A Signal Processing Solutions Company
Specializing in DSP and FPGA design URL http://www.arius.com
4 King Ave 301-682-7772 Voice
Frederick, MD 21701-3110 301-682-7666 FAX


rickman
  Reply With Quote
Old 10-25-2004, 09:34 AM   #4
Element Blue
 
Posts: n/a
Default Re: Shared Variables...


On Sun, 24 Oct 2004, rickman wrote:

> Element Blue wrote:
>> Skeleton Code:
>> architecture behave of ename is
>> variable status_signal:bit;
>> begin
>> process1(Clock,In1)
>> begin
>> if(status_signal) then
>> ...
>> end if;
>> status_signal :='0';
>> end process;
>> process2(Clock,In2)
>> begin
>> if(!(status_signal)) then
>> ....
>> end if;
>> status_signal:='1';
>> end process;
>> end architecture
>> This gives a compile error,saying variables need to be shared..How do I
>> get both processes to read and write the status signals?

>
> a signal is not updated until the process halts. But the other process
> will not see the variable until the first process has halted anyway! So

Thanks Mike and Rick.
The 2 processes are a read process and a write process. The memory
is a "queue".I want simultaneous read and write to be possible,so I wrote
2 processes,one ofr read and other for write. The 2 processes however need
to be able to read and update the status signals Empty and
Full. Moreover,since the 2 processes are running concurrently,I want the
the change made by one process to be visible immediately to the other,so
that it may function correctly.
If I make the variables global,will the other process still not be
able to see the new value until the first process suspends? I think my
larger problem is of communicating between two processes..
Thanks.

> the result will be the same either way. Besides, if the variable was
> updated immediately and another process run before the first was
> complete, it would be indeterminant as to which ran first and you would
> get indeterminant results.


>
> --
>
> Rick "rickman" Collins
>
>
> Ignore the reply address. To email me use the above address with the XY
> removed.
>
> Arius - A Signal Processing Solutions Company
> Specializing in DSP and FPGA design URL http://www.arius.com
> 4 King Ave 301-682-7772 Voice
> Frederick, MD 21701-3110 301-682-7666 FAX
>



Element Blue
  Reply With Quote
Old 10-26-2004, 06:04 AM   #5
rickman
 
Posts: n/a
Default Re: Shared Variables...

Element Blue wrote:
>
> The 2 processes are a read process and a write process. The memory
> is a "queue".I want simultaneous read and write to be possible,so I wrote
> 2 processes,one ofr read and other for write. The 2 processes however need
> to be able to read and update the status signals Empty and
> Full. Moreover,since the 2 processes are running concurrently,I want the
> the change made by one process to be visible immediately to the other,so
> that it may function correctly.
> If I make the variables global,will the other process still not be
> able to see the new value until the first process suspends? I think my
> larger problem is of communicating between two processes..
> Thanks.


If I can assume you are writing for synthesis, I feel you are thinking
the wrong way. You are trying to design a VHDL program and not thinking
at all about what hardware will be produced. I suggest, as I seem to do
often lately, that you design in terms of the hardware that will do the
job you want. Then write HDL code to describe the registers, counters
and memory that you want. The HDL is designed to "describe" hardware.
If you do that, a lot of the issues you are having trouble with will
become very clear.

Designing a queue is not overly hard if both sides use the same clock.
I use three counters; one to point to the read location, one to the
write location and a third for counting. There are four possible input
combinations; idle, read, write and both read and write. The status
flags (internal signals) can be; empty, full or neither. The design of
what happens when and to what is not too hard, but you have to make a
few decisions about what to do under error conditions such as writing to
a "full" FIFO. Do you write and clobber read data, or do you drop the
write data?

The rest should be easy enough. FIFOs (queues) get hard when the two
clocks are asynchronous.

--

Rick "rickman" Collins


Ignore the reply address. To email me use the above address with the XY
removed.

Arius - A Signal Processing Solutions Company
Specializing in DSP and FPGA design URL http://www.arius.com
4 King Ave 301-682-7772 Voice
Frederick, MD 21701-3110 301-682-7666 FAX


rickman
  Reply With Quote
Old 10-26-2004, 11:47 AM   #6
David R Brooks
 
Posts: n/a
Default Re: Shared Variables...
Strictly of course, the question of how to handle invalid inputs
belongs in the *specification*, rather than the design phase. But
often these are blurred

rickman <> wrote:
[snip]
: The design of
:what happens when and to what is not too hard, but you have to make a
:few decisions about what to do under error conditions such as writing to
:a "full" FIFO. Do you write and clobber read data, or do you drop the
:write data?
:
:The rest should be easy enough. FIFOs (queues) get hard when the two
:clocks are asynchronous.



David R Brooks
  Reply With Quote
Old 10-26-2004, 12:08 PM   #7
ALuPin
 
Posts: n/a
Default Re: Shared Variables...
Hi,

try to get an idea of how a FIFO works.

At www.vhdl-online.de -->model-lib Patras

there is some VHDL code (including simulation files)
for a FIFO with one clock and a FIFO with two clocks.

If you use Altera or Xilinx you could also define
your FIFO with a template.

Rgds

André


ALuPin
  Reply With Quote
Old 10-26-2004, 05:12 PM   #8
Element Blue
 
Posts: n/a
Default Re: Shared Variables...


On Tue, 26 Oct 2004, ALuPin wrote:

> Hi,
>
> try to get an idea of how a FIFO works.
>
> At www.vhdl-online.de -->model-lib Patras
>
> there is some VHDL code (including simulation files)
> for a FIFO with one clock and a FIFO with two clocks.


Thanks Rick..definitely cleared up a few problems.As for writing
to a full FIFO , the handshake signals wll not allow a write to proceed in
that case.Anyway,I am a lot clearer now on what to do
Thanks ALuPin for the link..very useful sample codes there.
Regards,
EB.
>
> If you use Altera or Xilinx you could also define
> your FIFO with a template.
>
> Rgds
>
> André
>



Element Blue
  Reply With Quote
Old 10-26-2004, 11:05 PM   #9
Mike Treseler
 
Posts: n/a
Default Re: Shared Variables...
Element Blue <> wrote in message news:< tshell.be>...

> Thanks Mike and Rick.
> The 2 processes are a read process and a write process. The memory
> is a "queue".I want simultaneous read and write to be possible,so I wrote
> 2 processes,one ofr read and other for write. The 2 processes however need
> to be able to read and update the status signals Empty and
> Full.


Two gates cannot drive the same output.
Two processes cannot drive the same signal.
However, one process can handle all of your data
and flag assignments. See:

http://groups.google.com/groups?q=vh...o+code+gvaglia

Remember that even though
a process is written sequentially, each statement
requires zero execution time. You will get
parallel processing in either case.

-- Mike Treseler


Mike Treseler
  Reply With Quote
Old 10-27-2004, 04:59 AM   #10
Raghavendra
 
Posts: n/a
Default Re: Shared Variables...
Hi,

Here you are driving a signal from two sources.Variable are local
to process block.For synthesis you need to use signals.Otherwise you
can combine the two process and maintain the same functionality.

Raghavendra.Sortur

Element Blue <> wrote in message news:< tshell.be>...
> On Sun, 24 Oct 2004, rickman wrote:
>
> > Element Blue wrote:
> >> Skeleton Code:
> >> architecture behave of ename is
> >> variable status_signal:bit;
> >> begin
> >> process1(Clock,In1)
> >> begin
> >> if(status_signal) then
> >> ...
> >> end if;
> >> status_signal :='0';
> >> end process;
> >> process2(Clock,In2)
> >> begin
> >> if(!(status_signal)) then
> >> ....
> >> end if;
> >> status_signal:='1';
> >> end process;
> >> end architecture
> >> This gives a compile error,saying variables need to be shared..How do I
> >> get both processes to read and write the status signals?

> >
> > a signal is not updated until the process halts. But the other process
> > will not see the variable until the first process has halted anyway! So

> Thanks Mike and Rick.
> The 2 processes are a read process and a write process. The memory
> is a "queue".I want simultaneous read and write to be possible,so I wrote
> 2 processes,one ofr read and other for write. The 2 processes however need
> to be able to read and update the status signals Empty and
> Full. Moreover,since the 2 processes are running concurrently,I want the
> the change made by one process to be visible immediately to the other,so
> that it may function correctly.
> If I make the variables global,will the other process still not be
> able to see the new value until the first process suspends? I think my
> larger problem is of communicating between two processes..
> Thanks.
>
> > the result will be the same either way. Besides, if the variable was
> > updated immediately and another process run before the first was
> > complete, it would be indeterminant as to which ran first and you would
> > get indeterminant results.

>
> >
> > --
> >
> > Rick "rickman" Collins
> >
> >
> > Ignore the reply address. To email me use the above address with the XY
> > removed.
> >
> > Arius - A Signal Processing Solutions Company
> > Specializing in DSP and FPGA design URL http://www.arius.com
> > 4 King Ave 301-682-7772 Voice
> > Frederick, MD 21701-3110 301-682-7666 FAX
> >



Raghavendra
  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
Browsing shared folder via VPN djguruji Hardware 0 03-31-2008 09:59 AM
Unrecognized junction points in shared folders Dave Hardenbrook A+ Certification 0 05-16-2007 11:28 PM
Re: Changing Shared file folder in XP Jim A+ Certification 0 09-25-2005 07:38 PM
Re: Changing Shared file folder in XP Christopher Range A+ Certification 0 09-25-2005 09:30 AM
Shared printers XP and 9x bopper2 A+ Certification 2 05-24-2005 04:50 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