비트 폭 안전 매개변수
Coddy Verilog 여정의 RTL 설계 및 검증 섹션에 포함된 레슨. 38개 중 12번째.
기초에서는 구성 가능한 너비를 소개했습니다. 재사용 가능한 RTL은 가장 작은 유효 너비도 처리하고, 중간 표현식의 크기를 의도적으로 지정하며, 하드코딩된 비트 위치를 피해야 합니다. 복제 연산 {WIDTH{1'b1}}은 너비에 맞는 마스크를 생성합니다. 매개변수는 런타임 제어가 아니라 elaboration 상수입니다.
관련 발췌문입니다. 주변 선언과 연결은 과제에 제공됩니다.
wire [WIDTH:0] sum;
assign sum = {1'b0,a} + {1'b0,b};
assign y = sum[WIDTH] ? {WIDTH{1'b1}} : sum[WIDTH-1:0];캐리 위치와 포화 값 모두 구성된 너비에 맞게 조정됩니다.
최소한의 유효 너비를 테스트하고, 너비에 종속된 모든 슬라이스와 상수를 매개변수에서 도출하세요.
챌린지
중급WIDTH비트 증가기를 작성하여 a+1의 하위 WIDTH비트를 반환하세요. 입력 b는 사용되지 않습니다. 동일한 모듈이 WIDTH=1인 경우와 더 넓은 비트 폭에서도 작동해야 합니다. 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 컴파일러