본문 바로가기

Verilog/HDLbits

[HDLBits] Exams/ece241 2014 q5a

1.    문제 및 설명

     A.   1입력 1출력 직렬 2의 보수기의 무어 상태 머신을 설계하시오.

  • 출력(z): 입력된 숫자에 대한 2의 보수를 출력합니다.
  • 입력(x): 숫자의 최하위 비트부터 시작하여 클락 주기마다 한 비트씩 입력됩니다.
  • 동작 제어: 리셋 신호가 해제되면 변환을 시작하고, 리셋 신호가 활성화 되면 동작을 멈춥니다.

 

2.    요구사항

     A.   1입력 1출력 직렬 2의 보수기의 무어 상태 머신을 설계하시오.

  • 데이터 길이: 이 머신의 임의의 길이를 가지 입력 숫자를 처리할 수 있어야 합니다.
  • 리셋: 비동기 리셋 기능이 필요합니다.

 

 

3.    문제 풀이

     A.     2의 보수

  • 컴퓨터가 음수를 표현하고 계산하기 위해 사용하는 방식
  • 계산법
    • 1. 비트 반전
    • 2. '1' 더하기
      • ex): +3 (이진수): 0011
        • 1단계 (비트 반전): 1100
        • 2단계 (1 더하기): 1101 (← 이것이 컴퓨터가 인식하는 -3입니다!)

     B.     State

  • A: 첫 '1' 입력 전 '0' 은 입력을 그대로 출력
  • B: 입력 첫 '1' 은 입력을 그대로 출력
  • C: 첫 입력 '1' 후에는 입력 반전하여 출력(입력: 0)
  • D: 첫 입력 '1' 후에는 입력 반전하여 출력(입력: 1)

 

4. 모듈 정의

module top_module (
    input clk,
    input areset,
    input x,
    output z
); 

 

 

5. 답

module top_module (
    input clk,
    input areset,
    input x,
    output z
); 
    parameter A = 2'b00, B = 2'b01, C= 2'b10, D = 2'b11;
    reg [1:0] state, next_state;
    
    always@(*)
        begin
            case(state)
                A: next_state = x?B:A;
                B: next_state = x?D:C;
                C: next_state = x?D:C;
                D: next_state = x?D:C;
            endcase
        end
    
    assign z = (state == B|state == C);
    
    always@(posedge clk, posedge areset)
        begin
            if(areset)
                begin
                    state <= A;
                end
            else
                begin
                	state <= next_state;
                end
        end
                        
                
                

endmodule

'Verilog > HDLbits' 카테고리의 다른 글

[HDLBits] Exams/2014 q3fsm  (0) 2026.05.17
[HDLBits] Exams/ece241 2014 q5b  (0) 2026.05.10
[HDLBits] Exams/ece241 2013 q8  (0) 2026.05.10
HDLbits[HDLBits] Fsm hdlc  (0) 2026.05.10
[HDLBits] Fsm serialdp  (0) 2026.05.06