Menu
Coddy logo textTech

읽기-쓰기 포워딩

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

메모리 인터페이스는 동일 주소에서의 읽기/쓰기 동작을 정의해야 합니다. 포워딩은 충돌이 발생했을 때 들어오는 쓰기 데이터를 명시적으로 선택하여 새 데이터 동작을 생성합니다. 이 바이패스가 없으면 이전의 논블로킹 읽기 템플릿이 기존 데이터를 캡처합니다. 디바이스 메모리 모드는 서로 다르므로 시뮬레이션 의미론만으로는 특정 프리미티브 매핑을 보장할 수 없습니다.

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

if(re) begin
    if(we && waddr==raddr) q <= data;
    else q <= mem[raddr];
end

바이패스는 실제 주소 충돌이 발생한 경우에만 입력된 워드를 선택합니다.

충돌 동작을 명시적으로 정의하고 선택한 하드웨어 메모리 모드에 대해 이를 확인하세요.

challenge icon

챌린지

중급

새 데이터 포워딩을 지원하는 등록 읽기 방식의 네 단어 메모리를 구현하세요. 쓰기 및 리셋/읽기 활성화 규칙은 이전 레슨과 동일합니다. 활성화된 읽기가 동일한 주소에 대한 활성화된 쓰기와 충돌하는 경우, q는 이전 워드 대신 들어오는 데이터를 캡처합니다. 그 외의 읽기에서는 mem[raddr]를 캡처합니다. 출력 열: q. 모든 제어 신호와 데이터는 각 상승 클록 에지 전에 안정된 상태이며, 결과는 그 이후에 관찰됩니다.

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

직접 해보기

module dut (input clk, input rst, input we, input re, input [1:0] waddr, input [1:0] raddr, input [7:0] data, output reg [7:0] q);
    // 이 플레이스홀더를 자신의 디자인으로 교체하세요.
    initial q = 0;
endmodule
quiz icon실력 점검

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

RTL 설계 및 검증의 모든 레슨

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