안전한 case 디코딩
Coddy Verilog 여정의 RTL 설계 및 검증 섹션에 포함된 레슨. 38개 중 4번째.
정확한 제어 코드에는 일반적인 case 문을 사용하세요. 지원되지 않는 코드에 대한 default 동작을 지정하고 모든 출력을 assign하세요. casex를 사용한 와일드카드 디코딩은 시뮬레이션에서 알 수 없는 제어 비트를 숨길 수 있으므로, 디버깅 중 알 수 없는 값이 계속 표시되어야 할 때는 적합하지 않습니다.
관련 발췌문입니다. 주변 선언과 연결은 문제에서 제공됩니다.
always @* begin
y = 0;
invalid = 0;
case (op)
0: y = a & b;
1: y = a | b;
default: invalid = 1;
endcase
end지원되지 않는 코드는 이전 출력을 유지하는 대신 명시적인 상태를 생성합니다.
지원되지 않는 제어 코드를 명시적으로 정의하고, casex로 알 수 없는 제어 코드를 감추지 마세요.
챌린지
중급8비트 논리 유닛을 구현하세요. op 0은 a AND b를 계산하고, op 1은 a OR b를 계산하며, op 2는 a XOR b를 계산하고, op 3은 invalid를 1로 설정한 채 0을 반환합니다. 지원되는 연산에서 invalid는 0입니다. 출력 열: y, invalid. 모든 자극 값은 알려진 이진 값입니다.
design.v를 완성하고 모듈 이름과 포트를 그대로 유지하세요. 잠긴 testbench.v는 입력을 변경하고 입력이 안정된 후 출력을 출력합니다. +CASE=1과 같은 시뮬레이터 인수를 사용하여 시나리오를 선택하며, 표준 입력은 필요하지 않습니다. 설계에 출력, 지연 또는 시뮬레이션 종료를 추가하지 마세요. 예상 출력은 관찰 결과마다 10진수 값이 한 행에 하나씩 표시되며, 값은 하나의 공백으로 구분되고 줄바꿈으로 끝납니다.
직접 해보기
module dut (input [1:0] op, input [7:0] a, input [7:0] b, output reg [7:0] y, output reg invalid);
// 이 플레이스홀더를 여러분의 설계로 교체하세요.
initial y = 0;
initial invalid = 0;
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
RTL 설계 및 검증의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러