생성 루프
Coddy Verilog 여정의 RTL 설계 및 검증 섹션에 포함된 레슨. 38개 중 13번째.
generate-for 루프는 정교화 단계에서 반복되는 하드웨어를 생성합니다. 해당 genvar 인덱스는 런타임에 변경되는 레지스터가 아닙니다. 이름이 지정된 generate 블록은 생성된 인스턴스 또는 할당에 대해 예측 가능한 계층적 이름을 제공합니다. 루프의 경계는 정교화 시점의 상수여야 합니다.
관련 발췌문입니다. 주변 선언과 연결은 과제에 제공되어 있습니다.
genvar i;
generate
for(i=0;i<WIDTH;i=i+1) begin: bitcell
assign y[i] = a[i] ^ b[i];
end
endgenerate각 반복은 클록 사이클을 소모하는 대신 별도의 비트 수준 연산으로 전개됩니다.
엘라보레이션 단계에서 반복되는 구조를 설명하려면 상수 경계와 함께 genvar를 사용하세요.
챌린지
중급이름이 지정된 generate-for 루프와 genvar i를 사용하여 비트마다 하나의 연속 할당을 인스턴스화하고, y[i] = a[i] XOR b[i]를 생성하세요. WIDTH는 양수입니다. 잠긴 테스트벤치는 WIDTH 값 1, 4, 8을 인스턴스화하며, 더 좁은 인스턴스에는 a와 b의 하위 비트를 사용합니다. 출력 열은 10진수 형식의 y1, y4, y8입니다.
design.v를 완성하고 모듈 이름과 포트를 그대로 유지하세요. 잠긴 testbench.v는 입력을 변경하고 안정화된 후 출력을 출력합니다. +CASE=1과 같은 시뮬레이터 인수를 사용하여 시나리오를 선택하며, 표준 입력은 필요하지 않습니다. 설계에 출력, 지연 또는 시뮬레이션 종료를 추가하지 마세요. 예상 출력은 각 관측값당 10진수 값 한 행이며, 값은 공백 하나로 구분되고 개행 문자로 끝납니다.
직접 해보기
module dut #(parameter WIDTH=4) (input [WIDTH-1:0] a,b, output [WIDTH-1:0] y);
// 매개변수화된 회로를 구현하세요.
assign y = 0;
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
RTL 설계 및 검증의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러