Menu
Coddy logo textTech

데이터 및 유효 신호 파이프라이닝

Coddy Verilog 여정의 RTL 설계 및 검증 섹션에 포함된 레슨. 38개 중 18번째.

파이프라인은 레지스터에 걸쳐 작업을 분리합니다. 각 데이터 항목 옆으로 valid 플래그가 이동하므로 다운스트림 단계에서 샘플과 버블을 구분할 수 있습니다. 논블로킹 할당을 사용하면 이후 단계는 동일한 에지에서 이전 단계의 이전 값을 읽습니다. 리셋은 파이프라인 내에서 진행 중인 작업을 무효화해야 합니다.

관련 발췌문입니다. 주변 선언과 연결은 과제에서 제공됩니다.

always @(posedge clk) begin
    stage <= data;
    stage_valid <= in_valid;
    result <= stage;
    out_valid <= stage_valid;
end

데이터와 그 유효성은 동일한 수의 레지스터를 통해 이동합니다.

모든 파이프라인 단계에서 데이터와 유효 신호를 정렬하고 리셋 시 유효성을 초기화하세요.

challenge icon

챌린지

중급

2개의 레지스터 단계로 이루어진 파이프라인을 구현하세요. 리셋이 아닌 에지마다 첫 번째 단계는 a와 in_valid를 캡처합니다. 두 번째 단계는 이전 첫 번째 단계의 값을 사용합니다. 즉, out_valid는 이전의 valid 값이 되고, valid인 경우 y는 이전 데이터에 1을 더한 값을 256으로 나눈 나머지가 되며, 그렇지 않으면 0이 됩니다. 동기식 rst는 두 단계와 출력을 모두 지웁니다. 출력 열: y, out_valid. 각 상승 클록 에지 전에 모든 제어 신호와 데이터는 안정된 상태이며, 결과는 그 이후에 관찰됩니다.

design.v를 완성하고 모듈 이름과 포트를 그대로 유지하세요. 잠긴 testbench.v는 입력을 변경하고 안정화된 후 출력을 출력합니다. +CASE=1과 같은 시뮬레이터 인수를 사용하여 시나리오를 선택하며, 표준 입력은 필요하지 않습니다. 설계에 출력, 지연 또는 시뮬레이션 종료를 추가하지 마세요. 예상 출력은 각 관찰 결과마다 10진수 값으로 이루어진 한 행이며, 값은 공백 하나로 구분하고 줄바꿈으로 끝납니다.

직접 해보기

module dut (input clk, input rst, input in_valid, input [7:0] a, output reg [7:0] y, output reg out_valid);
    // 이 플레이스홀더를 여러분의 디자인으로 교체하세요.
    initial y = 0;
    initial out_valid = 0;
endmodule
quiz icon실력 점검

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

RTL 설계 및 검증의 모든 레슨

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