레지스터드 읽기 포트
Coddy Verilog 여정의 RTL 설계 및 검증 섹션에 포함된 레슨. 38개 중 23번째.
등록된 읽기는 클록 에지에서 메모리 데이터를 캡처하고 그 이후에 해당 값을 유지합니다. 읽기 활성화는 비활성화된 사이클에서 이전 출력을 유지할 수 있습니다. 읽기 레지스터를 리셋한다고 해서 모든 메모리 워드를 지울 필요는 없습니다. 논블로킹 읽기 및 쓰기 할당을 사용하면 읽기 표현식은 에지 이전의 워드를 확인합니다.
관련 발췌문입니다. 주변 선언과 연결은 과제에 제공되어 있습니다.
always @(posedge clk) begin
if(we) mem[waddr] <= data;
if(rst) q <= 0;
else if(re) q <= mem[raddr];
end출력 레지스터는 지정된 에지와 활성화된 경로에서만 업데이트됩니다.
문서 읽기 지연 시간, 읽기 비활성화 동작 및 실제로 어떤 상태 재설정이 초기화되는지 기록합니다.
챌린지
중급동기식 쓰기와 등록된 읽기 q를 사용하는 4단어 8비트 메모리를 구현하세요. we는 상승 에지에서 기록합니다. rst는 q만 동기적으로 지우며, 그렇지 않으면 re가 에지 이전의 mem[raddr]에서 q를 로드합니다. re=0이면 q의 값을 유지합니다. 메모리는 리셋되지 않으며, 쓰기 동작은 rst와 독립적입니다. 한 에지에서 읽기와 쓰기가 동일한 주소를 공유하면 q에는 이전 워드가 저장됩니다. 테스트에서는 활성화된 읽기 전에 워드를 초기화합니다. 출력 열: q. 모든 제어 신호와 데이터는 각 상승 클록 에지 전에 안정된 상태이며, 결과는 그 후에 관찰됩니다.
design.v를 완성하고 모듈 이름과 포트를 유지하세요. 잠긴 testbench.v가 입력 변경을 제공하고 안정화된 후 출력을 출력합니다. 이 테스트벤치는 +CASE=1과 같은 시뮬레이터 인수를 사용하여 시나리오를 선택하며, 표준 입력은 필요하지 않습니다. 설계에 출력, 지연 또는 시뮬레이션 종료를 추가하지 마세요. 예상 출력은 각 관찰 결과마다 십진수 값 한 행이며, 값은 하나의 공백으로 구분되고 줄바꿈으로 끝납니다.
직접 해보기
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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
RTL 설계 및 검증의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러