2014-10-24 2 views
0

멀티플렉서 용 "템플릿"을 작성했습니다.VHDL : 입력 값을 할당하는 방법은 무엇입니까?

제 목표는 s = "01"또는 s = "11"일 때 y = 1입니다.

이제 d0과 그 값을 어떻게 연결해야합니까?

(이 예에서 D0는 0, D1 = 1, D2 = 0, D3 = 1을 유지해야합니다.)

library IEEE; 
use IEEE.std_logic_1164.all; 

entity mux4v1 is 

port(
     d0 : in std_logic; -- 0 
     d1 : in std_logic; -- 1 
     d2 : in std_logic; -- 0 
     d3 : in std_logic; -- 1 
     s : in std_logic_vector(1 downto 0); -- my inputs controller via switches 
     y : out std_logic 
    ); 

end mux4v1; 


architecture struct of mux4v1 is 

begin 
    with s select 
    y <= d0 when "00", 
     d1 when "01", 
     d2 when "10", 
     d3 when "11"; 
end struct; 

답변

1

내가 입력 한 내용에 '0''1'을 어떻게 입력하는지 생각해보십시오.

대답은 외부에서 mux를 사용하는 디자인입니다.

시뮬레이션의 경우 상위 레벨 디자인을 작성하고 그 안에 멀티플렉서를 인스턴스화합니다. 더 높은 수준의 디자인은 마이크로 프로세서와 같을 수 있지만 여기에서는 단순히 멀티플렉서를 테스트하기를 원하므로 간단한 테스트 벤치를 작성할 수 있습니다.

일반적으로 테스트 벤치에는 입력 또는 출력이 없으므로 디자인의 최상위 레벨을 형성하고 시뮬레이터에서 실행합니다.

entity mux_tb is 
end mux_tb; 

내부, 그것은 대하여 장치의 출력과 비교하기 위해 클록 및 다른 신호들, 및 프로세스를 생성하는 DUT (피 시험 장비) 및 이들을 상호 연결하는 신호로 검사 된 모든 다른 구성 요소 및 프로세스를 포함 예상 된 값과 오류를보고합니다.

architecture simple of mux_tb is 

entity mux4v1 is 

signal test_d0 : std_logic := 0; 
signal test_d1 : std_logic := 1; 
signal test_d2 : std_logic := 0; 
signal test_d3 : std_logic := 0; 

signal sel : std_logic_vector(1 downto 0); 
signal output : std_logic; 

begin 

DUT : entity work.mux4v1 
port map(
     d0 => test_d0, 
     d1 => test_d1, 
     d2 => test_d2, 
     d3 => test_d3 
     s => sel, 
     y => output 
    ); 

Stimulus : process 
begin 
    sel <= "00"; 
    wait for 1 us; 
    sel <= "01"; 
    -- and so on 
end process; 

end simple; 

합성을 위해 FPGA에 MUX를 구현하기 만하면 그대로 합성 할 수 있습니다. 그런 다음 배치하고 라우팅하여 FPGA를 프로그래밍하는 비트 파일을 생성하기 전에 한 가지 추가 단계가 있습니다.

이 단계에서는 각 입력 및 출력 신호에 장치 핀을 할당합니다.

이러한 핀 할당은 FPGA의 배선 방법에 따라 작성한 제약 조건 파일에서 이루어집니다. 예를 들어 D0에 연결하는 스위치와 Y에 연결하려는 LED가있는 경우 보드의 회로도에서 스위치가 연결된 FPGA 핀을 찾아 해당 핀을 입력 D0에 연결하는 제약 조건을 작성합니다. 이 제약 파일의 구문 (및 몇 가지 예)은 FPGA 도구 문서에 있어야합니다.

0

그래서 당신은 질문이 있습니까? 브라이언이 대답을 지적한대로 시뮬레이션이나 분석 및 정교 작업에 문제가 있는지 여부는 명확하지 않습니다.

VHDL 설계 사양은 표준에 맞지 않습니다. VHDL 분석기가 오류를 생성하여 식 (with s select)이있는 행을 가리키며 선택 사항이 완료되지 않았 음을 알려야합니다.

선택한 할당 문에서 선택한 표현식, 파형 및 선택 사항의 특성은 해당 공정 문에서 case 문이 유효한 문이어야합니다.

선택된 신호 지정 문은 선택된 신호 할당과 동일한 case 문을 가진 동등한 처리 문으로 구체화됩니다. case 문은 표현식의 각 가능한 값에 대해 단일 선택을해야합니다 (예 : s"UU", "U0", "0U", "XX" 등의 가능한 선택을 갖는 std_logic_vector).

선택한 신호 지정 문과 동일한 처리 문에있는 동등한 case 문에는 완전한 선택 적용 범위가 없습니다. 당신은 others 선택이 필요하거나 선택 일치하도록 입력 범위를 좁힐 :

signal bs: bit_vector (s'range); 
begin 

    bs <= to_bitvector(s); 
    with bs select 
     y <= d0 when "00", 
      d1 when "01", 
      d2 when "10", 
      d3 when "11"; 

이 예는 선택 범위를 좁힐 to_bitvector을 사용합니다.

당신은 당신이 meta_value에 대한 'X'를 생성 할 수있는 사용하는 경우 : 함수의 반환 값의 하위 유형이 로컬 아니라고

signal bs: std_logic_vector (s'range); 
begin 

    bs <= to_x01(s); 
    with bs select 
     y <= d0 when "00", 
      d1 when "01", 
      d2 when "10", 
      d3 when "11", 
      'X' when others; 

그리고 사용되는 로컬로 선언 된 신호 (bs) 인 이유를 공전. 함수는 동적으로 정교 해지고 반환 유형은 입력 유형에서 파생됩니다.

두 가지 결과 중 하나를 사용하여 코드를 수정하고 정교하게 수정하십시오. 또한 표준을 준수하지 않고 선택 범위에 대해 불평하지 않는 도구를 찾는 것이 가능합니다.

또한이 경우에 당신이 s의 모든 이진 값을 포함하고 메타 값 또는 'H'와 'L'커버하지 않음으로써 래치를 추론하지 않는 대신 조건 신호 할당을 사용할 수

architecture foo of mux4v1 is 
begin 
    y <= d0 when s = "00" else 
     d1 when s = "01" else 
     d2 when s = "10" else 
     d3 when s = "11"; 
end architecture; 

동시 신호 할당은 동등한 process 문에서 case 문을 사용하지 않고 if-then-else 구문을 사용합니다.

관련 문제