FPGARelated.com
Forums

ERROR:HDLParsers:409 .... at left hand side. Please help

Started by Unknown November 19, 2015
Dear all, I am very new in vhdl, can anybody tell me what problem,
following is code :
disp_ena  :  OUT  STD_LOGIC;  --)
    column    :  OUT  INTEGER;    --
	  row       :  OUT  INTEGER;:
..........................................
      --set pixel coordinates
      IF(h_count < h_pixels) THEN  --horiztonal display time
        column <= h_count;         --set horiztonal pixel coordinate
      END IF;
		
      IF(v_count < v_pixels) THEN  --vertical display time
        row <= v_count;            --set vertical pixel coordinate
      END IF;

      --set display enable output
      IF(h_count < h_pixels AND v_count < v_pixels) THEN  --display time
        disp_ena <= '1';                                  --enable display
      ELSE                                                --blanking time
        disp_ena <= '0';                                  --disable display
      END IF;
AND it has following ERROR

ERROR:HDLParsers:409 - "D:/xil_add/1/eewiki_vga/vga_controller.vhd" Line 67. Signal 'column' column is at left hand side of variable assignment statement.
ERROR:HDLParsers:409 - "D:/xil_add/1/eewiki_vga/vga_controller.vhd" Line 68. Signal 'row' row is at left hand side of variable assignment statement.
On 2015-11-19 16:24:00 +0000, abirov@gmail.com said:

> Dear all, I am very new in vhdl, can anybody tell me what problem, > following is code : > disp_ena : OUT STD_LOGIC; --) > column : OUT INTEGER; -- > row : OUT INTEGER;: > .......................................... > --set pixel coordinates > IF(h_count < h_pixels) THEN --horiztonal display time > column <= h_count; --set horiztonal pixel coordinate > END IF; > > IF(v_count < v_pixels) THEN --vertical display time > row <= v_count; --set vertical pixel coordinate > END IF; > > --set display enable output > IF(h_count < h_pixels AND v_count < v_pixels) THEN --display time > disp_ena <= '1'; --enable display > ELSE --blanking time > disp_ena <= '0'; --disable display > END IF; > AND it has following ERROR > > ERROR:HDLParsers:409 - "D:/xil_add/1/eewiki_vga/vga_controller.vhd" > Line 67. Signal 'column' column is at left hand side of variable > assignment statement. > ERROR:HDLParsers:409 - "D:/xil_add/1/eewiki_vga/vga_controller.vhd" > Line 68. Signal 'row' row is at left hand side of variable assignment > statement.
You didn't provide line numbers with your listing but look at the third line closely and you will see what might be causing the problem.
Am Donnerstag, 19. November 2015 17:24:13 UTC+1 schrieb abi...@gmail.com:
> Dear all, I am very new in vhdl, can anybody tell me what problem, > following is code : > disp_ena : OUT STD_LOGIC; --) > column : OUT INTEGER; -- > row : OUT INTEGER;:
> ERROR:HDLParsers:409 - "D:/xil_add/1/eewiki_vga/vga_controller.vhd" Line 67. Signal 'column' column is at left hand side of variable assignment statement. > ERROR:HDLParsers:409 - "D:/xil_add/1/eewiki_vga/vga_controller.vhd" Line 68. Signal 'row' row is at left hand side of variable assignment statement.
You did not provide the relevant part of code. "column" and "row" are outputs and therefore signals, the errormessage indicates you use them in variable assignment (row := ABC) instead of signal assignments (row <= ABC) in line 67 and 68. regards, Thomas
Here is my code,here is no errors and warnings, but even no warnings and no errors (i think adv7125 problem) it doesnot work.I have old ML405 board and it use ADV7125,and monitor is Acer AL1511 used 1024X768,I use LED out for checking whether is reset works or not, and also checked for CLK (LED <= clk65MHZ)so thats ok, Here is all code:
(vga.vhd)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.Numeric_STD.All;

entity VGA is
port (
clk100MHz        : in std_logic;
reset_n          : in std_logic;
HSYNC            : out std_logic;
VSYNC            : out std_logic;
VGA_R,VGA_G,VGA_B: out std_logic_vector(3 downto 0);
VGA_CLK          : out std_logic;
LED              : out std_logic
);

end VGA;

architecture main of vga is 
signal clk65MHz: std_logic:='0';
-------------------------------------------------------------
component clock
	port (
		clk100MHz: in std_logic;
		clk65MHz: out std_logic
	);
end component;
-------------------------------------------------------------
component SYNC 
port (
clk65MHz : in STD_LOGIC;
reset_n: in STD_LOGIC;
HSYNC,VSYNC : OUT STD_LOGIC;
--LEDo,LED1o : OUT STD_LOGIC;
VGA_R,VGA_G,VGA_B : OUT STD_LOGIC_VECTOR(3 downto 0)
);
end component;

---------------------------------------------------------------
begin
C1: SYNC port map (clk65MHz,reset_n,
HSYNC,
VSYNC,
VGA_R          =>  VGA_R,
VGA_G          =>  VGA_G,
VGA_B          =>  VGA_B
);
C2              :  clock port map (clk100MHz,clk65MHz);
LED            <=  reset_n;
VGA_CLK        <=  clk65MHz;
end main;
(*.vhd)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity SYNC is
PORT(
reset_n: in STD_LOGIC;
clk65MHz: in STD_LOGIC;
HSYNC,VSYNC : OUT STD_LOGIC;
VGA_R,VGA_G,VGA_B : OUT STD_LOGIC_VECTOR(3 downto 0)
);
end SYNC;

architecture main of SYNC is

SIGNAL HPOS: INTEGER  RANGE 0 TO 1344:=0; --1688:=0;
SIGNAL VPOS: INTEGER  RANGE 0 TO 806:=0; --1066:=0;

begin

process (clk65MHz,reset_n)

begin 
IF rising_edge(clk65MHz) and reset_n = '1' then
								if HPOS=740 or VPOS=554 then
									VGA_R<=(OTHERS=>'1');
									VGA_G<=(OTHERS=>'1');
									VGA_B<=(OTHERS=>'1');
									else
									VGA_R<=(OTHERS=>'0');
									VGA_G<=(OTHERS=>'0');
									VGA_B<=(OTHERS=>'0');
								end if;
								if HPOS<1344 then 
								HPOS<=HPOS+1;
								else
								HPOS<=0;
                           if VPOS<806 then
                           VPOS<=VPOS+1;
                           else
                           VPOS<=0;
                           end if;
                        end if;
                        
								if HPOS>24 and HPOS<160
								then
                        HSYNC<='0';
                        else
                        HSYNC<='1';
                        end if;
                        
								if VPOS>3 and VPOS<9 then
                        VSYNC<='0';
                        else
                        VSYNC<='1';
                        end if;
   
	    if ((HPOS>0 and HPOS<320)or(VPOS>0 and VPOS<38))then
       VGA_R<=(others=>'0');
       VGA_G<=(others=>'0');
       VGA_B<=(others=>'0');
       end if;
end if;

end process;
end main;

clock.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity clock is
	port (
		clk100MHz: in std_logic;
		clk65MHz: out std_logic
	);
end clock;

architecture Behavioral of clock is	

	signal Counter: std_logic_vector(25 downto 0);
	signal CLK_1Hz: std_logic;
	
begin
Prescaler: process(clk100MHz)
	begin
		if rising_edge(clk100MHz) then
			if Counter < "10111110101111000010000000" 
			then
				Counter <= Counter + 64999999;
			else
				CLK_1Hz <= not CLK_1Hz;
				Counter <= (others => '0');
			end if;
		end if;
end process prescaler;
clk65MHz <= CLK_1Hz;
end Behavioral;

my UCF file,

NET "clk100MHz"  LOC = "AB14"; --clock from ML405 clock generator
NET "VGA_CLK"    LOC = "AC7";  --clock to ADV7125
NET "reset_n"    LOC = "d6"; 
NET "LED"        LOC = "A10";
#NET "LED1"       LOC = "B10";
#NET "LED2"         LOC = "F13";
####################### VGA ######################

NET "VGA_B<0>"  LOC = "f4"  ; 
NET "VGA_B<1>"  LOC = "j4"  ; 
NET "VGA_B<2>"  LOC = "g9"  ; 
NET "VGA_B<3>"  LOC = "j5"  ; 
#NET "VGA_B<4>"  LOC = "h3"  ; 

NET "VGA_G<0>"  LOC = "j3"  ; 
NET "VGA_G<1>"  LOC = "k7"  ; 
NET "VGA_G<2>"  LOC = "k3"  ; 
NET "VGA_G<3>"  LOC = "g10"  ; 
#NET "VGA_G<4>"  LOC = "k6"  ; 

NET "VGA_R<0>"  LOC = "f3"  ; 
NET "VGA_R<1>"  LOC = "h7"  ; 
NET "VGA_R<2>"  LOC = "e3"  ; 
NET "VGA_R<3>"  LOC = "g5"  ; 
#NET "VGA_R<4>"  LOC = "d3"  ;
#####################  SYNCs  ########################
NET "HSYNC"  	  LOC = "C3"  ; 
NET "VSYNC"  	  LOC = "D4"  ; 
I had a look at the datasheet at http://web.mit.edu/6.111/www/f2009/handouts/labs/ADV7125.pdf

Maybe you also need to drive the "blank" pin, or the "psave"....

It would pay to check the schematic...
On Wednesday, November 25, 2015 at 2:29:15 AM UTC+6, Mike Field wrote:
> I had a look at the datasheet at http://web.mit.edu/6.111/www/f2009/handouts/labs/ADV7125.pdf > > Maybe you also need to drive the "blank" pin, or the "psave".... > > It would pay to check the schematic...
Hello , thank you for your answer. I generate psave,nsync,nblank and 5 common signals and it starts to work normal, thank you everyone !!!