2014-07-17 5 views
0

ISE에서 VHDL 모듈을 생성하고 해당 스키 매틱 심볼을 생성했습니다. 심볼의 버스가 회로도 편집기에서 속성을 사용하여 지정되는 가변 너비가되도록하고 싶습니다. 전체 프로젝트 DRC는 괜찮습니다.하지만 최상위 회로도를 합성하려고 시도 할 때 '가변'으로 지정된 각 포트에 오류가 발생합니다. 나는 이것을 상식으로 만들었고 예제는 herehere으로 나열했다. 모듈심볼 포트상의 일반적인 맞춤형 버스 너비

VHDL (4 × 256 넓은 버스에 접속 회로도) 모듈

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity BUS_SWITCHER is 
    generic (
     WIDTH : integer := 1 -- Structure 
    ); 

    port (
     A : in STD_LOGIC_VECTOR (WIDTH - 1 downto 0); 
     B : in STD_LOGIC_VECTOR (WIDTH - 1 downto 0); 
     X : out STD_LOGIC_VECTOR (WIDTH - 1 downto 0); 
     Y : out STD_LOGIC_VECTOR (WIDTH - 1 downto 0); 
     S : in STD_LOGIC 
    ); 
end BUS_SWITCHER; 

architecture Behavioral of BUS_SWITCHER is 
begin 
    process (A, B, S) 
    begin 
     if S = '1' then 
      X <= B; 
      Y <= A; 
     else 
      X <= A; 
      Y <= B; 
     end if; 
    end process; 
end Behavioral; 

기호 :

Screenshot (via Imgur)

속성 창

Screenshot (via Imgur)

오류 로그 :이 모듈을 인스턴스화하는 경우

ERROR:DesignEntry:20 - Pin "A(0:0)" is connected to a bus of a different width. 
ERROR:DesignEntry:20 - Pin "B(0:0)" is connected to a bus of a different width. 
ERROR:DesignEntry:20 - Pin "Y(0:0)" is connected to a bus of a different width. 
ERROR:DesignEntry:20 - Pin "X(0:0)" is connected to a bus of a different width. 

답변

0

, 당신은 동일한 폭의 std_logic_vector로 묶을 필요가있다. 그래서이 경우, 상위 레벨 모듈은 std_logic_vector (0 downto 0) 인 중개 신호를 생성해야합니다. 단일 std_logic에 그것을 변환 할 경우로는 다음 것을 수행 할 수 있습니다

single_bit <= entire_vector(0); 

나는 이런 이유로 길이 1 std_logic_vectors을 피하려고, 그들은 고통이 될 수 있습니다.

+0

어쩌면 내가 내 질문을 아주 잘 말하지 않았으므로 변수 * 너비 포트를 만들려고합니다. 이미지에서 단일 너비'std_logic_vector'라는 사실은 기본값을 설정했기 때문입니다. 문제는 제네릭의이 기본값이 인스턴스에 지정된 특성에 의해 무시되지 않는다는 것입니다. – MTCoster

+0

@MTCoster 엔티티 및 패키지 파일 (사용하는 경우)에서 기본값을 제거하십시오. 인스턴스화 할 때만 재정의 값을 지정하십시오. – Russell