2015-01-25 2 views
0

4 비트와 4 비트 ALU를 만들기 위해 재사용되는 할당을 위해 1 비트 ALU를 설계해야합니다.연산이 carry에 의존하는 1 비트 ALU

1 비트 ALU는 2 개 선택 라인 및 입력 A, B와의 캐리가 있습니다.

내 문제는 선택 라인 및 플래그 캐리가 선택하는 어떤 동작을 선택하는 것입니다. 난 그냥 선택 라인을 사용하는 방법과 작업을 선택하는 동시에 깃발을 들고 실마리가 없습니다.

예를 들어, 라인 "00"을 선택하고 Cin "0"은 더하기 연산이고 Cin "1"은 빼기 연산자입니다.

아래에서 수행 한 작업을 수행 할 수 있습니까? 당신의 도움을 주셔서 감사합니다.

entity ALU1Bit is 
port(
    A: IN std_logic_vector; 
    B: IN std_logic; 
    carryIn:  IN std_logic;         
    operation: IN std_logic_vector(1 downto 0); 

    F: OUT std_logic; 
    carryOut: OUT std_logic 
    ); 
end ALU1Bit; 

architecture Behavioral of ALU1Bit is 

component Adder1Bit 
port(
    carryIn: IN std_logic; 
    A: IN std_logic; 
    B: IN std_logic; 

    output: OUT std_logic; 
    F: OUT std_logic 
    ); 
end component; 

begin 
carryIn <= '0'; 
    case operation is 
     when... 
carryIn <= '1'; 
    case operation is 
     when... 

end Behavioral; 
+0

번호 입력 포트에 할당하는 것은 오류입니다. –

답변

0

네가 누락 된 것처럼 보이는 것은 중첩 된 사례 문을 사용할 수 있다는 것입니다. 코드 :

carryIn <= '0'; 
    case operation is 
     when... 
carryIn <= '1'; 
    case operation is 
     when... 

오른쪽 라인의 종류에 있지만 case 문은 프로세스 내에 있어야하고, 브라이언은 말한다, 당신은 '0'으로 지정하려는 및 '1'carryIn 입력에 허용되지 않습니다. 나는이 두 줄로 당신이 의미 한 바를 다른 사건 진술처럼 일하게하는 것이라고 생각합니다. 그것은 당신이 중복되는 경우가있을 수 있습니다 것으로 보인다

process (carryIn, operation, ...) 
begin 
    case carryIn is 
     when '0' => 
      case operation is 
       when "00" => ... 
       when "01" => .. 
      end case; 
     when '1' => 
      case operation is => 
      ... 
    end case; 
end process; 

, 즉 두 개 이상의 경우 실제로 같은 일을이 구조 내에서이다 : 당신은 더 뭔가를 원한다. 이 경우에 일어날 일을 변경할 필요가있을 때마다 오류가 발생하기 쉽기 때문에 두 번 변경해야하기 때문에 이것은 나쁩니다. 이 경우

당신은 예를 들어, 단순히 열거 유형을 사용하여, 작동 모드를 지정 위와 같은 하나의 case 문을 수 :

다음
type ALU_OP_type is (ADD, SUBTRACT, ...); 
signal aluOp : ALU_OP_type; 

프로세스에 :

case carryIn is 
     when '0' => 
      case operation is 
       when "00" => aluOp <= ADD; 
       when "01" => aluOp <= SUBTRACT; 

등이 있습니다. 마지막으로 또 다른 case 문 (별도의 프로세스에서)을 사용하여 다음 작업을 수행합니다.

case aluOp is 
     when ADD => ... 
     when SUBTRACT => ... 

등등. 그러면 코드는 "우리가하려는 일을 해나 가기"와 "무언가를하도록"잘 분리됩니다. 중복 된 carryIn/operation 조합이 없다면 이는 아마도 쓸만한 가치가 없습니다.