2015-01-02 2 views
3

나는 inout 매개 변수가 무엇이며 어떻게 사용하는지 알고 있습니다. 우리는 SRAM의 인스턴스를 생성하고 그런 다음 코드로에 쓸 수inout 매개 변수는 어떻게 구현됩니까?

LIBRARY ieee; 
USE ieee.std_logic_1164.ALL; 

ENTITY sram IS 
    port(
     clk : IN std_logic; 
     wr : IN std_logic; 
     io : INOUT std_logic; 
     addr : IN INTEGER RANGE 0 TO 7 
    ); 
END sram; 

ARCHITECTURE behavioral OF sram IS 
    TYPE matrix IS ARRAY (0 TO 7) OF std_logic; 
    SIGNAL mem : matrix; 
BEGIN 
    PROCESS(clk) 
    BEGIN 
     IF rising_edge(clk) THEN 
      IF wr = '1' THEN 
       mem(addr) <= io; 
      END IF; 
     END IF; 
    END PROCESS; 
    io <= mem(addr) WHEN wr = '0' ELSE 'Z'; 
END behavioral; 

:

io <= '1' WHEN wr = '1' ELSE 'Z'; 
우리가 입출력 매개 변수 io가 및 다음 코드로 양방향 정적 RAM을 작성한다고 가정

질문 : 어떻게 합성 도구가 여러 할당을 제어하고 여러 드라이버를 판단 할 수 있습니까? 어떤 하드웨어가 구현 되나요? 의견과 답변을


감사합니다 ... 일반적인 FPGA 및 ASIC 장치, 트라이 스테이트 기능의 구현은 알테라의 Arria 10 FPGA의 예처럼 IO에서만 구할 수 있습니다

+0

실리콘 공급 업체는 누구입니까? 문제의 이유는 3 상태 버스가 지원되지 않는다면 문제는 의문의 여지가 있다는 것입니다. – user1155120

+0

'Z'처리 방법에 대한 규칙은 현재 폐기 된 IEEE Std 1076.6-2004, 6.3 3 상태 논리 및 버스, 6.3.1 'Z'할당의 3 상태 논리, 6.3.2 3 상태 논리 및 버스 로직과 가드 연결 해제. 3- 상태 출력을 갖는 RAM의 예가 6.5.2 RAM의 예 2와 3에 나와 있습니다. 양방향 버스를 허용하는 실리콘 공급 업체를 찾기 란 어려울 것입니다. 어느 쪽도 RAM 예제에서는 하나도 사용하지 않습니다. 역사적으로 ASIC 3 상태 버스에 활성 터미네이터가 있어야했습니다. bidir 버퍼가있는 칩 가장자리에는 in 포트와 out 포트가 있습니다. – user1155120

+0

데이빗 감사합니다. 양방향 버퍼가있는 ASIC 3 개 상태 버스에서이 작업을 수행 할 수 있습니까? 칩 내부에서 지원 되는가 아니면 IO 핀만을위한 것인가? – Amir

답변

2

:

enter image description here

이러한 장치의 경우 내부 RAM은 항상 전용 입출력 포트로 구현되므로 내부 트라이얼 기능을 사용하지 않습니다.

트라이 스테이트를 지원하는 외부 IO에 RAM을 연결하는 경우에도 내부 RAM 블록은 일반적으로 전용 입출력 포트를 통해 생성되므로 장치의 트라이 스테이트 가능 핀에 대한 연결은 in- 출력 버퍼는 출력 인 에이블 및 트라이 스테이트 기능을 갖는다.

내부 디자인이 장치에서 지원되지 않는 경우 3 중 기능 또는 여러 드라이버를 사용하려고하면 일반적으로 합성 도구가 생성하고 오류가 발생하며 일반적으로 여러 드라이버가 동일한 네트워크에서 지원되지 않는다고 말합니다.

+0

고마움 Morten. 칩 내부에 양방향 RAM을 구현할 수 없다는 뜻입니까? 일부 디바이스 만 IO에서이를 지원합니까? 당신은 자일링스 spartan3 (3s400)이 그것을 지원한다고 생각하니? – Amir

+0

자일링스의 스파르탄 -3은 칩상의 양방향 신호를 지원하지 않는다. 오직 양방향 IO. ASIC 및 FPGA의 초창기에는 버스에서 Mux를 피할 수있을 때 게이트를 절약 할 수 있었기 때문에 온칩 양방향 신호가 사용되었습니다. 그러나 스캔 체인으로 테스트하기 어려운 온칩 양방향 신호는 전류 스파이크를 유발하여 전압 강하를 일으킬 수있는 드라이버가 충돌 할 위험이 있으므로 게이트가 충분 해 버스 타이밍이 중요하지 않은 경우 온칩 양방향 신호 사용이 중단되었습니다. 임계 경로. –

+0

고마워 Morten. 너 나 많이 도와 줬어. – Amir

2

자일링스 디바이스의 회로도는 유사합니다.

프리미티브 IOBUF의 이미지이다 :
IOBUF

녹색 부분 삼상 제어 출력 드라이버; 파란색 부분이 입력 드라이버입니다.

  • IOB 레지스터 (입력, 출력, 삼상 제어)
  • 지연 체인 차동 IOB (두 IOBs을 결합
  • 와이어 ** : 완전한 IOB (입력/출력 블록)은 여러 프리미티브 이루어져 BUFDS) (CC-IOB를 시계 네트워크를 구동
  • 기능 - 클럭 할 수 IOB)
  • 풀업, 풀다운, ...
  • 드라이버 (IOBUF)
  • 핀/볼 (IPAD, OPA D, IOPAD) - 이것은 ESD 보호를 포함합니다.

합성은 어떻게 작동합니까?

  • 자일링스 합성 도구 (XST/신디)은 최상위 구성 요소의 포트 설명의 모든 전선에 대한 IPAD 또는 OPAD 프리미티브를 추가합니다.패드는 FPGA 패키지 아래의 물리적 핀 또는 볼을 나타내는 기본 요소 일뿐입니다.
  • I/O 버퍼를 자동으로 추가 할 수있는 경우이 도구는 모든 PAD와 최상위 포트 사이에 IBUF, OBUF, IOBUF, IBUFDS, ... 프리미티브를 추가합니다. 포트 방향 (in, out, inout)을 사용하여 올바른 버퍼 유형을 추론합니다. 이 옵션이 비활성화 된 경우 (기본값 = on) 모든 I/O 핀에 대한 버퍼를 수동으로 추가해야합니다. 어떤 경우에는 XST가 불쾌 해집니다. XST가 누락 된 버퍼를 추론하지 못하도록 몇 가지 IOBUF를 수동으로 추가했습니다. 그래서 ... 손으로 모든 버퍼를 추가했다

자일링스 XST를 사용하는 동안은 최상위 아래 트라이 스테이트 버스 (포트 방향 = 입출력)를 사용하는 것이 가능. XST는 (가상) 3 상태 버퍼를 추가했다고보고합니다. 이러한 버퍼는 버스의 각 비트 방향이 분명한 방향을 갖고 다중 드라이버 문제가없는 경우 트리밍됩니다.

iSim에서는 작동하지 않습니다.

+0

Paebbels 정말 고마워요. 당신의 설명이 도움이되었습니다. – Amir