Multi-Source

M

Michael

Guest
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
 
Michael wrote:

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
 
dayzman@hotmail.com (Michael) wrote in message news:<48e30213.0309161831.560b75e0@posting.google.com>...
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
 

Welcome to EDABoard.com

Sponsor

Back
Top