Menu
CoddyTech

입력 및 출력 포트

Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 31번째.

입력 및 출력 포트는 모듈이 외부 세계와 통신할 수 있도록 하는 연결입니다. 칩의 핀과 같습니다. 포트는 모듈과 나머지 설계 사이의 인터페이스입니다.

모든 모듈에는 다음이 있습니다:

  • 입력 포트: 모듈 안으로 들어오는 신호
  • 출력 포트: 모듈 밖으로 나가는 신호

입력 포트

입력 포트는 외부에서 데이터를 받습니다. 모듈 내부에서 변경할 수 없으며 읽기만 가능합니다.

input clk;        // 단일 비트 입력
input [7:0] data; // 8비트 입력 벡터
input a, b;       // 한 줄에 여러 입력

입력 규칙:

  • 모듈 내부에서 값을 할당할 수 없음
  • reg로 선언할 수 없음
  • 항상 기본값은 wire

출력 포트

출력 포트는 데이터를 외부로 보냅니다. assign 또는 always 블록으로 구동할 수 있습니다.

output out;           // 단일 비트 출력
output [3:0] result;  // 4비트 출력
output reg busy;      // 출력은 reg일 수 있음
output wire ready;    // 출력은 wire일 수 있음

출력에 관한 규칙:

  • wire(assign 사용) 또는 reg(always 사용)일 수 있습니다
  • 모듈 내부의 무언가에 의해 구동되어야 합니다

포트 선언 구문

포트 선언 구문은 모듈에서 입력 포트와 출력 포트를 작성하는 구체적인 방법입니다. 각 포트에 대해 Verilog에 세 가지를 알려 줍니다:

  1. 방향: 입력, 출력 또는 입출력인가요?
  2. 크기: 몇 비트 너비인가요?
  3. 이름: 무엇이라고 부르나요?
module example (
  input [7:0] data_in,    // 입력 벡터
  input clk,              // 단일 입력
  input enable,           // 단일 입력
  output reg [7:0] out,   // 출력 reg
  output busy             // 출력 wire
);

포트 방향이 중요한 이유

방향은 Verilog에 다음을 알려 줍니다.

  • 모듈이 읽을 수 있는 신호(입력)
  • 모듈이 쓸 수 있는 신호(출력)
  • 허용되는 연결 유형

잘못된 방향을 사용하면 컴파일 오류가 발생합니다.

코드 예제

module port_demo (
  input [3:0] a,        // 읽기만 가능
  input [3:0] b,        // 읽기만 가능
  output reg [3:0] sum, // 쓰기 가능 (reg)
  output [3:0] diff     // 쓰기 가능 (wire)
);
  always @(*) begin
    sum = a + b;        // 출력 reg에 쓰기
  end
  
  assign diff = a - b;   // 출력 wire에 쓰기
endmodule
challenge icon

챌린지

포트 선언 완성하기

할 일:

  1. 8비트 입력 data_in을 추가하세요
  2. 1비트 입력 clk를 추가하세요
  3. 4비트 출력 result를 추가하세요 (reg를 사용하세요. always 블록에서 할당됩니다.)
  4. 1비트 출력 valid를 추가하세요 (wire를 사용하세요. assign으로 할당됩니다.)

직접 해보기

module port_challenge (
  // 과제 1: data_in이라는 8비트 입력을 추가하세요
  
  
  // 과제 2: clk이라는 1비트 입력을 추가하세요
  
  
  // 과제 3: result라는 4비트 출력을 추가하세요 (reg 사용)
  
  
  // 과제 4: valid라는 1비트 출력을 추가하세요 (wire 사용)
  
  
);

  reg [3:0] counter;
  
  always @(posedge clk) begin
    counter <= counter + 1;
    result <= counter;
  end
  
  assign valid = (counter > 8);
  
endmodule
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨

직접 연습해 보세요: 온라인 Verilog 컴파일러