ALU에서 다양한 함수 (예 : 더하기, 빼기 등)는 어떻게 구현됩니까?


9

ALU 가해 야 할 기능이 너무 많아서 어떻게 구현을 시작할 수 있을지 궁금합니다 (Logisim으로 MIPS 시스템을 구현하고 기본 게이트, 플립 플롭 등을 사용하여 MIPS 시스템을 구현 해야하는 숙제).

내가 혼란스러워하는 부분은 Add / Subtract / AND / OR / etc와 같은 다른 기능을 수행 할 수있는 ALU를 어떻게 구현할 수 있는지입니다. 더 많은 제어 로직이 필요합니까 (아래 "이전 할당"의 오른쪽 상단 참조).

이전 과제에서는 추가 / 빼기 / 부정을 수행 할 수있는 ALU를 구현했습니다. 이제 ALU가 다음과 같은 기능을 수행 할 수 있어야한다고 생각합니다.

나의 이전 과제

답변:


7

내부적으로 모든 답변을 계산 한 다음 mux를 사용하여 선택하는 것이 효과적이지만 최소한의 디자인은 아닙니다.

문제를 비트 슬라이스 할 수 있다고 생각하십시오. 두 개의 8 비트 입력을 갖는 단일 논리 블록 대신, 정확한 전체 결과를 얻기 위해 이들을 링크 할 수있는 한 이것을 두 개의 4 비트 섹션으로 분할 할 수 있습니다. 다행히도 슬라이스를 연결하는 것이 단일 비트보다 나쁘지 않으며 추가의 경우 캐리 비트를 나타냅니다. 따라서 각 4 비트 슬라이스에는 캐리 비트와 캐리 비트가 있습니다. (AND 및 NOR과 같은 논리는 이것을 필요로하지 않지만, 나중에 왼쪽 / 오른쪽 시프트를 구현하는 경우이 비트는 쉽게 용도가 변경됩니다).

극단적으로 수행하면 각각 1 비트의 8 조각을 사용할 수 있습니다. 1 비트 슬라이스에 대해 생각하면 유용합니다. 더 큰 슬라이스로 확장되는 접근 방식에 대해 더 쉽게 생각할 수 있기 때문입니다. 따라서 1 비트 슬라이스를 사용하면 4 비트 기능 코드, 입력 A의 비트, 입력 B의 비트 및 캐리 비트와 같은 7 개의 입력 만 있습니다. 또한 기능 출력과 수행이라는 두 가지 출력 만 있습니다. 따라서 이제는 단지 7 개의 입력으로 2 개의 출력 기능을 작성할 수 있습니다. 이는 단지 인적 능력의 범위 내에서 합리적으로 줄어 듭니다. 항상 모든 기능을 계산할 필요는없는 소수의 게이트로 끝날 것입니다. 그러나 슬라이스 내 에서 발생하는 문제는 중요하지 않으며 외부에서 볼 때 올바른 결과를 생성합니다.

이제 몇 가지 방법으로 갈 수 있습니다. 한 가지 방법은이 1 비트 슬라이스 중 8 개를 사용하는 것입니다. 또 다른 방법은 더 큰 슬라이스를 만든 다음 사용하는 것입니다. 1 비트에서 2 비트로 이동하면 방정식은 7 개의 입력에서 9로 이동하며 4 비트에는 13 개의 입력 함수가 필요합니다. 반드시 쉬운 것은 아니지만 컴퓨팅-모든-mux 접근법보다 더 컴팩트 한 결과를 제공합니다. 또한 74181 4 비트 ALU 슬라이스의 내부를 보면 거기에 mux가 표시되지 않습니다.


나는 스펙트럼의 끝에서 "쉽게 시작할 수있는"끝에서 내 대답을 더 많이 목표로 삼고 있었지만보다 최적의 (하드웨어 방식) 가능성을 지적 해 주셔서 감사합니다.
— Martin Thompson

5

예, 더 많은 제어 로직이 필요합니다.

이전 과제는 순수하게 산술적 이었습니다 (단어입니까?). 따라서 단일 가산기를 사용하고 원하는 신호를 생성하기 위해 제어 신호를 사용하여 입력을 마사지 할 수 있습니다

새로운 기능은 논리적 이므로 논리적 작업을 수행하려면 다른 블록이 필요합니다. 제어 신호는이 블록의 기능을 변경합니다.

그런 다음 다이어그램의 맨 아래에는 제어 신호에 의해 구동되는 멀티플렉서 (때때로 'mux'라고도 함)가 필요합니다. 또는 논리 연산자의 것).

ALU 제어 라인에 대해 새로운 인코딩을 선택할 수 있다면 MSB를 "산술 / 논리"선택으로 사용하고 다른 것은 "부 기능"을 선택하는 것이 좋습니다. 최종 mux.


네, 산술 은 단어입니다 :)
— Majenko

1
나에게 산술 은 당신이 원하는 단어입니다. 이 단어는 세 번째 음절에 악센트가 있습니다. 두 번째 음절의 악센트가 있으면 초등학교에서 배우는 기본 수치 연산을 수행하는 메커니즘을 나타내는 다른 단어입니다.
— Olin Lathrop

1

논리 연산을 처리하는 좋은 방법 중 하나는 두 피연산자의 비트를 4 입력 멀티플렉서에 대한 선택기 입력으로 사용하고 원하는 연산에 해당하는 멀티플렉서의 "데이터"입력에 4 비트 패턴을 공급하는 것입니다 (일반적으로 8 비트 ALU의 경우, 각 비트 당 하나씩 8 개의 멀티플렉서가 있으며 8 개의 멀티플렉서의 "데이터"입력은 서로 연결됩니다.


멀티플렉서를 아주 작은 ROM으로 사용하는 것도 실제 ROM을 사용하는 또 다른 방법입니다.
— JustJeff

Nx1 비트 ROM은 "데이터"입력이 배선 된 멀티플렉서입니다. 내가 설명한 시나리오에서 멀티플렉서의 "데이터"입력은 운영자 선택입니다. 실제로, 작은 ROM을 사용하여 가능한 16 개의 논리 연산 중 일부와 3 또는 4 비트 opcode에서 다른 일부 연산을 선택할 수 있습니다 (원하는 경우 opcode를 통해 opcode가 유용한 논리 연산을 생성하지 않는 경우 다른 멀티플렉서를 사용하여 다른 연산을 선택하십시오.
— supercat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.