레지스터 배열 저장
Coddy Verilog 여정의 RTL 설계 및 검증 섹션에 포함된 레슨. 38개 중 22번째.
언패킹된 배열은 하드웨어 저장 공간의 워드를 모델링할 수 있습니다. 클록에 동기화된 쓰기는 선택된 하나의 워드를 업데이트하고, 연속 읽기는 읽기 클록 없이 워드를 선택합니다. 합성 과정에서는 레지스터를 사용하여 작은 배열을 구현하거나, 지원되는 패턴에 대해 메모리 리소스를 추론할 수 있습니다. 기록되지 않은 워드가 0에서 시작한다고 절대 가정하지 마세요.
관련 발췌문이며, 주변 선언과 연결은 과제에서 제공됩니다.
reg [7:0] mem [0:3];
always @(posedge clk)
if(we) mem[waddr] <= data;
assign q = mem[raddr];쓰기는 에지 트리거 방식이며, 읽기는 선택된 저장 단어를 따릅니다.
쓰기 활성화와 읽기 타이밍을 명시적으로 정의하세요. 지정되지 않은 initial 메모리 내용에 의존하지 마세요.
챌린지
중급8비트 워드 네 개를 구현하세요. 상승 에지에서 we가 데이터를 mem[waddr]에 씁니다. q는 mem[raddr]을 비동기 조합 방식으로 읽습니다. 메모리에는 리셋이나 initial 내용이 없습니다. 테스트벤치는 관찰할 각 주소를 읽기 전에 씁니다. 관찰은 에지 이후에 이루어지므로 동일한 주소에 대한 쓰기는 q에 표시됩니다. 출력 열: q. 각 상승 클록 에지 전에 모든 제어 신호와 데이터가 안정되어 있으며, 결과는 그 이후에 관찰됩니다.
design.v를 완성하고 모듈 이름과 포트를 유지하세요. 잠긴 testbench.v가 입력 변경을 제공하고 안정된 후 출력을 출력합니다. 시뮬레이터 인수(예: +CASE=1)를 사용하여 시나리오를 선택하며, 표준 입력은 필요하지 않습니다. 설계에 출력, 지연 또는 시뮬레이션 종료를 추가하지 마세요. 예상 출력은 관찰마다 10진수 값이 한 행에 하나씩 표시되며, 값들은 공백 하나로 구분되고 줄바꿈으로 끝납니다.
직접 해보기
module dut (input clk, input we, input [1:0] waddr, input [7:0] data, input [1:0] raddr, output [7:0] q);
// 이 플레이스홀더를 여러분의 설계로 교체하세요.
assign q = 0;
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
RTL 설계 및 검증의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러