에서 변수를 공유하고이 프로그램 (sequence.vhd)의 합성에 약간의 문제가있어 :내가 VHDL에서 (ISE 프로젝트 네비게이터와) 새로 온 사람 VHDL
LIBRARY ieee ;
USE ieee.std_logic_1164.all;
PACKAGE mypack IS
VARIABLE counter: STD_LOGIC := '0' ;
VARIABLE simultaneous : STD_LOGIC := '0' ;
END PACKAGE mypack;
LIBRARY ieee ;
USE ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--library work;
USE WORK.mypack.ALL;
ENTITY secuencia IS
PORT(
polh : IN STD_LOGIC; --uno
polv : IN STD_LOGIC; --cero
seq : OUT std_logic_vector(8 downto 0):= (others => 'Z')
);
END secuencia;
ARCHITECTURE registro OF secuencia IS
SIGNAL stack : std_logic_vector(1000 downto 0);
BEGIN
PROCESS(polh, polv)
BEGIN
IF (polh'event) and (polh='1') and (polv='0')THEN
stack(counter) <= '1';
counter := counter +1;
ELSE IF (polv'event) and (polv='1') and (polh='0')THEN
stack(counter) <= '0';
counter := counter +1;
ELSE IF (polh'event) and (polh='1') and (polv'event) and
(polv='1') THEN
simultaneous := simultaneous+1;
END IF;
END PROCESS;
END registro;
을 그리고 이러한 처음 두를 수 있습니다 오류 :
5 행. 여기서는 SHARED 변수 만 선언 할 수 있습니다.
Line 6. 여기서 SHARED 변수 만 선언 할 수 있습니다.
그래서 내 선언 된 변수에 문제가 있습니다 ... 목적은 아키텍처에서 사용하는 것입니다. 나는 초보자 문제라고 확신하지만 해결책을 볼 수는 없다. 정말 고마워!
PD : @Martin 톰슨을 돕는
들으 : 미안, 제대로
UPDATE를 코드를 포맷 할 수 있습니다. 나는 당신이 제안한 것과 지금 다른 타입이나 문제가있는 것을했습니다. 나는 그것에 대해 조사해 왔지만 그것은 광범위한 원인을 가진 것으로 보인다. 여기 코드
ENTITY secuencia IS
PORT(
polh : IN STD_LOGIC; --uno
polv : IN STD_LOGIC; --cero
Pedido : IN STD_LOGIC;
DatoListo : OUT STD_LOGIC;
seq : OUT std_logic_vector(1000 downto 0):= (others => 'Z')
);
END secuencia;
ARCHITECTURE registro OF secuencia IS
SIGNAL stack : std_logic_vector(1000 downto 0);
BEGIN
PROCESS(polh, polv, Pedido)
variable counteria : natural;
variable Listo : integer;
variable simultaneo : integer;
BEGIN
IF (counteria < 1000) THEN
IF (polh'event AND polh='1' AND polv='0') THEN
--IF (polh='1' AND polv='0') THEN
stack(counteria) <= '1';
counteria := counteria +1;
ELSIF (polv'event AND polv='1' AND polh='0') THEN
--ELSIF (polv='1' AND polh='0') THEN
stack(counteria) <= '0';
counteria := counteria +1;
ELSIF (polh'event AND polh='1' AND polv'event AND polv='1') THEN
simultaneo := simultaneo+1;
END IF;
ELSIF (counteria = 1000)THEN
DatoListo <='1';
IF (Pedido='1')THEN
Seq <= stack;
counteria := 0;
DatoListo <='0';
END IF;
END IF;
END PROCESS;
END registro;
이며이 오류를
라인 25 준다 : 신호가 합성 될 수 없다> 스택 나쁜 동기 설명. 에 사용중인 설명 스타일이 현재 소프트웨어 릴리스에서 지원되는 이 아닌 동기 요소 (레지스터, 메모리 등)를 설명합니다.
업데이트 2 :
나는 일부 내용을 변경하고 프로그램의 일부를 주석이, 그것은 합성 :
PROCESS(polh, polv, Pedido)
variable counteria : natural := 0;
variable Listo : integer;
variable simultaneo : integer;
BEGIN
IF (counteria < 1000) THEN
IF rising_edge(polh) THEN
IF (polv='0') THEN
stack(counteria) <= '1';
counteria := counteria + 1;
END IF;
-- ELSIF rising_edge(polv) THEN
-- IF (polh='0') THEN
-- stack(counteria) <= '0';
-- counteria := counteria +1;
-- END IF;
-- END IF;
ELSIF (counteria = 1000)THEN
DatoListo <='1';
IF (Pedido='1')THEN
Seq <= stack;
counteria := 0;
DatoListo <='0';
ENDIF;
END IF;
END PROCESS;
END registro;
이 합성을. 그러나 ELSIF rising_edge(polv) THEN
부분의 주석을 제거하면 동일한 문제가 발생합니다. Signal stack<counteria<9:0>> cannot be synthesized...