vhdl - can't determine definition of operator ""-"" -
i've got error operator "-". using signed type , ieee.numeric_std. ask if usage of "for" correct.
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_signed.all; use ieee.std_logic_textio.all; use ieee.numeric_std.all; entity stage_1 port ( clk : in bit; imagem: in signed (19999 downto 0); imagemanterior: in signed (19999 downto 0); ix: out signed (24999 downto 0); iy: out signed (24999 downto 0); it: out signed (24999 downto 0) ); end stage_1; architecture behavioral of stage_1 begin process (clk) begin if (clk 'event , clk = '1') in 0 2448 loop ix(i*10+9 downto i*10) <= 1/4 * (imagemanterior((i+1)*8+7 downto (i+1)*8) - imagemanterior(i*8+7 downto i*8) + imagemanterior ((i+1)*8+407 downto (i+1)*8+400) - imagemanterior(i*8+407 downto i*8+400) + imagem((i+1)*8+7 downto(i+1)*8) - imagem(i*8+7 downto i*8)+ imagem((i+1)*8+407 downto(i+1)*8) - imagem((i)*8+407 downto i*8 +400)); iy(i*10+9 downto i*10) <= 1/4*(imagemanterior((i*8)+407 downto (i)*8+400) - imagemanterior(i*8+7 downto i*8) + imagemanterior((i+1)*8+407 downto (i+1)*8) - imagemanterior((i+1)*8+7 downto(i+1)*8) + imagem(i*8+407 downto i*8+400) - imagem(i*8+7 downto i*68) + imagem((i+1)*8+407 downto (i+1)*8+400) -imagem((i+1)*8+7 downto(i+1)*8)); it(i*10+9 downto i*10) <= 1/4 * (imagem(i*8+7 downto i*8)- imagemanterior((i*8+7)-i*8) + imagem((i*8)+407 downto i*8+400)- imagemanterior(i*8+407 downto i*8+400) +imagem((i+1)*8+7 downto(i+1)*8)- imagemanterior((i+1)*8+7 downto(i+1)*8) + imagem((i+1)*8+407 downto (i+1)*8+400)- imagemanterior((i+1)*8+407 downto (i+1)*8+400)); end loop; end if ; end process; end behavioral;
i commented out assignments not involved in error.
you have provided indication of (pointed line) error associated with.
you had - operator instead of downto in specifying range of right hand operand of - operator error complaining about. marked comment:
-- downto "-" you have provided minimal, complete, , verifiable example, in case have implied throwing things out not associated error.
library ieee; use ieee.std_logic_1164.all; -- use ieee.std_logic_signed.all; -- use ieee.std_logic_textio.all; use ieee.numeric_std.all; entity stage_1 port ( clk: in bit; imagem: in signed (19999 downto 0); imagemanterior: in signed (19999 downto 0); ix: out signed (24999 downto 0); iy: out signed (24999 downto 0); it: out signed (24999 downto 0) ); end entity stage_1; architecture behavioral of stage_1 begin process (clk) begin if (clk 'event , clk = '1') in 0 2448 loop --ix(i*10+9 downto i*10) <= 1/4 * (imagemanterior((i+1)*8+7 downto (i+1)*8) - imagemanterior(i*8+7 downto i*8) + imagemanterior ((i+1)*8+407 downto -- (i+1)*8+400) - imagemanterior(i*8+407 downto i*8+400) + imagem((i+1)*8+7 downto(i+1)*8) - imagem(i*8+7 downto i*8)+ imagem((i+1)*8+407 downto(i+1)*8) - imagem((i)*8+407 downto i*8 +400)); --iy(i*10+9 downto i*10) <= 1/4*(imagemanterior((i*8)+407 downto (i)*8+400) - imagemanterior(i*8+7 downto i*8) + imagemanterior((i+1)*8+407 downto (i+1)*8) - imagemanterior((i+1)*8+7 downto(i+1)*8) + imagem(i*8+407 downto i*8+400) - imagem(i*8+7 downto i*68) + imagem((i+1)*8+407 downto (i+1)*8+400) -imagem((i+1)*8+7 downto(i+1)*8)); it( i*10 + 9 downto * 10) <= 1/4 * ( imagem(i * 8 + 7 downto * 8) - imagemanterior( (i * 8 + 7) downto * 8) + -- downto "-" imagem((i * 8 )+ 407 downto * 8 + 400) - imagemanterior( * 8 + 407 downto * 8 + 400) + imagem((i + 1) * 8 + 7 downto( + 1) * 8) - imagemanterior((i + 1) * 8 + 7 downto(i + 1) * 8) + imagem((i + 1) * 8 + 407 downto (i + 1) * 8 + 400) - imagemanterior((i + 1) * 8 + 407 downto (i + 1) * 8 + 400) ) ; end loop; end if ; end process; end architecture behavioral; after change of - operator reserved word downto code analyzes (and make no claim run, requires test bench drive clk).
adding rudimentary testbench drive clk
shows first assignment:
ix(i*10+9 downto i*10) <= 1/4 * (imagemanterior((i+1)*8+7 downto (i+1)*8) - imagemanterior(i*8+7 downto i*8) + imagemanterior ((i+1)*8+407 downto (i+1)*8+400) - imagemanterior(i*8+407 downto i*8+400) + imagem((i+1)*8+7 downto(i+1)*8) - imagem(i*8+7 downto i*8)+ imagem((i+1)*8+407 downto(i+1)*8) - imagem((i)*8+407 downto i*8 +400)); produces range error (the range of expression on right hand side doesn't match range of slice on left hand side).
the same occurs second assignment:
iy(i*10+9 downto i*10) <= 1/4*(imagemanterior((i*8)+407 downto (i)*8+400) - imagemanterior(i*8+7 downto i*8) + imagemanterior((i+1)*8+407 downto (i+1)*8) - imagemanterior((i+1)*8+7 downto(i+1)*8) + imagem(i*8+407 downto i*8+400) - imagem(i*8+7 downto i*68) + imagem((i+1)*8+407 downto (i+1)*8+400) -imagem((i+1)*8+7 downto(i+1)*8)); as last (having - operator instead of downto, corrected).
these run time errors.
Comments
Post a Comment