전술한 것과 같이, 인터럽트 제어기에 관련하여 기능 안전을 제공하기 위해서는, 일반적으로 인터럽트 제어기를 복제하는 것이 필요할 것으로 생각되어, 상당한 면적 불이익을 제공한다.
이에 대한 대안으로서, 각각의 물리 인터럽트에 대해 인터럽트 제어기로부터 프로세서 코어로의 2개의 인터럽트 라인을 설치할 수도 있다. 그후, 특정한 인터럽트를 프로세서 코어에 2회 전달할 수도 있으며, 각각의 인터럽트에 대해 코어 상에서 인터럽트 서비스 루틴이 실행될 때, 두 번째 인터럽트가 첫 번째 인터럽트의 복제본인 것을 알 수 있도록 구성된다. 동일한 프로세서 코어에 의해 모든 인터럽트(즉, 원본 및 복제본)가 적절히 수신되는 경우, 물리 인터럽트가 신뢰할 수 있게 수신될 것이다. 그러나, 이와 같은 기술의 문제점은, 각각의 물리 인터럽트에 대해 프로세서 코어 내에서 인터럽트 서비스 루틴이 2회 호출되는 것을 포함하게 되어, 상당한 성능상의 불이익을 발생한다는 것이다.
일 구성예에서는, 한 개 이상의 인터럽트 소스들로부터 인터럽트들을 수신하는 인터럽트 소스 인터페이스를 갖는 인터럽트 제어기가 제공된다. 인터럽트 소스들은, 다양한 다른 형태를 취할 수 있으며, 예를 들어, 인터럽트 제어기를 포함하는 시스템 내부의 다수의 주변기기일 수도 있다. 시스템은, 한 개 이상의 처리장치들, 예를 들어 프로세서 코어들을 더 포함하고, 인터럽트 제어기의 주된 기능은 각각의 인터럽트를 다수의 인터럽트 소스들로부터 적절한 처리장치로 신뢰할 수 있게 전달하고, 그후 처리장치가 인터럽트 서비스 루틴을 실행하여 인터럽트를 처리하도록 구성되는 것이다.
인터럽트 제어기는 처리장치와 각각 관련되는 복수의 출력 인터페이스를 더 갖는다. 처리장치에 인터럽트 요구가 발행되면, 이 처리장치는 인터럽트 서비스 루틴을 실행하도록 구성되고, 처리장치에 대한 이와 같은 인터럽트 요구의 전달은 관련된 출력 인터페이스(일반적으로 처리장치 인터페이스와 상호작용하는 출력 인터페이스)에 의해 제어된다.
인터럽트 소스 인터페이스는, 각각의 수신된 인터럽트에 대해, 인터럽트를 표시하는 원본 트랜잭션과 인터럽트를 표시하는 복제 트랜잭션을 발생하도록 구성된 트랜잭션 발생회로를 구비한다. 따라서, 인터럽트 제어기 내에서, 다양한 수신된 인들이 트랜잭션들로서 처리되고, 인터럽트 제어기 내부에서 각각의 트랜잭션이 실제로 복제된다.
인터럽트 제어기는, 각각의 수신된 인터럽트에 대해 원본 트랜잭션과 복제 트랜잭션 모두를 버퍼링하는 버퍼회로와, 버퍼회로로부터 트랜잭션들을 선택하고 선택된 트랜잭션의 어드레스 부분에 의해 식별된 출력 인터페이스에 의해 수신하기 위해 각각의 선택된 트랜잭션을 전송하는 선택회로를 더 갖는다. 특히, 어떤 처리장치가 어떤 특정한 인터럽트를 처리할 것인지에 대한 지식에 근거하여, 이 인터럽트에 대해 트랜잭션이 발생될 때, 그것의 어드레스 부분이 이 처리장치에 대한 대응하는 출력 인터페이스를 식별함으로써, 트랜잭션이 인터럽트 제어기를 거쳐 적절한 출력 인터페이스로 전송하게 할 수 있도록 구성될 수 있다.
선택회로는, 다양한 형태를 취할 수 있지만, 일반적으로 파이프라인 구조를 갖는다. 그 결과, 다수의 보류중인 트랜잭션들이 특정한 시점에 인터럽트 제어기 내에서 "인 플라이트(in flight)"일 수 있다는 것을 알 수 있다.
각각의 출력 인터페이스는 대기행렬 스토리지를 갖도록 구성되고, 대기행렬 스토리지는 복수의 대기행렬 엔트리들을 포함하고, 각각의 대기행렬 엔트리는 출력 인터페이스에 의해 수신된 트랜잭션에 할당된다. 그후, 이 대기행렬 엔트리를 사용하여 트랜잭션의 데이터 부분에 의해 제공된 인터럽트 식별 정보를 기억한다. 본 발명에서 설명하는 기술에 따르면, 대기행렬 스토리지는, 원본 트랜잭션과 그것의 관련된 복제 트랜잭션 모두가 출력 인터페이스에 의해 수신된 시기를 식별하는 복제 추적 정보를 유지하도록 구성된다.
본 발명에서 설명하는 기술에 따르면, 원본 트랜잭션과 관련된 복제 트랜잭션 모두가 출력 인터페이스에 의해 수신된 것을 복제 추적 정보가 식별할 때까지, 각각의 출력 인터페이스는, 원본 트랜잭션에 대한 인터럽트 요구가 관련된 처리장치에 송신되게 하는 출력신호의 발행을 금지하도록 구성된다.
따라서, 본 발명에서 설명한 기술에 따르면, 각각의 수신된 인터페이스에 대해, 복제 트랜잭션들이 인터럽트 제어기 내부에서 발생되고, 이들 트랜잭션들 모두가 인터럽트 제어기 내부에서 정확하게 처리되고 적절한 출력 인터페이스에 전송되었을 경우에만, 출력 인터페이스가 인터럽트 신호를 관련된 처리장치에 송신하게 하는 출력신호를 발행할 수 있다. 이와 같은 기술을 채용함으로써, 처리장치에 단지 한 개의 인터럽트 요구만 송신하는 것이 궁극적으로 필요하며, 따라서 각각의 인터럽트에 대해 처리장치 내부에서 인터럽트 서비스 루틴이 1회만 호출된다. 이것은 성능상의 영향을 크기 줄이며, 또한 처리장치 상에서 실행되는 소프트웨어에 투명한 기술을 제공한다. 더구나, 제시된 설계의 여분의 면적 오버헤드를 무시할 수 있다는 것이 밝혀졌다. 더구나, 인터럽트 제어기 내부의 인터럽트 데이터 흐름 대역폭에 의존하는 인터럽트 전달처리의 성능에 대한 영향 다양한 상황에서 허용되는 것으로 밝혀졌다.
따라서, 이와 같은 기술의 채용을 통해, 기능 안전을 제공하기 위해 인터럽트 제어기의 전체 복제가 불필요하며, 처리장치에 복제 인터럽트 요구를 전송할 필요가 없이, 따라서 각각의 인터럽트에 대해 처리장치 내부에서 인터럽트 서비스 루틴을 다수회 호출할 필요가 없이, 기능 안전을 달성할 수 있다.
일 구현예에서는, 원본 트랜잭션과 이와 관련된 복제 트랜잭션이 대기행렬 스토리지 내부의 서로 다른 대기행렬 엔트리들에 할당되고, 복제 추적 정보가 이들 대기행렬 엔트리들을 연결하지만, 일 구현예에서는, 원본 트랜잭션과 이와 관련된 복제 트랜잭션이 대기행렬 스토리지 내부의 동일한 대기행렬 엔트리에 할당되고, 각각의 대기행렬 엔트리는 이 대기행렬 엔트리에 할당된 원본 트랜잭션 및 관련된 복제 트랜잭션에 대한 복제 추적 정보를 유지하는 추적 필드를 포함한다. 이것은 각각의 출력 인터페이스의 대기행렬 스토리지 내부의 대기행렬 엔트리들의 수의 급증을 회피함으로써 특히 효율적인 설계를 제공한다.
추적 필드는, 다양한 형태를 취할 수 있지만, 일 구현예에서는, 원본 트랜잭션이 수신될 때 세트되는 첫 번째 비트와, 관련된 복제 트랜잭션이 수신될 때 세트되는 두 번째 비트를 포함하는 2비트 필드이다. 따라서, 원본 트랜잭션 및 관련된 복제 트랜잭션 모두의 수신을 추적하기 위한 각각의 출력 인터페이스의 대기행렬 스토리지 내부에 필요한 최소의 면적 오버헤드가 존재한다는 것을 알 수 있다.
선택회로는, 다양하게 구성될 수 있지만, 일 구현예에서는, 버퍼회로로부터 원본 트랜잭션의 선택과 이와 관련된 복제 트랜잭션의 선택 사이에 시간적인 분리가 존재하도록 구성된다. 이것은 인터럽트 제어기 내에서 처리가 인터럽트될 때 에러에 대한 향상된 허용성(resilience)을 제공한다. 예를 들어, 단일 이벤트 업셋(single event upset: SEU)에 의해 발생되는 것과 같은 일시적인 장애는 일반적으로 이들 2개의 트랜잭션들 중에서 한 개에만 영향을 미치므로, 인터럽트 제어기에 의해 검출되는 에러를 발생하기 쉽다. 예를 들어, 단일 이벤트 업셋이 트랜잭션의 어드레스 필드에 영향을 미치는 한, 원본 트랜잭션 및 복제 트랜잭션은 동일한 출력 인터페이스에 의해 수신되지 않을 수 있으며, 이것은 적절한 시기에 에러를 발생하게 된다. 예를 들어, 이와 같은 목적을 위해 타임아웃 메카니즘을 사용함으로써, 원본 및 복제 트랜잭션들이 지정된 기간 내에 동일한 출력 인터페이스에서 수신되지 않으면, 에러가 발생된다. 마찬가지로, 단일 이벤트 업셋이 트랜잭션들 중에서 한 개의 데이터 부분에 변경을 유발하면, 이것은 마찬가지로 인터럽트 제어기 내부에서 검출되어 에러 상태가 유발되게 할 수 있다. 예를 들어, 원본 및 복제 트랜잭션들의 데이터 부분들을 출력 인터페이스에서 비교하여, 이들이 동일한 인터럽트 속성 정보를 갖는지 검사할 수 있다.
각각의 수신된 인터럽트에 대해 원본 트랜잭션 및 복제 트랜잭션 모두를 버퍼링하는데 사용되는 버퍼회로는 다양하게 구성될 수 있다. 예를 들어, 버퍼회로는 복수의 버퍼 엔트리들을 포함하고, 원본 트랜잭션 및 관련된 복제 트랜잭션은 버퍼회로 내부의 별개의 버퍼 엔트리들에 할당된다. 선택회로가 버퍼회로로부터 이들 트랜잭션들 중에서 어느 한 개를 선택할 수 있기 전에, 원본 트랜잭션 및 관련된 복제 트랜잭션 모두가 버퍼회로에 의해 수신되는 것이 필요할 수도 있다.
일 구현예에서는, 버퍼회로의 유효 사이즈 요구를 줄이기 위해, 원본 트랜잭션 및 관련된 복제 트랜잭션이 버퍼회로 내부의 단일 버퍼 엔트리에 할당된다. 그후, 각각의 버퍼 엔트리는, 원본 트랜잭션 및 관련된 복제 트랜잭션이 버퍼회로에 의해 정확하게 수신된 시기를 식별하는 버퍼 추적 필드를 구비한다. 이것은 버퍼회로 내에 양쪽 트랜잭션을 유지하는 콤팩트한 메카니즘을 제공한다. 일 구현예에서, 원본 트랜잭션 및 그것의 관련된 복제 트랜잭션이 버퍼회로에 의해 정확하게 수신되었다는 것을 버퍼 추적 필드가 식별할 때까지, 선택회로가 버퍼회로로부터 원본 트랜잭션 또는 복제 트랜잭션을 선택하는 것이 금지된다. (원본 및 복제 트랜잭션들 중에서) 두 번째 트랜잭션이 수신되면, 해당 버퍼 엔트리를 갱신하기 전에 두 번째 트랜잭션의 내용을 첫 번째 트랜잭션과 대조하여 검사하여, 트랜잭션들이 일치하는 경우에만 양쪽의 트랜잭션들이 수신되었다는 것을 식별하도록 버퍼가 갱신된다.
전술한 메카니즘의 결과로써, 원본 및 복제 트랜잭션들 모두가 정확하게 수신된 경우에만 버퍼 엔트리가 선택될 수 있다. 따라서, 일 구성예에서는, 선택된 버퍼 엔트리에 대한 원본 트랜잭션 및 관련된 복제 트랜잭션 각각이 선택회로에 의해 선택될 때, 버퍼 추적 필드가 이 선택을 식별하도록 갱신된다.
일 구현예에서는, 선택된 버퍼 엔트리에 현재 할당된 원본 트랜잭션 및 관련된 복제 트랜잭션 모두가 선택회로에 의해 선택된 것을 버퍼 추적 필드가 식별하면, 선택된 버퍼 엔트리가 재할당을 위해 이용가능하다.
필요한 경우에는, 버퍼회로와 관련하여 오류정정 기술이 사용될 수 있다. 예를 들어, (예를 들어, 오류정정 코드(ECC) 방식 등의) 오류정정 메카니즘이 각각의 버퍼 엔트리와 관련되고, 버퍼 추적 필드 내부에 유지된 정보 내부의 에러의 정정을 용이하게 하는데 사용된다. 실제로, 일부 구현예에서, 오류정정 메카니즘을 이용하여 관련된 버퍼 엔트리 내부에 유지된 정보 내부의 에러를 방지할 수 있다.
복제 트랜잭션을 관련된 원본 트랜잭션과 구별할 수 있는 다수의 방법이 존재한다. 예를 들어, 복제 트랜잭션은 그것을 복제 트랜잭션으로서 식별하는 복제 속성을 포함하고, 이 복제 트랜잭션이 인터럽트 제어기를 통과할 때 복제 속성이 복제 트랜잭션에 의해 유지된다. 복제 속성은 복제 트랜잭션과 함께 전파하는 측파대(sideband) 신호로 제공될 수 있으며, 내부 트랜잭션 포맷은, 트랜잭션이 원본 트랜잭션인 것을 나타내는 첫번째 값과, 트랜잭션이 복제 트랜잭션인 것을 나타내는 두 번째 값을 갖는 복제 필드를 포함한다.
각각의 출력 인터페이스가 관련된 처리장치에 접속되어, 이 출력 인터페이스로부터 출력신호의 발행을 가능하게 하여 인터럽트 요구가 처리장치에 송신되게 하는 다양한 방법이 존재한다. 일 구성예에서, 각각의 출력 인터페이스는 관련된 처리장치에 대한 처리장치 인터페이스에 접속된다. 그후, 출력 인터페이스는, 출력신호가 발행되고 있는 원본 트랜잭션의 데이터 부분에 의해 제공된 인터럽트 식별 정보(전술한 것과 같이 이 정보는 출력 인터페이스의 대기행렬 스토리지의 대기행렬 엔트리 내부에 유지된다)를 지정하는 출력신호를 처리장치 인터페이스에 발행하도록 구성된다. 처리장치에 의한 출력신호의 수신은 처리장치 인터페이스가 처리장치에게 인터럽트 요구를 어서트(assert)하게 한다.
이와 같은 구현예 따르면, 출력 인터페이스는, 처리장치가 인터럽트 요구를 수용하였다는 것을 나타내는 처리장치 인터페이스로부터의 확인응답 신호의 수신에 응답하여, 대기행렬 스토리지로부터 관련된 원본 트랜잭션 및 복제 트랜잭션을 제거한다.
전술한 구현에서는, 처리장치가 출력 인터페이스로부터 어스트된 출력 신호에 응답하여 확인응답 신호를 발생한다는 점에서, 출력 인터페이스와 이에 대응하는 처리장치 인터페이스 사이에 유효한 핸드셰이크 메카니즘이 존재한다. 인터럽트 제어기 내부의 장애 검출을 더욱 더 증진시키기 위해, 출력 인터페이스는 출력신호가 발행될 때 타이머를 개시하도록 구성되고, 타이머가 선택된 임계값에 도달할 때까지 확인응답 신호의 수신이 없으면, 출력 인터페이스가 에러 상태를 식별하도록 구성된다. 이에 따라, 출력신호가 예상한대로 응답되지 않으면, 에러 상태가 식별될 수 있다.
필요한 경우에, 각각의 출력 인터페이스는 오류 검출 방식을 사용하여, 원본 트랜잭션 및 관련된 복제 트랜잭션 사이의 차이가 검출될 때 에러 상태를 식별하도록 구성된다. 일 구현예에서, 트랜잭션들이 동일한 출력 인터페이스를 대상으로 하고(동일한 어드레스 부분을 갖고) 동일한 인터럽트 속성 정보를 포함하는 경우(즉, 데이터 부분이 일치하는 경우) 트랜잭션들이 쌍을 이룬다. 따라서, 일치하는 엔트리를 발견하려고 시도하기 위해 수신된 트랜잭션을 출력 인터페이스의 대기행렬 스토리지 내부의 활성 대기행렬 엔트리를 갖는 이전에 수신된 모든 트랜잭션과 비교할 필요가 있다(대기행렬 엔트리가 이미 수신된 것으로 표기된 원본 및 복제 트랜잭션들을 가지면, 이 엔트리는 검사로부터 제외될 수 있다).
트랜잭션이 쌍을 이루지 않으면, 이 트랜잭션에 일 구현예에서는 새로운 엔트리가 할당된다. 트랜잭션이 쌍을 이루지 않는 이유는, 이 트랜잭션이 출력 인터페이스에 전달될 쌍의 첫 번째 트랜잭션이거나(적법한 경우), 예를 들어 어드레스 부분의 에러로 인해 트랜잭션이 잘못된 출력 인터페이스에 전달되게 할 수도 있거나 데이터 부분의 에러로 인해 기존의 엔트리에 기억된 트랜잭션에 대해 그것의 데이터 부분의 일치가 검출되지 않는 트랜잭션 내부의 에러(에러의 경우)로 인한 것일 수 있다. 적절한 시기에, 에러 검출 메카니즘이 (예를 들어, 지정된 기간 내에 일치하는 트랜잭션이 수신되지 않은 것을 검출함으로써) 이와 같은 에러 경우를 합법적인 경우와 구별할 수 있다.
전술한 메카니즘을 사용하여 에러를 검출하는 것 이외에, 패리티 비트 검사 방식을 사용함으로써 에러 검출 방식을 향상시킬 수도 있다. 이와 같은 패리티 비트 검사 방식을 채용할 때, 패리티 검사 방식이 수신된 트랜잭션의 데이터 부분에 대한 문제점을 식별하면, 이 수신된 트랜잭션에 대해 엔트리를 할당하고 타임아웃을 대기할 필요가 없이 에러 상태의 식별을 보증하면 충분하다.
일 구현예에서, 타임아웃 메카니즘을 사용하여 인터럽트 제어기 내부에 장애 검출을 제공한다. 예를 들어, 일 구현예에서, 인터럽트 소스 인터페이스에 있는 트랜잭션 발생회로는, 수신된 인터럽트를 처리할 때, 생성 시간을 참조하여 만료 시간을 결정하고, 발생된 원본 트랜잭션 및 관련된 복제 트랜잭션의 속성으로서 만료 시간의 표시를 포함시키도록 구성된다. 그후, 인터럽트 제어기 내부의 한 개 이상의 위치에서, 만료 시간을 비교 시간과 비교하여, 만료 시간에 도달하였는지 판정하고, 만료 시간에 도달한 경우에는, 인터럽트 제어기가 에러 상태를 식별하도록 구성된다. 이에 따라, 만료 시간을 트랜잭션의 필드로서 포함시킴으로써, 이와 가튼 구성은 인터럽트 제어기 내부의 다양한 위치에서 검사가 행해질 수 있도록 하여, 트랜잭션이 시기적절하게 처리되도록 보장한다. 시기적절하게 인터럽트의 처리를 하지 못하는 것은 장애를 표시하므로, 에러 상태가 유발될 수 있다.
생성 시간 및 비교 시간이 발생될 수 있는 다양한 방법이 존재한다. 일 구현예에서, 생성 시간과 비교 시간은 카운터의 값으로부터 결정된다. 일 구현예에서는 전역 타이머가 사용되거나, 이와 달리, 복수의 동기화된 타이머 카운터들이 설계 내부의 다른 장소에 배치될 수도 있다.
만료 시간은, 다양하게 결정될 수 있지만, 일 구현예에서는, 선택된 오프셋을 생성 시간에 가산하여 결정된다. 선택된 오프셋은, 정상 동작에 따라 인터럽트 제어기 내에서 인터럽트를 처리하는데 걸리는 최대 예상 시간을 고려하여 선택될 수 있다.
만료 시간에 도달하였는지 여부를 판정하기 위해 만료 시간을 비교 시간과 비교하는 위치는 구현에 따라 선택될 수 있다. 일 구현예에서, 이와 같은 위치들은, 만료 시간에 도달한 후 원본 트랜잭션 및 관련된 복제 트랜잭션 중에서 적어도 한 개가 출력 인터페이스에 의해 처리될 때 에러 상태가 식별되게 할 수 있는 적어도 각각의 출력 인터페이스를 포함한다.
인터럽트 제어기는, 보류중인 트랜잭션들이 일시 기억되는 한 개 이상의 스토리지 구조, 예를 들어, 트랜잭션 발생회로에 의해 발생된 각각의 수신된 인터럽트에 대한 원본 및 복제 트랜잭션들을 버퍼링하는 전술한 버퍼회로, 또는 출력 인터페이스들 각각에 유지된 작업 대기행렬들을 포함한다. 일부 엔트리는 이와 같은 스토리지 구조로부터 전혀 판독되지 않을 수 있는데, 이것도 에러 상태를 표시하게 된다. 따라서, 일 구성예에서, 인터럽트 제어기는, 인터럽트 제어기의 한 개 이상의 스토리지 구조들 내부의 엔트리들을 검토하여, 관련된 만료 시간에 도달한 트랜잭션을 엔트리가 기억하는 경우, 에러 상태의 존재를 판정하는 정화회로를 더 구비한다. 정화회로는, 다양한 형태를 취할 수 있지만, 어떤 엔트리들이 검토되었는지 추적하는 추적 메카니즘을 사용한다. 따라서, 이와 같은 메카니즘의 사용을 통해, 트랜잭션을 스토리지 구조로부터 판독하지 않고, 만료 시간에 도달한 트랜잭션을 엔트리들이 기억하는 시기를 식별할 수 있다.
인터럽트 소스 인터페이스는 다양한 형태를 취할 수 있다. 일 구현예에서, 인터럽트 소스 인터페이스는 입력 라인들의 그룹 상의 전용 신호들에 의해 제공되는 수신된 인터럽트들과 관련된 전용 신호 인터럽트 인터페이스 회로를 구비한다. 이와 같은 전용 신호 라인들을 거쳐 수신될지도 모르는 인터럽트의 유형의 예는 주변기기로부터 수신된 공유 주변기기 인터럽트(shared peripheral interrupt: SPI)이다.
일 구현예에서, 입력 라인들의 그룹이 복제되어 각각의 인터럽트가 전용 신호 인터럽트 인터페이스 회로에 의해 2회 수신되게 한다. 이와 같은 접근방법을 사용하여, 본 발명에서 설명한 방식이 에지에 민감한(edge sensitive) 인터럽트 및 레벨에 민감한 인터럽트 모두에 대해 적용되도록 보장한다.
전용 신호 인터럽트 인터페이스 회로는, 다양한 형태를 취할 수 있지만, 일 구현예에서는, 각각의 수신된 인터럽트를 이에 대응하는 원본 트랜잭션 및 관련된 복제 트랜잭션으로 변환하는 콜레이터(collator) 회로를 구비한다. 특히, 어서트된 입력 라인에 근거하여, 콜레이터 블록은 인터럽트의 종류와 이 인터럽트에 대한 목적지를 결정할 수 있으며, 이 정보에 근거하여 원본 및 복제 트랜잭션들을 발생할 수 있다.
전술한 형태의 인터럽트 소스 인터페이스의 대안으로서, 또는 이것에 덧붙여, 인터럽트 소스 인터페이스는 트랜잭션들로서 제공되는 수신된 인터럽트들과 관련된 트랜잭션 인터럽트 인터페이스 회로를 구비하고, 각각의 수신된 트랜잭션은 트랜잭션 인터럽트 인터페이스 회로에 의해 처리되어 대응하는 원본 트랜잭션 및 관련된 복제 트랜잭션을 형성한다. 따라서, 전용 신호 라인을 사용하는 것 대신에, 일부 인터럽트는 트랜잭션의 형태로 수신된다. 이와 같은 인터럽트는 본 발명에서는 메시지 기반 인터럽트(message based interrupt: MBI)로 부른다. 이와 같은 메시지 기반 인터럽트 방식에 따르면, 주변기기가 인터럽트 제어기 내부의 레지스터에 기록하여 인터럽트를 등록한다. 이와 같은 메시지 기반의 인터럽트의 일례는 locality-specific peripheral interrupt(LPI)이다.
따라서, 이와 같은 구현예에서는, 트랜잭션 인터럽트 인터페이스 회로가 수신된 트랜잭션을 내부 포맷 트랜잭션으로 변환하고, 내부 포맷 트랜잭션의 복제된 버전들을 생성한다.
트랜잭션 인터럽트 인터페이스 회로는, 다양한 형태를 취할 수 있지만, 일 구현예에서는, 수신된 트랜잭션 내부에 제공된 인터럽트 정보를, 원본 트랜잭션 및 복제 트랜잭션이 전송되어야 하는 출력 인터페이스를 식별하는데 사용된 원본 트랜잭션 및 복제 트랜잭션의 어드레스 부분으로 변환하는 인터럽트 변환회로를 구비한다. 인터럽트 변환회로는, 수신된 인터럽트를 인터럽트 식별자들과 트랜잭션의 데이터 부분을 형성하는데 사용된 이와 관련된 정보에 매핑하고 트랜잭션의 어드레스 부분에 의해 표시되는 적절한 출력 인터페이스를 식별하기 위해, 논리-물리 인터럽트 바인딩(binding)을 행한다.
각각의 출력 인터페이스와 관련된 처리장치는 다양한 형태를 취할 수 있다. 일 구현예에서는, 각각의 물리 프로세서 코드에 대해 제공된 별개의 출력 인터페이스가 존재한다.
이하, 도면을 참조하여 특정한 실시예를 설명한다.
도 1은 일 구현예에 따른 인터럽트 제어기(10)의 블록도이다. 인터럽트 제어기(10)는 다양한 인터럽트 소스들로부터 인터럽트들을 수신하는 인터럽트 소스 인터페이스(15)를 갖는다. 인터럽트 소스들은 다양한 형태, 예를 들어, 인터럽트 제어기(10)와 다수의 처리 유닛들 55, 65, 75를 포함하는 시스템 내부의 다양한 다른 주변기기들을 취할 수 있다. 인터럽트 제어기의 목표는, 인터럽트를 적절한 처리 유닛들 55, 65, 75에 전달하여 처리하는 것으로, 인터럽트의 처리는 보통 처리 유닛이 인터럽트 서비스 루틴을 실행하여 인터럽트를 처리하는 것을 포함한다. 본 발명에서 설명한 기술에 따르면, 각각의 수신된 인터럽트가 인터럽트 제어기 내부에서 내부 포맷 트랜잭션으로 변환되고, 특히 이와 같은 내부 포맷 트랜잭션을 생성하기 위해 트랜잭션 발생회로(20)가 인터럽트 소스 인터페이스(15) 내부에 설치된다. 더구나, 본 발명에서 설명한 기술에 따르면, 트랜잭션 발생회로는, 인터럽트를 표시하는 원본 트랜잭션을 발생할 뿐만 아니라, 이 인터럽트를 표시하는 복제 트랜잭션을 발생한다. 그후, 발생된 트랜잭션들은 버퍼회로(25)에 전달되어 인터럽트 제어기 내부에 일시 기억된다. 버퍼회로는, 다양한 형태를 취할 수 있지만, 일 구현예에서는 원본 및 복제 트랜잭션들을 일시 기억하는 한 개 이상의 캐시를 구비한다.
처리 유닛들 55, 65, 75 각각은 보통 인터럽트 제어기와 인터페이스로 연결하기 위한 CPU 인터페이스 50, 60, 70을 각각 갖는다. 인i 제어기는 CPU 인터페이스들 50, 60, 70과 관련된 출력 인터페이스들 35, 40, 45를 제공한다.
버퍼회로 내부에 유지된 트랜잭션들은, 일 구현예에서는 다수의 파이프라인 스테이지들을 포함하는 파이프라인 회로의 형태를 취하는 선택회로(30)에 의해 모니터링된다. 선택회로는, 예를 들어, 인터럽트들의 우선도, 종류 및 인터럽트에 대한 목적지 정보 등을 고려하여, 버퍼회로에서 어떤 트랜잭션들을 선택할 것인지 결정하기 위해 다수의 다른 기준을 적용한다. 트랜잭션이 버퍼회로에서 선택되면, 이 트랜잭션은 선택회로의 파이프라인 스테이지들을 거쳐 트랜잭션의 어드레스 부분에 의해 트랜잭션에 대한 수신자로서 식별된 출력 인터페이스에 전송된다. 각각의 출력 인터페이스는 수신된 트랜잭션들이 일시 버퍼링되는 작업 대기행렬 37, 42, 47을 유지한다.
선택회로는, 인터럽트에 대한 원본 트랜잭션의 선택과 이에 대응하는 복제 트랜잭션의 선택 사이에 시간적인 분리가 존재하도록 동작함으로써, 원본 트랜잭션 및 복제 트랜잭션이 서로 다른 시점에서 선택회로를 거쳐 출력 인터페이스에 전송된다. 이때, 원본 트랜잭션과 복제 트랜잭션의 순서는 중요하지 않으므로, 원본 트랜잭션 이전에 복제 트랜잭션이 출력 인터페이스에 전달되는 경우가 있을 수 있다. 작업 대기행렬 37, 42, 47은 다수의 대기행렬 엔트리들을 가지며, 특정한 트랜잭션에 대해, 출력 인터페이스가 관련된 CPU 인터페이스에 인터럽트의 진행되는 전파를 기동하기 전에, 원본 및 복제 복사본들 모두가 출력 인터페이스에 의해 수신되어 작업 대기행렬 내부에 버퍼링될 필요가 있다. 특히, 본 발명에서 설명하는 기술에서는, 원본 트랜잭션 및 복제 트랜잭션 모두가 작업 대기행렬 내부에 수신될 때까지 각각의 출력 인터페이스가 CPU 인터페이스에 세트 신호의 발행을 금지한다. 이때, 세트 신호가 발행될 수 있으며, 세트 신호는 트랜잭션의 데이터 부분 배에 포함된 인터럽트 식별 정보를 제공하므로, 발생된 인터럽트의 종류에 대한 정보를 CPU 인터페이스에 식별한다. 그후, CPU 인터페이스 50은, 관련된 CPU에 인터럽트 요구를 발행하고, CPU에 의해 수용되면, 다시 세트 신호의 수신을 출력 인터페이스에 확인응답하게 된다. 확인응답이 수신되면, 출력 인터페이스는 원본 트랜잭션과 복제 트랜잭션에 대해 작업 대기행렬 내부에 유지하고 있는 엔트리 또는 엔트리들을 소거할 수 있다.
이와 같은 접근방법에 의해, 시간 중복성을 이용하여, 인터럽트 제어기(10)의 내부 구성요소들을 거쳐 물리 인터럽트를 2회 송신한 후, 원본 및 복제 버전들 모두가 정확하게 출력 인터페이스에 전달되었는지 검사할 수 있다. 이것은 기능 안전을 제공하기 위해 전체 인터럽트 제어기를 복제할 필요를 없앤다. 더구나, 내부의 원본 및 복제 트랜잭션들이 정확한 출력 인터페이스에 전송된 것으로 판정되면, 한 개의 신호를 CPU 인터페이스에 송신하여, 대응하는 처리 유닛에 단일의 인i 요구가 발행되게 하는 것만 필요하므로, 처리 유닛이 각각의 인터럽트에 대해 1회만 인터럽트 서비스 루틴을 실행하는 것이 필요하다. 따라서, 본 발명에서 사용되는 메카니즘은, 처리 유닛들 상에서 실행되고 있는 소프트웨어에 완전히 투명하게 될 수 있으며, 처리 유닛들의 동작에 대해 성능상의 영향을 미치지 않는다. 따라서, 이것은 보안이 중요한 시스템 내부의 인터럽트 제어기의 동작과 관련하여 기능 안전을 보장하기 위한 강건하고 효율적인 메카니즘을 제공한다.
인터럽트를 표시하기 위한 내부의 원본 및 복제 트랜잭션들을 생성한 후 이들 2개의 트랜잭션을 서로 다른 시점에서 인터럽트 제어기 파이프라인을 거쳐 전송함으로써, 인터럽트 제어기 내부에서 에러를 검출할 수 있다. 예를 들어, 단일 이벤트 업셋(SEU)이 발생되고, 이것이 원본 및 복제 트랜잭션들 중에서 한 개의 어드레스 부분에 영향을 미치면, 이것은 원본 트랜잭션 및 복제 트랜잭션이 잠재적으로 서로 다른 출력 인터페이스에 발생되게 하여, 에러의 검출을 일으킬 것이다. 마찬가지로, 이와 같은 SEU가 트랜잭션들 중에서 한 개의 데이터 부분을 변경하면, 데이터 부분들이 원본 트랜잭션 및 복제 트랜잭션에 대해 일치하지 않기 때문에, 이것을 검출할 수 있다.
분배 타임아웃 메카니즘(80)의 설치를 통해 추가적인 에러 검출 능력이 부가될 수 있다. 특히, 트랜잭션 발생회로(20)가 각각의 수신된 인터럽트에 대한 트랜잭션을 발생하면, 트랜잭션 발생회로가 타이머를 참조하고, 이것에 근거하여, 해당 처리 유닛에 인터럽트 요구의 발생을 기동하기 위해 인터럽트 제어기를 거쳐 트랜잭션이 전송되는 것으로 예측되는 최근의 시간을 표시하는, 본 발명에서는 미래 타임아웃 값으로도 불리는, 타임아웃 표시를 발생할 수 있다. 인터럽트 제어기 내부에서 트랜잭션의 전파 내부의 다양한 위치에서, 분배 타임아웃 메카니즘(80)으로부터 얻어진 현재 시간값을 미래의 타임아웃 값과 비교하여, 현재 타임아웃 값에 도달하였는지 또는 초과하였는지를 판정하고, 도달한 경우에는 에러를 유발할 수 있다.
특정한 일 구현예에서, 인터럽트 제어기(10)는, 다양한 다른 인터럽트 소스들로부터 인터럽트들을 수신하고 이들 인터럽트를 적절한 처리 유닛에 전송하여 처리할 수 있는 범용 인터럽트 제어기(generic interrupt controller: GIC)의 형태를 취한다.
도 2는 특정한 일 구현예에 따른 이와 같은 GIC(100)를 나타낸 것이다. 본 실시예에서는, 다양한 인터럽트 소스들로부터 인터럽트들이 GIC(100)에 전달될 수 있게 하는 다수의 다른 메카니즘이 존재한다. 예를 들어, 일부 인터럽트들은 관련된 인터럽트 라인 상에 신호를 어서트함으로써 수신된다. 전용 신호 라인들 상에서 어서트되는 인터럽트의 일례는, 예를 들어, 특정한 프로세서 코어 또는 클러스터에 긴밀하게 연결되지 않는 주변기기를 위해 사용되는 공유 주변기기 인터럽트(shared peripheral interrupt: SPI)이다. 도 2에 도시된 것과 같이, 일 구현예에서는, 이와 같은 전용 신호 인터럽트들에 대한 신호 라인들이 복제되어 인터럽트 소스 인터페이스(15) 내부로의 2개의 경로 102, 104를 형성하고, 특히, 이들 복제된 라인들은 콜레이터 블록(110)에 주어진다. 복제된 입력 라인들 102, 104는, 제안된 방식이 에지에 민감한 인터럽트 및 레벨에 민감한 인터럽트 모두에 대해 적용되도록 보장하기 위해 제공된다.
콜레이터 블록(110)은, 각각의 수신된 인터럽트를 표시하는 내부 포맷 트랜잭션을 발생하는 역할을 하며, 특히 본 발명에서 설명하는 기술에 따르면, 각각의 수신된 인터럽트에 대해 원본 트랜잭션 및 복제 트랜잭션 모두를 생성하며, 이때 원본 및 복제 트랜잭션들은 트랜잭션이 GIC(100)를 거쳐 전송되어야 하는 출력 인터페이스(본 발명에서는 GIC 재분배기(GICR)이라고도 한다)를 식별하는 동일한 어드레스 부분과, 수신자 CPU가 적절한 인터럽트 서비스 루틴을 실행할 수 있도록 하는 필요한 인터럽트 식별 정보를 제공하는 동일한 데이터 부분을 갖는다. 그후, 발생된 트랜잭션들은 버퍼회로(25) 내부의 캐시 내에 기억된다. 이때, 캐시를 SPI 캐시로 부른다.
그러나, 전용 신호 라인들에 의해 어서트된 인터럽트들 이외에, 메시지 기반의 인터럽트가 인터럽트 소스 인터페이스(15)에 의해 더 수신된다. 전용 신호 라인을 사용하는 것 대신에, 메시지 기반의 인터럽트(MBI) 방식에 따르면, 주변기기가 GIC 내부의 레지스터에 기록하여 인터럽트를 등록한다. MBI는 트랜잭션 기반의 인터럽트인 것으로 볼 수 있지만, GIC(100) 내부에서 사용된 내부 트랜잭션 포맷으로의 변환을 필요로 한다. 이와 같은 기능을 행하기 위해, 인터럽트 변환 서비스(interrupt translation service: ITS) 엔티티(105)가 인터럽트 소스 인터페이스(15) 내부에 설치될 수 있으며, 이 엔트리를 사용하여 수신된 메시기 기반의 인터럽트와 GIC(100)를 거쳐 전송된 내부 트랜잭션에 의해 표시된 물리 인터럽트 사이의 논리-물리 인터럽트 바인딩을 행한다. 따라서, ITS는, 수신된 MBI가 전송되어야 하는 적절한 GICR 160, 165, 170을 결정하고, 이 정보를 트랜잭션의 어드레스 부분에 기억하고, 트랜잭션에 대한 데이터 부분을 더 생성하여, CPU 인터페이스와 통신하여 처리를 필요로 하는 인터럽트의 종류를 식별할 때 필요한 인터럽트 식별 정보를 제공하는 인터럽트 식별자와 이와 관련된 정보를 포함시킨다.
ITS(105)에 의해 수신되는 메시지 기반의 인터럽트의 일례는 locality-specific peripheral interrupt(LPI)이다. 그후, ITS(105)에 의해 발생된 LPI 트랜잭션은 버퍼회로(25) 내부의 캐시(115)에 전달되는데, 이 캐시는 본 발명에서는 LPI 캐시로 불린다.
선택회로 파이프라인(30)은 다수의 구성요소들을 구비한다. 특히, 탐색회로 125, 130이, 캐시들 115, 120 각각과 관련되고, 캐시의 콘텐츠를 모니터링하고, 선택회로 파이프라인을 거쳐 해당 GICR 160, 165 170에 전송하기 위해 임의의 특정한 시점에 캐시로부터 어떤 트랜잭션을 검색할 것인지 결정하기 위해 선택 기준을 적용하도록 구성된다. 본 기술분야의 당업자에게 있어서 자명한 것과 같이, 각각의 캐시 내부의 트랜잭션들에 의해 표시되는 인터럽트들의 우선도 및 보안, 트랜잭션들이 전송될 목적지 등의 다수의 기준을 이 시점에서 고려할 수 있다.
그후, 각각의 검색된 트랜잭션은 루팅회로 135, 140을 거쳐 해당 타겟 캐시 145, 150, 155에 전달되는데, 본 실시예에서는 각각의 GICR 160, 165, 170과 관련하여 별개의 타겟 캐시가 설치된다. 그후, 타겟 캐시의 콘텐츠는 관련된 GICR에 주어져 이 GICR의 관련된 작업 대기행렬 162, 167, 172에 기억된다. 특히, 작업 대기행렬 내부에 공간이 이용가능하게 되면, 타겟 캐시들 내부에 유지된 트랜잭션들이 이들 작업 대기행렬 상에 전달될 수 있다. 이때, 타겟 캐시들도 작업 대기행렬로부터 푸시백된 트랜잭션을 수신할 수도 있다.
전술한 것과 같이, 본 발명에서 설명하는 기술에 따르면, 원본 트랜잭션과 그것의 관련된 복제 트랜잭션이 작업 대기행렬 162, 167, 172 내부에 수신되면, GICR 160, 165, 170이 관련된 인터럽트가 이 GICR에 접속된 CPU인터페이스에 전달할 준비가 되었다고 결정한다. 전술한 것과 같이, 이 시점에서 GICR 160은 CPU 인터페이스에 세트 신호를 어서트하여, 이 트랜잭션의 데이터 부분 내에 포함된 인터럽트 식별 정보를 제공한다. 그후, CPU 인터페이스는 관련된 처리 유닛에 적절한 인터럽트 요구를 발행하고, 처리 유닛이 인터럽트 요구를 수용하면 GICR에 다시 활성화 확인응답 신호를 송신하게 된다. 이 시점에서, 작업 대기행렬 내부의 원본 및 복제 트랜잭션 엔트리들이 삭제될 수 있다. 나중에 더욱 상세히 설명하는 것과 같이, 일 구현에서는, 작업 대기행렬 내부의 단일의 엔트리를 사용하여 원본 트랜잭션 및 복제 트랜잭션 모두를 표시하고, 이에 따라 이 시점에서 무효화할 필요가 있는 것은 단지 단일 엔트리이며, 이와 같은 구성은 다른 트랜잭션들이 선택회로 파이프라인(30)의 관련된 타겟 캐시 145, 150, 155로부터 수신되기 위한 작업 대기행렬 내부의 공간을 비운다.
도 2에 도시된 실시예에서는, 도 1의 분배 타임아웃 메카니즘(80)이 도 2에 나타낸 다양한 타이머 카운터들 180, 182, 184, 186으로 표시된다. 특히, 별개의 타이머 카운터가 GIC(100) 내부의 다수의 다른 블록들 각각과 관련될 수 있다. 이 경우, 트랜잭션 발생기 타이머 카운터(180)는, 인터럽트 소스 인터페이스(15)와 관련되고, 특히 내부 포맷 트랜잭션을 발생할 때 콜레이터 블록(110) 및 ITS(105)에 의해 참조될 수 있다.
도 3은 일 구현예에 따른 내부 트랜잭션 포맷(200)을 나타낸 것이다. 도시된 것과 같이, 어드레스 부분(205)을 사용하여, 트랜잭션을 전송할 출력 인터페이스, 즉 도 2의 실시예에서는 GICR 160, 165, 170을 식별하며, 데이터 부분은 인터럽트에 대한 인터럽트 식별자(INTID)와 이와 관련된 설정을 제공한다. 이들 관련된 설정은 예를 들어 우선도 표시, 환경설정 정보(예를 들어, 인터럽트가 레벨에 민감한지 또는 에지에 민감한지)와, 적절한 시기에 처리 유닛에 어서트된 인터럽트의 종류를 결정하는데 사용될 수 있는 보안 그룹 정보를 포함할 수 있다. 예를 들어, 특정한 일 구현예에서, 그룹 0 인터럽트는, 인터럽트를 수신하는 CPU의 현재 보안 상태에 무관하게, 항상 안전하고 고속 인터럽트 요구(FIQ)로서 전송된다. 보안 그룹 1 인터럽트는, 프로세서 코어가 비보안 상태에 있는 경우에는 FIQ로서 전송되지만, 코어가 보안 상태에 있는 경우에는 표준 인터럽트 요구(IRQ)로서 전송된다. 마찬가지로, 비보안 그룹 1 인i는 코어가 보안 상태에 있는 경우에는 FIQ로서 전송되고 코어가 비보안 상태에 있는 경우에는 IRQ로서 전송된다.
마찬가지로 도3에 나타낸 것과 같이, 미래 타임아웃 값을 제공하기 위해 내부 트랜잭션 포맷 내부에 필드 215가 제공될 수 있다. 특히, 콜레이터 블록(110) 또는 ITS(115)에 의해 트랜잭션이 발생될 때, 현재 계수값을 취득하기 위해 트랜잭션 발생기 타이머 카운터(180)를 참조한다. 그후, 이것을 사용하여, 예를 들어, 현재 카운터 값에 소정의 오프셋을 가산하여, 미래의 타임아웃 값을 생성한다. 오프셋은, 트랜잭션이 GIC를 거쳐 전송되어 CPU 인터페이스에 어서트된 세트 신호를 발생하는데 걸리는 최대 예상 시간을 표시하도록 선택된다.
마찬가지로, 도 3에 나타낸 것과 같이, 내부 트랜잭션 포맷의 일부로서 복제 필드(220)가 설치되는데, 이 필드의 첫 번째 값은 트랜잭션이 원본 트랜잭션인 것을 나타내고 이 필드의 두 번째 값은 트랜잭션이 복제 트랜잭션인 것을 나타낸다.
각각의 내부 트랜잭션(200)의 필드 215 내에 제공된 미래 타임아웃 값의 사용을 고려하면, GIC 내부의 다양한 위치에서 이 미래 타임아웃 값을 검토하여, 미래 타임아웃 값에 도달하였는지 아닌지를 판정한다. 따라서, 예를 들어, 탐색 스테이지 구성요소들 125, 130은 탐색 타이머 카운터(182)의 현재값을 참조하여 현재의 계수값을 얻은 후, 이것을 필드 215 내부의 미래의 타임아웃 값과 비교한다. 미래의 타임아웃 값에 도달하거나 초과하면, 에러신호가 유발될 수 있다. 다른 구성요소들에 의해 동일한 검사가 행해질 수 있다. 예를 들어, 트랜잭션이 타겟 캐시로부터 GICR로 출력하려고 할 때마다 타겟 캐시들 145, 150, 155 각각이 타겟 캐시 타이머 카운터(184)를 참조하도록 구성되고, 미래의 타임아웃 값에 도달하거나 초과하면, 에러신호가 발생될 수 있다. 마찬가지로, 작업 대기행렬 162, 167, 172로부터 엔트리를 판독하려고 할 때만 GICR 구성요소들 160, 165, 170이 GICR 타이머 카운터(186)를 참조하고, 마찬가지로 미래의 타임아웃 값이 초과하면 타임아웃 에러를 어서트할 수 있다.
다양한 타이머 카운터들 180, 182, 184, 186 각각은 일 구현예에서는 관련된 구성요소들에 근접하여 설치된 별개의 카운터이지만, 서로 동기화되도록 구성된다. 다른 구현예에서는 필요한 경우에 전역 카운터가 유지될 수도 있다.
작업 대기행렬은, 다양하게 구성될 수 있지만, 일 구현예에서는 각각의 엔트리가 도 4에 도시된 형태를 취한다. 특히, 도 4의 예에서는, 작업 대기행렬(230)이 복수의 엔트리들(235)을 포함하는데, 이때 각각의 엔트리는, 트랜잭션의 데이터 부분을 유지하는 필드(240)와, 트랜잭션의 원본 버전과 복제 버전이 작업 대기행렬 내부에 수신될 때 추적하기 위한 서브 필드들 245, 250으로 이루어진 추적 필드를 포함한다. 해당하는 엔트리가 유효한지 아닌지 식별하기 위해 유효 비트(255)가 더 설치된다. 관련된 타겟 캐시로부터 새로운 트랜잭션을 수신하기 위해 무효 엔트리가 이용가능하다.
일 구현예에서, 추적 필드는 2비트 필드이므로, 서브 필드 245, 250 각각은, 트랜잭션의 관련된 원본 버전이 수신되었는지 또는 복제 버전이 수신되었는지에 의존하여 세트되거나 클리어될 수 있는 단일 비트값이다. 일 구현예에서, GICR은, 원본 트랜잭션과 복제 트랜잭션 모두가 수신되었다는 것을 트랜잭션에 대한 엔트리가 식별할 때, 관련된 CPU 인터페이스로의 진행되는 전파에 대한 트랜잭션만을 선택하게 된다. 필드 240은 세트 신호를 거쳐 CPU 인터페이스에 전파될 필요가 있는 인터럽트들에 대한 필요한 정보 모드를 포함한다.
도 5는 도 2에 도시된 다수의 GICR 구성요소들 내부의 작업 대기행렬들의 엔트리들이 일 구현예에 따라 채워지는 방법을 나타낸 흐름도이다. 스텝 300에서, 트랜잭션이 수신되었는지 여부를 판정하고, 수신된 경우에는, 스텝 305에서, 수신된 트랜잭션 내부에 에러가 존재하는지 여부를 판정하기 위해 패리티 비트 검사가 지원되는 경우에는 패리티 검사를 행한다. 에러가 존재하는 경우에는, 스텝 330으로 처리를 진행하여 에러가 식별된다.
스텝 305에서 에러가 검출되지 않으면, 스텝 310으로 처리가 진행하거나, 패리티 검사가 구현되지 않는 경우에는 스텝 300으로부터 스텝 310으로 직접 처리가 진행한다. 스텝 310에서는, 수신된 트랜잭션에 대한 작업 대기행렬 내부에 이미 엔트리가 존재하는지 여부를 확인하기 위해 쌍 일치(pair matching) 처리가 행해진다. 존재하지 않는 경우, 이것은 수신된 트랜잭션이 원본/복제 쌍의 첫 번째 트랜잭션이라는 것을 의미하므로, 스텝 315로 처리를 진행하여, 작업 대기행렬 내부에 엔트리가 할당되고, 트랜잭션의 데이터 부분이 이 엔트리에 기억된다. 더구나, 스텝 320에서, 예를 들어, 트랜잭션의 복제 필드(220)로부터 추론되는 것과 같이, 수신된 트랜잭션이 원본 트랜잭션인지 복제 트랜잭션인지에 따라 추적 필드 245, 250의 해당 비트가 세트된다. 이 시점에서, 엔트리에 대해 유효 비트(255)도 세트된다.
스텝 310에서, 이 트랜잭션에 대한 작업 대기행렬 내부에 이미 엔트리가 존재하는 것으로 판정되면, 이것은 수신된 트랜잭션이 원본/복제 쌍의 두 번째인 것을 의미한다. 따라서, 스텝 325로 처리를 진행하여, 원본 트랜잭션 및 복제 트랜잭션 모두가 수신되었다는 것을 식별하도록 추적 필드 245, 250이 갱신된다. 전술한 것과 같이, 이 시점에서, 관련된 CPU 인터페이스에 세트 신호를 발생하기 위해 엔트리가 GICR에 의해 선택하기 위한 유효한 후보 엔트리가 된다.
도 6은 수신된 것으로 표시된 원본 및 복제 트랜잭션들 모두를 갖는 대기행렬 엔트리를 선택할 수 있는 경우에 각각의 GICR 구성요소 160, 165, 170의 동작을 나타낸 것이다. 따라서, 스텝 350에서, 작업 대기행렬에 대한 추적 필드가 원본 및 중복 트랜잭션 모두가 수신되었다는 것을 표시하는지 판정하고, 수신된 경우에는 스텝 355로 나타낸 것과 같이 이 작업 대기행렬 엔트리가 선택을 위해 이용가능하게 된다. 그러나, GICR이 다수의 알려진 선택 방식들 중에서 어느것을 적용하여 작업 대기행렬로부터 어떤 작업 대기행렬 엔트리를 다음에 선택할 것인지를 결정하므로, 이 단계에서는 GICR에 의해 실제로 선택되지 않는다. 그러나, 다음의 어떤 시점에서, 스텝 360으로 나타낸 것과 같이, 작업 대기행렬이 선택되고(이 선택은 예를 들어 작업 대기행렬 내에 표시된 미처리된 인터럽트들의 우선도에 근거하여 행해진다), 작업 대기행렬은 관련된 CPU 인터페이스에 세트 패킷을 발행하여 작업 대기행렬 엔트리의 필드 240에 유지된 트랜잭션의 데이터 부분을 제공한다.
그후, 스텝 365에 나타낸 것과 같이, 세트 신호가 어서트된 시점에 카운터가 개시되고, 스텝 370에서 CPU 인터페이스로부터 확인응답을 수신하였는지 여부를 판정한다. 수신하였으면, 이 정보가 더 이상 필요하지 않기 때문에, 스텝 375에서 작업 대기행렬 내부의 원본 및 복제 트랜잭션들에 대해 대응하는 작업 대기행렬 엔트리가 무효/삭제된 것으로 표기될 수 있다.
확인응답이 아직 수신되지 않았으면, 스텝 380에서 거부신호가 수신되었는지, 즉 CPU가 인터럽트를 받아들이고 있지 않다는 것을 CPU 인터페이스가 표시하였는지 여부를 확인한다. 이 상황에서, 스텝 385로 처리를 진행하여, 정규 및 복제 트랜잭션들이 선택회로 파이프라인(30)의 파이프라인 스테이지들을 거쳐 반환되어 버퍼회로(25)의 각각의 캐시 구조 115, 120 내부에 다시 채워진다. 이 시점에서, 작업 대기행렬 엔트리가 무효화될 수 있으며, 적절한 시기에 탐색 스테이지 구성요소들 125, 130은 GICR에 다시 전파하기 위해 캐시로부터 트랜잭션을 재선택한다.
스텝 380에서 거부신호가 수신되지 않은 것으로 판정되면, 스텝 390으로 처리를 진행하여, 타임아웃이 발생하였는지 판정한다. 특히, 이 시점에서, 스텝 365에서 개시된 카운터가 임계값에 도달하였는지 검사한다. 도달한 경우에, 이것은 인터럽트의 처리시에 예상하지 못한 문제를 나타내며, 스텝 395로 처리를 진행하여 에러 상태가 식별된다. 그렇지 않은 경우에는 스텝 370으로 처리가 되돌아간다. 이때 어떤 시점에서 스텝 370, 380 또는 390 중 한 개로부터 yes 경로를 따르게 된다.
도 7은 일 구현예에 따른 도 2의 LPI 캐시(115) 또는 SPI 캐시(120) 내부의 각각의 엔트리와 관련되어 설치되는 필드들을 개략적으로 나타낸 것이다. 이 구현예에서는, 대응하는 트랜잭션 발생 구성요소들 105, 110에 의해 발생된 원본 및 복제 트랜잭션들 모두가 캐시 내부의 동일한 엔트리 내에 기억되므로, 작업 대기행렬 엔트리들의 전술한 서브 필드들 245, 250과 같은 방식으로 동작하는 서브 필드들 415, 420으로 이루어진 추적 필드가 제공된다. 또 다른 구현예에서는, 원본 및 복제 트랜잭션들에 대해 별개의 엔트리가 할당된다.
LPI 또는 SPI 캐시 내부의 각각의 엔트리(405)는 트랜잭션 정보를 유지하는 필드 410을 갖는다. 이것은, 트랜잭션의 어드레스 부분(205)과 데이터 부분(210)을 포함하며, 트랜잭션의 일부로서 미래의 타임아웃 값이 포함되는 구현예에서는 미래의 타임아웃 값(215)을 더 포함한다. 필드 410은 복제 필드(220)를 더 포함하는데, 이와 같은 필드는 내부 트랜잭션 포맷의 일부로서 사용된다.
도 7에 나타낸 것과 같이, 오류 정정 코드(ECC) 필드(425)가 각각의 엔트리에 대해 더 설치되어, 엔트리 내부에 유지된 어떤 정보 내부의 에러의 검출 및 정정을 가능하게 하는데 사용된 오류정정 코드 정보를 제공한다. 일 구현예에서, 이것은 추적 필드 내부에 유지된 정보 내부의 에러의 검출 및 정정을 가능하게 하거나, 이와 달리 엔트리(405)의 콘텐츠 내부의 한 개 이상의 에러의 검출 및 정정을 가능하게 하는데 충분한 ECC 정보를 제공할 수 있다. 콘텐츠가 유효한지 여부를 식별하기 위해 유효 플래그(430)가 각각의 엔트리와 관련될 수 있다.
도 8a는 대응하는 트랜잭션 발생 구성요소들 105, 110으로부터 캐시 내부에 기억하기 위해 트랜잭션이 수신될 때 캐시들 115, 120의 동작을 나타낸 흐름도이다. 스텝 500에서, 트랜잭션이 수신되었는지 여부를 판정하여, 수신된 경우에는 스텝 505로 처리를 진행하여, 패리티 검사가 지원되는 경우에는, 수신된 트랜잭션에 에러가 검출되는지 여부를 판정한다, 에러가 검출되는 경우에는, 스텝 510에서 에러가 식별되지만, 그렇지 안은 경우에는, 스텝 515로 처리를 진행하거나, 패리티 검사가 구현되지 않는 경우에는 스텝 500으로부터 스텝 515로 직접 처리가 진행한다.
스텝 515에서, 일치처리를 행하여 캐시의 엔트리에 이미 기억된 트랜잭션과의 일치를 검출하려고 시도함으로써 이 트랜잭션에 대해 이미 할당된 엔트리가 존재하는지 여부를 판정한다. 엔트리가 이미 할당되지 않은 경우에, 이것은 수신된 트랜잭션이 원본/복제 쌍의 첫 번째 트랜잭션이라는 것을 나타내므로, 캐시 내부에 엔트리를 할당하고 트랜잭션 정보를 할당된 엔트리(405)의 필드(410) 내부에 기억하기 위해 스텝 520으로 처리를 진행한다. 그후, 스텝 525로 처리를 진행하여, 수신된 트랜잭션이 원본 트랜잭션인지 또는 복제 트랜잭션인지에 따라 추적 필드의 해당 비트가 세트된다. 이때, 엔트리 405의 콘텐츠가 유효한 것을 식별하기 위해 유효 비트(430)도 세트될 수 있으며, ECC 필드(425)가 ECC 정보로 채워질 수 있다.
스텝 515에서, 트랜잭션에 대해 엔트리가 이미 할당된 것으로 판정된 경우, 이것은 수신된 트랜잭션이 원본/복제 트랜잭션들의 쌍의 두 번째 트랜잭션인 것을 나타내고, 그후 스텝 530으로 처리를 진행하여, 원본 및 복제 트랜잭션들 모두가 수신된 것을 식별하도록 추적 필드 415, 420이 갱신된다.
도 8b는 엔트리들 중에서 한 개가 관련된 탐색 스테이지 구성요소들 125, 130에 의해 선택될 때 캐시들 115, 120의 동작을 나타낸 것이다. 전술한 것과 같이, 일 구현예에서는, 탐색 스테이지 구성요소들 125, 130이, 원본 및 복제 트랜잭션들 모두가 수신되었다는 추적 필드 정보 415, 420이 나타내는 캐시 내부의 엔트리만을 선택할 수 있다. 일 구현예에서, 탐색 스테이지 구성요소들 125, 130은 이들이 원본 트랜잭션을 선택하고 있는지 또는 복제 트랜잭션을 선택하고 있는지 식별하게 된다. 이와 달리, 트랜잭션이 선택되는 소정의 순서가 존재할 수도 있는데, 예를 들어, 엔트리가 처음으로 액세스될 때에는, 원본 트랜잭션이 선택되고, 엔트리가 두 번째로 액세스될 때에는, 복제 트랜잭션이 선택된다.
스텝 550에서, 이것이 탐색 스테이지에 의해 선택된 원본 트랜잭션인지 또는 복제 트랜잭션인지 판정한 후, 스텝 555에서 어떤 트랜잭션이 선택되었는지에 따라, 해당 비트 415, 420을 소거함으로써 추적 비트가 갱신된다.
스텝 560에서는, 추적 필드 내부의 두 개의 비트들이 클리어되었는지 판정하여, 클리어되지 않은 경우에는 스텝 550으로 처리를 되돌려 쌍 중의 나머지 트랜잭션의 선택을 대기한다. 그러나, 모든 비트들이 클리어되면, 유효 플래그(430)를 소거함으로써, 캐시 엔트리가 스텝 565에서 무효화될 수 있다. 이것은 관련된 트랜잭션 발생 구성요소들 105, 110에 의해 발생된 다른 트랜잭션에 할당하기 위한 캐시 엔트리(405)를 비운다.
이때, 캐시 115, 120이 원본 및 복제 트랜잭션들에 대해 통합된 엔트리들을 유지하지 않고, 그 대신에 단지 이들 트랜잭션에 대해 별개의 엔트리들을 할당하는 경우에는, 도 8a 및 도 8b의 검사처리를 행하지 않고, 그 대신에 도 5의 전술한 처리를 이용하여, 해당 출력 인터페이스에서 1회 검사가 행해지게 된다.
도 9는 트랜잭션 발생회로(이것은 예를 들면 GIC(100)에 의해 수신된 인터럽트의 종류에 따라 인터럽트 변환 서비스(105)이거나 콜레이터 블록(110)일 수 있다)의 동작, 특히 각각의 트랜잭션(200)의 필드(215) 내부에 포함되는 미래의 타임아웃 값을 생성하기 위한 트랜잭션 발생회로의 동작을 나타낸 흐름도이다. 스텝600에서, 트랜잭션 발생회로는 발생할 내부 포맷 트랜잭션이 존재하는지 여부를 판정하는데, 이것은 인터럽트가 인터럽트 소스로부터 트랜잭션 발생회로의 대응하는 인터페이스에 제시되는 경우이다. 이때, 스텝 605로 처리를 진행하여, 어드레스 부분과 데이터 부분을 갖는 내부 포맷 트랜잭션을 발생하기 위해 전술한 스텝들 전체를 행하는 것 이외에, 트랜잭션 발생회로는 현재의 계수값을 얻기 위해 트랜잭션 발생기 타이머 카운터(190)를 더 참조한 후, 이 계수값에 오프셋을 가산하여 미래의 타임아웃 값을 식별한다. 그후, 스텝 610에서 원본 및 복제 트랜잭션이 발생될 때, 이들 두 개의 트랜잭션들의 타임아웃 필드(215)에 미래의 타임아웃 값을 가산한다.
도 10은 GIC 내부의 다양한 구성요소들에 의해 행해질 수 있는 타이머 비교 동작을 나타낸 흐름도이다. 도 2에 도시된 것과 같은 일 구현예에서는, 도 10에서 식별되는 스텝들은, 관련된 캐시로부터 트랜잭션이 검색될 때 탐색 스테이지 블록들 125, 130에 의해 행해지고, 엔트리가 타겟 캐시로부터 대응하는 GICR 160, 165, 170에 출력될 때 타겟 캐시들 145, 150, 155에 의해 행해지고, 대응하는 작업 대기행렬 162, 167, 172에 있는 엔트리가 관련된 CPU 인터페이스에 전달할 세트 패킷을 생성할 때 GICR 160, 165, 170 각각에 의해 행해진다. 스텝 650에서, 이와 같은 구성요소에 의해 트랜잭션이 처리될 것인지 여부를 판정하고, 처리될 것인 경우에는, 스텝 655에서 관련된 카운터 182, 184, 186으로부터 계수값이 취득된다. 그후, 스텝 660에서 계수값이 트랜잭션의 필드 215 내부에 유지된 미래의 타임아웃 값 이상인지 여부를 판정한다. 이 값 이상이 아닌 경우에는, 스텝 665로 처리를 진행하여, 구성요소가 정상대로 트랜잭션을 계속 처리한다. 그러나, 그렇지 않은 경우에는, 스텝 670으로 처리를 진행하여, 타임아웃 에러가 어서트된다.
이와 같은 타임아웃 에러 정보는 개별적으로 보고되거나, 합쳐진 후 관리 하드웨어 또는 적절한 소프트웨어 유틸리티에게 보고될 수 있다.
현재 계수값과 미래의 타임아웃 값을 비교하는데 필요한 비교 로직의 양을 줄이기 위해, 필요한 경우에는 미래의 타임아웃 값의 값이 상대적으로 코스-그레인(coarse-grain)될 수 있다(효율적으로는 타임아웃 값의 특정한 수의 최하위 비트들을 제로값으로 설정한다).
전술한 것과 같이, 일부 트랜잭션들은 스토리지 구조 내부에 유지되고 GIC 내부의 에러 상태로 인해 검색되지 않은 것이 가능하다. 이것은, 스토리지 구조의 특정한 부분들을 항상 건너뛰게 하는 하드웨어 결함에 기인하여 발생할 수도 있다. 이와 같은 시나리오에서는, 여전히 스토리지 구조 내에 존재하고 미래의 타임아웃 값들이 만료된 이와 같은 트랜잭션들의 존재를 검출하는 메카니즘을 제공하는 것이 바람직할 것이다. 이것을 달성하기 위해, GIC 내부의 한 개 이상의 스토리지 구조와 관련하여, 예를 들어, 타겟 캐시들 145, 150, 155 내부의 캐시들 115, 120과 관련하여 및/또는 작업 대기행렬 162, 167, 172와 관련하여 정화 메카니즘이 구현될 수 있다. 정화 메카니즘을 다양한 형태를 취할 수 있지만, 일 구현예를 도 11의 흐름도로 나타낸다.
스텝 700에서, 타이밍 윈도우가 개시되고, 스텝 705에서, 예를 들어, 스토리지 구조 내부의 각각의 트랜잭션에 대해 1 비트를 포함하는(트랜잭션들의 쌍이 한 개의 엔트리에 기억되는 경우에는 추적 벡터가 엔트리당 2 비트를 갖는다) 추적 벡터가 초기화된다. 스텝 710에서 타임 윈도우 중에 각각의 트랜잭션이 판독될 때, 해당하는 비트가 추적 벡터에서 세트된다.
스텝 715에서, 타이밍 윈도우가 만료되면, 추적 벡터의 비트들이 여전히 클리어진지 판정한다. 이들 비트가 여전히 클리어이면, 이것은 타임 윈도우 중에 해당하는 트랜잭션이 액세스되지 않았다는 것을 나타낸다.
따라서, 스텝 720에서, 추적 벡터 내부의 클리어 비트와 관련된 스토리지 구조 내부의 각각의 트랜잭션을 검토하고, 이 트랜잭션의 미래의 타임아웃 값에 도달하면, 타임아웃 에러를 유발한다.
전술한 구현예의 설명에서 알 수 있는 것과 같이, 본 발명에서 설명하는 기술을 이용하면, 기능 안전을 제공하기 위해 인터럽트 제어기의 전체 복제의 필요성을 없앨 수 있으며, CPU에 복제 인터럽트 요구를 송신할 필요가 업이, 따라서 각각의 인터럽트에 대해 CPU 내에서 인터럽트 서비스 루틴을 복수회 호출할 필요가 없이 기능 안전을 달성할 수 잇게 할 수 있다. 따라서, 이것은 매우 면적 효율적인 기능 안전 GIC 설계를 제공한다.
본 발명에서, 단어 "하도록 구성된"은 장치의 구성요소가 정의된 동작을 행할 수 있는 구성을 갖는다는 것을 의미하기 위해 사용된다. 이와 관련하여, "구성"은 하드웨어 또는 소프트웨어의 배치 또는 상호접속 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 갖거나, 프로세서 또는 기타의 처리장치가 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은 이 장치의 구성요소가 정의된 동작을 제공하기 위해 어떤 식으로 변경될 필요가 있는 것을 시사하는 것은 아니다.
첨부도면을 참조하여 본 발명의 예시적인 실시예들을 상세히 설명하였지만, 본 발명은 이들 실시예에 한정되지 않으며, 첨부된 청구범위의 보호범위 및 사상을 벗어나지 않으면서 본 발명이 속한 기술분야의 당업자에 의해 다양한 변경, 부가 및 변화가 행해질 수 있다는 것은 자명하다. 예를 들면, 종속항들의 특징들의 다양한 조합이 독립항들의 특징과 행해질 수도 있다.