Inflearn コミュニティ Q&A
chapter17 tb_fsm_counter_test.v 코드 질문드립니다.
作成
·
323
·
編集済み
1
// reset_n gen
$display("Reset! [%d]", $time);
# 100
reset_n <= 0;
# 10
reset_n <= 1;
# 10
@(posedge clk);tb_fsm_counter_test.v파일의
47line인 "@(posedge clk);" 문장에 대한 질문입니다.
왜 reset_n신호를 셋팅해주고 난다음에 "@(posedge clk);" 구문을 적어준 의미가 있을까요?? 해당 always문장에 아무내용도 없이 종료한 이유와 의미가 궁금합니다!.
감사합니다
クイズ
하드웨어 설계에서 FSM(Finite State Machine)의 주요 목적은 무엇일까요?
데이터 저장 용량 최대화
제어 로직을 체계적으로 설계
클럭 주파수 자동 조정
전력 소모량 실시간 측정
回答 2
1
0
안녕하세요 🙂
문법은 기본적으로 숙지하고 계시다 생각하고 강의를 제작하였습니다.
별도 문법설명은 GPT4 를 통해서 답변드립니다.
제 설명을 먼저 드리면, testbench 내의 @(posedge clk); 은 positive edge clock 신호를 기다리겠다는 뜻의 한줄입니다.
해당 줄에 따라 waveform 을 보시면 바로 감이 오실꺼에요.
@(posedge clk);
@(posedge clk);
@(posedge clk);
...
@(posedge clk);
@(posedge clk); 의 개수에 따른 waveform 을 비교해보시겠어요?
====================GPT===============================
Testbench에서 사용되는 @(posedge clk); 구문은 Verilog HDL의 이벤트 제어 구문 중 하나로, 클록(clk)의 상승 에지(posedge)가 발생할 때까지 시뮬레이션의 실행을 일시 중지하는 역할을 합니다. 이 구문은 주로 동기식 디자인 테스트에서 클록 주기의 시작을 나타내기 위해 사용됩니다.
@(posedge clk);구문은 시뮬레이션 중clk신호가 0에서 1로 변경되는 순간, 즉 상승 에지가 감지될 때까지 현재 실행 중인 프로세스를 일시 정지합니다. 상승 에지가 감지되면 이후의 명령어나 프로세스가 실행됩니다.
사용 목적
시간 동기화: Testbench에서는 디자인의 정확한 동작을 확인하기 위해 클록 주기에 맞춰 입력을 주고 출력을 검사해야 합니다.
@(posedge clk);구문을 사용하면, 클록의 상승 에지에 동기화하여 입력 신호를 변경하거나 출력 신호를 검사할 수 있습니다.동기식 설계 테스트: 대부분의 디지털 시스템은 클록 기반으로 동작합니다. 클록의 상승 에지에서 데이터를 샘플링하거나 상태를 변경하는 등의 동작이 발생합니다. 이러한 동작을 모의하고 검증하기 위해
@(posedge clk);구문을 사용합니다.
예제 사용
verilogCopy codeinitial begin
// 초기 조건 설정
reset = 1;
@(posedge clk); // 첫 번째 클록의 상승 에지까지 기다림
reset = 0;
// 이후의 시뮬레이션 동작
end
이 예제에서는 시뮬레이션을 시작하고, 첫 번째 클록의 상승 에지를 기다린 후에 리셋 신호를 비활성화합니다. 이러한 방식으로 테스트벤치에서 클록 주기에 맞춰 테스트 시나리오를 수행할 수 있습니다.
정리
@(posedge clk); 구문은 Verilog에서 클록 주기의 시작을 정확히 포착하고, 동기식 디자인의 동작을 테스트하기 위해 필수적으로 사용됩니다. 디자인의 동작을 클록 신호에 맞춰 정확하게 검증하고자 할 때 유용하게 사용됩니다.




