Multi-Source

M

Michael

hello
I'm trying to implement a PCI bus, and i'm trying to interpret C/BE
for the number of words to be read.. what i have done is, to have one
process that "listens" for C/BE and interprets it, then in another
process, it decrements the count per read.. I get the multi source
error, because I can't modify the same signal in 2 processes.. How
else can I approach this? The following is my code:
counting: process(C_BE, AD)
begin
case DEV_RTYP is
when "0100" =>
count <= "010";
when "0101" =>
count <= "011";
when others =>
end case;
end process counting;

out_logic: process(current_state, DEV_DATA, DEV_ADDR, DEV_RTYP,
DEV_RDY, DEV_GRNT,
FRAME, C_BE, IRDY, TRDY, DEVSEL, AD)
begin
...
case current_state is
...
when "00011" =>
IRDY <= '1';
DRV_RDY <= '1';
DEV_DATA <= AD;
if LAST = '1' then
FRAME <= '0';
else
FRAME <= '1';
end if;
count <= count - 1;
...
end process out_logic;

please help

thank you
 
M

Mario Trams

Michael said:
hello
I'm trying to implement a PCI bus, and i'm trying to interpret C/BE
for the number of words to be read.. what i have done is, to have one
process that "listens" for C/BE and interprets it, then in another
process, it decrements the count per read.. I get the multi source
error, because I can't modify the same signal in 2 processes.. How
else can I approach this? The following is my code:

y <= a when en_a = '1' else (others => 'Z');
y <= b when en_b = '1' else (others => 'Z');
......

Regards,
Mario
 
D

Dan RADUT

(e-mail address removed) (Michael) wrote in message Hi:

Try as I suggest below:
I'm trying to implement a PCI bus, and i'm trying to interpret C/BE
for the number of words to be read.. what i have done is, to have one
process that "listens" for C/BE and interprets it, then in another
process, it decrements the count per read.. I get the multi source
error, because I can't modify the same signal in 2 processes.. How
else can I approach this? The following is my code:
counting: process(C_BE, AD)
-- add current_state to this process sensitivity list, that is change this line
-- of code to:
-- coounting: process(C_BE, AD, current_state)
begin
case DEV_RTYP is
when "0100" =>
count <= "010";
when "0101" =>
count <= "011";
when others =>
-- here insert this piece of code:
-- if current_state = "00011" then
-- count <= count - 1;
-- else
-- null;
-- end if;
-- then go to the other process and...
end case;
end process counting;

out_logic: process(current_state, DEV_DATA, DEV_ADDR, DEV_RTYP,
DEV_RDY, DEV_GRNT,
FRAME, C_BE, IRDY, TRDY, DEVSEL, AD)
begin
...
case current_state is
...
when "00011" =>
IRDY <= '1';
DRV_RDY <= '1';
DEV_DATA <= AD;
if LAST = '1' then
FRAME <= '0';
else
FRAME <= '1';
end if;
-- delete (or comment) the statement below: thus you remove the second source
-- of the count driver.
count <= count - 1;
...
end process out_logic;

good luck,

Dan R
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

Event 2
Tristate 5
simulation help 2
Why there is multi-source error? 2
Multi-source on Integers in Concurrent Assignment. 3
stepper motor 0
Counter with asynchronous enable 3
END OF DATA ON A FRAME 2

Members online

Forum statistics

Threads
473,755
Messages
2,569,539
Members
45,024
Latest member
ARDU_PROgrammER

Latest Threads

Top