2014-09-17 2 views
3

이전에 설계된 1 비트 ALU를 사용하여 8 비트 ALU를 설계하기 위해 VHDL 프로젝트에서 작업하고 있습니다. 이렇게하려면 비트 0과 7이이 블록 외부에서 처리되는 동안 generate 문을 사용하여 ALU의 1-6 비트를 생성합니다. 무슨 일이 일어나는가가 ALU를 시뮬레이션하기 위해 갈 때 비트 1-6은 입력 값이 무엇이든 값을 변경하지 않습니다. ALU가 잘 작동하는 것을 알고 있습니다. 왜냐하면 8 비트 ALU를 수동으로 예상대로 작동시키기 때문입니다.VHDL 생성 문에서 구성 요소가 올바르게 인스턴스화되지 않았습니다.

나는 무슨 일이 일어나고 있는지 생각하는 이유는 무엇이든, 생성 블록 내부의 구성 요소 인스턴스화가 제대로 컴파일되지 않고 있다는 것입니다. ModelSim에서 시뮬레이션을 실행하려고하면 "component instance bit1_6 : bitslice is bound"라는 메시지가 스크립트에 나타납니다. 무슨 일이 벌어지고 있는지 설명하기 위해, firstGen 아키텍처에 게시 한 코드는 컴파일하지 않고 "bit1_6 : bitlice 레이블이 없습니다."(for ALL을 사용하면 ... 잘못된 동작을 마스크합니다. lsb 및 msb는 인스턴스화 된 상태입니다.) 아무도 무슨 일이 일어나고 있는지 알고 있습니까?

ENTITY alu8bit IS 
PORT(A, B : IN bit_vector(7 downto 0); 
    P,K,R : IN bit_vector(3 downto 0); 
    ci : IN bit; 
    Z : OUT bit_vector(7 downto 0); 
    co : OUT bit); 
END; 

ARCHITECTURE firstGen of alu8bit IS 

COMPONENT bitslice 
    PORT(a, b, ci: IN bit; 
     P, K, R : IN bit_vector(3 downto 0); 
     ri, cn: OUT bit); 
END COMPONENT; 

FOR bit1_6: bitslice USE ENTITY work.one_bit_alu(alu_1_bit); 
FOR others : bitslice USE ENTITY work.one_bit_alu(alu_1_bit); 
signal c : bit_vector(7 downto 1); 
BEGIN 
    lsb : bitslice PORT MAP(A(0), B(0), ci, P, K, R, Z(0), c(1)); 
    GEN_MIDDLE_BITS: FOR I IN 1 TO 6 GENERATE 
     bit1_6 : bitslice PORT MAP(A(I), B(I), c(I), P, K, R, Z(I), c(I+1)); 
    end generate; 
    msb : bitslice PORT MAP(A(7), B(7), c(7), P, K, R, Z(7), co); 
END; 

답변

3

generate 문은 추가 계층 구조를 네임 스페이스에 추가합니다. 내부 구성 사양을 사용하는 경우 즉시 범위 내에서 구성 요소를 구성하는 것으로 제한됩니다. 생성 (또는 블록) 내부의 모든 항목에 도달 할 수 없게됩니다. 당신은 중간 조각 바인딩 구성을 지정하기 위해 생성 문의 선언적 영역을 사용할 수 있습니다

GEN_MIDDLE_BITS: FOR I IN 1 TO 6 GENERATE 
    for bit1_6 : bitslice use entity work.one_bit_alu(alu_1_bit); 
begin 
    bit1_6 : bitslice PORT MAP(A(I), B(I), c(I), P, K, R, Z(I), c(I+1)); 
end generate; 

는 또한 모든 것을 함께 유지하기 위해 외부 구성 선언을 사용하여 고려할 수 있습니다. 원하는 경우 VHDL-93 다이렉트 엔티티 인스턴스화와 유사하게 구성을 인스턴스화 할 수 있습니다.

관련 문제