inflearn logo
강의

Course

Instructor

Design Self-Study Tastebi's Practical Verilog HDL Season 1 (From Clock to Internal Memory)

[HDL Chapter 17] Let's understand FSMs for controlling HW operation. (Practical Application)

chapter17 tb_fsm_counter_test.v 코드 질문드립니다.

324

scryid

15 asked

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문장에 아무내용도 없이 종료한 이유와 의미가 궁금합니다!.

감사합니다

verilog-hdl fpga 임베디드

Answer 2

1

scryid

빠르고 자세한 답변 감사드립니다!

0

semisgdh

안녕하세요 🙂

문법은 기본적으로 숙지하고 계시다 생각하고 강의를 제작하였습니다.

별도 문법설명은 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에서 클록 주기의 시작을 정확히 포착하고, 동기식 디자인의 동작을 테스트하기 위해 필수적으로 사용됩니다. 디자인의 동작을 클록 신호에 맞춰 정확하게 검증하고자 할 때 유용하게 사용됩니다.

latency 개념 구현

1

80

3

비바도 all os버전

1

64

2

초기화를 reset_n 이 '1'일 때가 아닌 '0' 일 때 실행시키는 이유 질문

1

66

2

다운로드용량

1

67

2

비바도리눅스설치

1

78

2

전체path복사넣기

1

58

2

Vivado 2025.2 리눅스 설치 후 실행 에러와 솔루션 (libxv_commontasks.so)

1

140

2

explorer.exe오류

1

96

3

mobaxterm설치오류

1

82

2

./build시, waveform 'divide color' 사용

1

50

2

Latch와 관련하여 (Time borrowing, Latch-based design)

1

120

2

clean 명령어가 안되는데, 따로 저장해줘야 하는지 궁금합니다.

0

56

1

안녕하세요 설치 관련 질문 드립니다.

1

59

3

16장 mealy 설계.

1

70

2

14장 Cycle 관련, Testbench 코드.

1

62

2

21강(16장) 초기값 설정이 적용되는 시점 질문

1

58

1

20강(15장) - 밀리 머신 관련하여 질문 드립니다.

1

62

2

build에러 질문

0

53

2

1장 ./build에서 에러가 나요

1

69

2

FPGA 강의 보드 문의 드립니다.

1

103

2

5장 DFF특성에 대한 질문

1

71

3

vivado linux 사용 이유.

1

131

2

메모리의 형태가 전체설계에 미치는 영향이 궁금합니다.

1

100

2

디스코드 멤버쉽 등업 관련 문제

1

89

2