정수에서 STD_LOGIC_VECTOR을 빼는 데 문제가 있습니다. 내가 정수의 이름 XAS에서 빼기를 넣어하려고정수에서 std_logic_vector를 뺍니다.
xas := hpos - to_integer(unsigned(hcount));
:
entity ROM is
Port ( hcount: in STD_LOGIC_VECTOR(9 downto 0);
vcount: in STD_LOGIC_VECTOR(9 downto 0);
hpos: in integer;
vpos: in integer;
clk25: in STD_LOGIC;
Pixeldata: out std_logic);
end ROM;
architecture Behavioral of ROM is
signal romtemp : std_logic_vector(9 downto 0);
shared variable yas : integer range 0 to 9 := 0;
shared variable xas : integer range 0 to 9 := 0;
Type RomType is array (9 downto 0) of std_logic_vector(9 downto 0);
Constant Rom: RomType :=
("0001111000", "0111111110", "0111111110", "1111111111", "1111111111"
, "1111111111", "1111111111", "0111111110", "0111111110", "0001111000");
begin
process(clk25)
begin
if(hpos > hcount - 10) and (hpos <= hcount) and (vpos > vcount - 10) and (vpos <= vcount) then
xas := hpos - to_integer(unsigned(hcount));
end if;
end process;
end Behavioral;
문제는 다음 코드 줄은 다음과 같습니다
이
내가 지금 가지고있는 코드입니다.다음과 같은 오류가 그 라인에서 발생 :이 오류와 함께 나를 도울 수
Error: Multiple declarations of unsigned included via multiple use clauses; none are made directly visible
Error: Expecting type unsigned for < unsigned(hcount) >.
Error: Formal < arg > has no actual or default value.
Error: Type integer is not an array type and cannot be indexed
Error: found '0' definitions of operator "=", cannot determine exact overload matching definition for "-"
누군가? 당신은 파일의 상단에 use
조항을 포함하지 않은
마지막 항목은 매우 중요합니다. 자신이하는 일을 모르는 경우 공유 변수를 사용하지 마십시오. 프로세스 범위에서 변수를 사용하거나 아키텍처 범위에서 신호를 사용하십시오. 그것이 당신이 성취하려는 것을 위해 효과가 없다면, 나는 당신이 다른 프로그래밍 언어에서 왔음을 기대한다. VHDL은 하드웨어 디자인 언어입니다. 코드에서 많은 것이 가능하지만 결국에는 레지스터와 로직으로 생각해야합니다. 예를 들어 전파 지연이 0과 같이 모든 것이 가능한 것은 아닙니다. – JHBonarius