Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Help - Multiple driver message

Status
Not open for further replies.

manush30

Member level 1
Joined
Jul 14, 2016
Messages
33
Helped
0
Reputation
0
Reaction score
0
Trophy points
6
Activity points
340
Hi all,

I try to compile this code but i get

@A: BN321 |Found multiple drivers on net CART1_B[0] (in view: work.VALVE_1TO3(arc_valve_1to3)); if one driver is a constant (true or false), use Resolve Mixed Drivers option to connect the net to VCC or GND.
@E: Net CART1_B[0] (in view: work.VALVE_1TO3(arc_valve_1to3)) has conflicting drivers, the connections are
Connection 1: Direction is (Output ) pin:Q[0] inst:CART1_B[11:0] of PrimLib.dffe(prim)
Connection 2: Direction is (Output ) pin:CART1[0] inst:CALIBRATION of work.LC_CAL(arc_lc_cal)
@E: BN314 :|Net CART1_B[0] (in view: work.VALVE_1TO3(arc_valve_1to3)) has multiple drivers
Process took 0h:00m:01s realtime, 0h:00m:01s cputime

pls someone can help me?

the code:

Code:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
USE IEEE.STD_LOGIC_ARITH.ALL;

ENTITY VALVE_1TO3 IS
  PORT( 
		CLK1M  		: IN  STD_LOGIC; 
		RESET  		: IN  STD_LOGIC;
		CLK1HZ      : IN  STD_LOGIC;
		SW_ACT	 	: IN  STD_LOGIC; --- ACTIVATE THE SYSTEM
		SW_CAL		: IN  STD_LOGIC; --- ACTIVATE THE SYSTEM
		SW_RST	    : IN  STD_LOGIC;
		PB	        : IN  STD_LOGIC;
		A2D_CALC 	: IN  STD_LOGIC_VECTOR(11 DOWNTO 0);
		-- CART1	 	: IN  STD_LOGIC_VECTOR(11 DOWNTO 0); ------- Xweight
		-- CART2		: IN  STD_LOGIC_VECTOR(11 DOWNTO 0); ------- Yweight
		-- CART3		: IN  STD_LOGIC_VECTOR(11 DOWNTO 0); ------- Zweight
		-- TRAY			: IN  STD_LOGIC_VECTOR(11 DOWNTO 0);
		-- FULL_TRAY	: IN  STD_LOGIC_VECTOR(11 DOWNTO 0);
		LEDS_IND    : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
		VALVE 		: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
		PUMP     	: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); --- 2-0 BIT FOR ACTIVATE THE PUMPS
END VALVE_1TO3;

ARCHITECTURE ARC_VALVE_1TO3 OF VALVE_1TO3 IS


COMPONENT LC_CAL IS
  PORT( 
		CLK1M     	 : IN  STD_LOGIC; 
		RESET	     : IN  STD_LOGIC;
		SW_CAL		 : IN  STD_LOGIC; --- ACTIVATE THE SYSTEM
		SW_RST	 	 : IN  STD_LOGIC;
		PB			 : IN  STD_LOGIC;
		CLK1HZ  	 : IN  STD_LOGIC;
		CH0_A2D		 : IN  STD_LOGIC_VECTOR(11 DOWNTO 0);
		LEDS_REG	 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
		CART1		 : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
		CART2	 	 : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
		CART3		 : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
		TRAY_O		 : OUT STD_LOGIC_VECTOR(11 DOWNTO 0);
		FULL_TRAY_O  : OUT  STD_LOGIC_VECTOR(11 DOWNTO 0));
END COMPONENT;


TYPE    STATE IS(IDLE, VALVE1, FIRST, VALVE2, SECOND ,VALVE3, THIRD);
SIGNAL  NS			:  STATE;   
SIGNAL  CLK_1kHZ_O  :  STD_LOGIC; 
SIGNAL	CLK_1kHZ   	:  STD_LOGIC;
SIGNAL	FLAG   	    :  STD_LOGIC;
SIGNAL	TOTAL		:  STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL	CART1_B		:  STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL	CART2_B		:  STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL	CART3_B		:  STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL	TRAY		:  STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL	FULL_TRAY	:  STD_LOGIC_VECTOR(11 DOWNTO 0);


 BEGIN
 
 CALIBRATION: LC_CAL PORT MAP (
		CLK1M	 =>	CLK1M  ,  	
		CLK1HZ   =>	CLK1HZ,
		RESET	 => RESET,
		SW_CAL	 =>	SW_CAL,
		SW_RST	 => SW_RST,
		PB		 => PB,
		CH0_A2D	 =>	A2D_CALC,
		CART1	 => CART1_B,
		CART2	 => CART2_B,
		CART3	 => CART3_B,
		TRAY_O	 => TRAY,
		LEDS_REG =>	LEDS_IND,
		FULL_TRAY_O=> FULL_TRAY	
		 );
		 
 -- GENERATING 1kHz CLOCK FOR VALVE DELAY PULSE AND ACTIVATE PUMP--
		 
 PROCESS(CLK1M,RESET)
	VARIABLE COUNTER : INTEGER RANGE 0 TO 500;
BEGIN	
	IF RESET='0' THEN   	
	   COUNTER := 0;
	ELSIF (CLK1M'EVENT and CLK1M= '1') THEN 
	   IF COUNTER = 500 THEN 
		  CLK_1kHZ  <= NOT(CLK_1kHZ);
	  	  COUNTER  := 0;
	   ELSE
          COUNTER := COUNTER + 1;
   	   END IF;
	END IF;
END PROCESS;


---STATE MACHINE FOR ACTIVATE THE PUMPS 
PROCESS (RESET, CLK_1kHZ)
	VARIABLE  VALVE_DLY 	  :  INTEGER RANGE 0 TO 100  ; 	
	BEGIN
		IF (RESET='0')  THEN
			
			VALVE_DLY  :=  0   ;
			FLAG	  <=  '0'  ;
			NS     	  <= IDLE  ;
			PUMP	  <= "0000";
			VALVE	  <= "0000";
			-- CART1_B	  <= CART1 ;
			-- CART2_B	  <= CART2 ;
			-- CART3_B	  <= CART3 ;
			-- TOTAL	  <= FULL_TRAY ;
		ELSIF (CLK_1kHZ'EVENT AND CLK_1kHZ='1') THEN	
		 
			
			CASE NS IS
			WHEN IDLE =>
				PUMP <= "0000";
				
				IF (SW_ACT='1') THEN
					FLAG 	  <=   '0'  ;
					PUMP      <= "0001";
					VALVE	  <= "0000";--- START POSITION
					NS <= VALVE1;
				END IF;
			WHEN VALVE1 =>
					IF (SW_ACT='1') THEN --- SWITCH1 ACTIVATE AND PAUSE THE SYSTEM
						IF (FLAG='0') THEN 
							IF (VALVE_DLY < 100) THEN
								VALVE   <= "1010";
								VALVE_DLY := VALVE_DLY + 1;
							ELSE
								FLAG <= '1';
								VALVE 	  <= "0000" ;
								VALVE_DLY :=   0    ;
								NS		  <=  FIRST;
							END IF;
						END IF;	
					ELSE
						NS   <= VALVE1;
					END IF;
					
	--------------------CALCULATING THE FIRST CONTAINER TO BE EMPTY. TRYING TO GET: TOTAL = TRAY + Y + Z - 120g ------------------
			WHEN FIRST =>
					IF (SW_ACT='1')THEN
						IF (CART1_B <= X"14") THEN ------ IF THE FIRST CONTAINER EMPTY
							PUMP <=  "0001";
							--TOTAL <= A2D_CALC;
							FLAG  <=   '0'  ;
							TOTAL <= CART2_B + CART3_B + TRAY + CART1_B; ----- IN THIS STATE CART1_B VALUE BETWEEN X"00" TO X"14"
							NS    <= VALVE2 ;
						ELSE 
							PUMP 	<= "1001";
							CART1_B	<= A2D_CALC;
							NS   	<= FIRST ;
						END IF;
					ELSE
						PUMP <= "0000";
					END IF;
									
		------------- SWITCHING THE NEXT CONTAINER ---------------	
			WHEN VALVE2 =>
					IF (SW_ACT='1') THEN 
						IF (FLAG='0') THEN 
							IF (VALVE_DLY < 100) THEN
								VALVE   <= "0101";
								VALVE_DLY := VALVE_DLY + 1;
							ELSE
								FLAG <= '1';
								VALVE 	  <= "0000" ;
								VALVE_DLY :=   0    ;
								NS		  <=  SECOND;
							END IF;
						END IF;	
					ELSE
						NS   <= VALVE2;
					END IF;
	
	--------------------CALCULATING THE SECOND CONTAINER TO BE EMPTY. TRYING TO GET: TOTAL = TRAY + Y + 240g ------------------
			WHEN SECOND => 
					IF (SW_ACT='1')THEN 
						IF (CART2_B <= X"14") THEN 
							PUMP  <=  "0001";
							FLAG  <=   '0'  ;
							TOTAL <=  CART3_B + TRAY + CART1_B + CART2_B;
							NS    <= VALVE3 ;
						ELSE 
							PUMP 	<= "0101";
							CART2_B	<= A2D_CALC;
							NS   	<= SECOND ;
						END IF;
					ELSE
						PUMP <= "0000";
					END IF;
					
					
			WHEN VALVE3 =>
					IF (SW_ACT='1') THEN
						IF (FLAG='0') THEN
							IF (VALVE_DLY < 100) THEN
								VALVE   <= "0110";
								VALVE_DLY := VALVE_DLY + 1;
							ELSE
								FLAG <= '1';
								VALVE 	  <= "0000";
								VALVE_DLY :=   0   ;
								NS		  <=  THIRD;
							END IF;
						END IF;	
					ELSE
						NS   <= VALVE3;
					END IF;
		--------------------CALCULATING THE SECOND CONTAINER TO BE EMPTY. TRYING TO GET: TOTAL = TRAY + Y + 240g ------------------			
			WHEN THIRD => 
					IF (SW_ACT='1')THEN 
						IF (CART2_B <= X"14") THEN 
							PUMP <=  "0001";
							FLAG <=   '0'  ;
							TOTAL <=  TRAY + CART1_B + CART2_B + CART3_B;
							NS   <= IDLE ;
						ELSE 
							PUMP 	<= "0011";
							CART2_B	<= A2D_CALC;
							NS   	<= THIRD ;
						END IF;	
					ELSE
						PUMP <= "0000";
					END IF;
			END CASE;
			END IF;	
		--END IF;
	END PROCESS;
	
	-- FULL_TRAY <= TOTAL ;
END ARC_VALVE_1TO3;



Thx alot!!!!:sad::sad::smile::smile:
 

You are driving CART1_B and CART2_B by the instance LC_CAL and the process, you commented out the assignments in the reset branch but left the assignments in later branches.
 

Thx a lot.

still, uncomment the lines u mantioned under the reset branch and get a new message:

"No identifier "cart1" in scope"

cart (1..3) are 3 containers want to sample their weight by load cell through 12bit ADC.
The LC_CAL component needs to calibrate all the measurements and save them to registers.
Now, the valve_1to3 needs to switch between the 3 cartridges by measured the CART1 till it get to 120g( 14h or 20dec a2d).
CART1 need to be the value of the container, and CART1_B need to be sampled every time till the container < or = to 14h.

The calibration i wrote, work very good but the problem is the switching.

Thx u all!
 

In regards to the error
"No identifier "cart1" in scope"
As you haven't supplied updated code nor did you supply the LC_CAL code don't know if you changed something and broke your code.

If you need to "switch" between stuff use a mux.
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top