인프런 커뮤니티 질문&답변

움직이는YM님의 프로필 이미지
움직이는YM

작성한 질문수

설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)

FSM 실습편에서 질문

해결된 질문

작성

·

823

1

맛비님 강의 FSM 실습편에서 궁금한점이 있어 질문드립니다

#10

@(posedge clk);

$display("Start! [%d]", $time);

i_run = 1;

@(posedge clk);

i_run = 0;

테스트벤치에서 initial begin 안에 이런 구문이 등장하는데

@(posedge clk) 뜻이 뭔가요

@를 보니

always @(posedge clk)이 생각나는데

제가 알기로는 initial 구문안에 always를 쓸 수 없다고 알고 있었거근요

@(posedge clk)는 always @(posedge clk)에서 always 만을 없앤 것인가요? 아니면

다른 어떤 의미가 있는 것인가요?

답변 1

1

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

안녕하세요 :)

Testbench 안에 사용했던  @(posedge clk) 여쭤보신 거로 이해했구요.

사용 가능합니다. 

해당 구문의 의미는, 

clk 이 Positive edge 가 입력되면 넘어가라.  라는 의미에요.

Testbench 작성시, Clock 동기화를 위해서 사용합니다.  (모듈에서는 사용 금지)

Testbench 를 작성하실때, 보통

always 

#5    clk = ~clk; 

initial begin

#10  블라블라

#10 블라블라

end

이렇게 많이 하시는데,  (처음 배우실때)

만약에 clk 이 #5 가 아니고 다른 숫자라면, 예를 들어 #7 이라고 가정하면 어떻게 될까요?

initial begin 안에 있는 #10 이 #14 로 바껴야 정상 동작하겠죠.

하지만 #10 대신,

@(posedge clk)   블라블라

가 되면 clk 의 숫자 관계없이, positive edge 에서 정상 동작 합니다.

당연히 @(negedge clk)  도 됩니다. :)

뭔가 길었는데, 정리하면

Testbench 에서 Clock 동기화에 맞춰서 기술하고 싶을 때, 사용합니다.

이렇게도 가끔 사용해요.  다시한번 말씀드리지만,  Testbench 에요!! 그럼 즐공하세요 :)

initial begin

// 10 cycle 기다리기 ver1

    for ( i = 0; i < 10; i = i+1) begin

        @(posedge clk);

    end 

// 10 cycle 기다리기 ver2  (repeat 사용. 훨씬 보기 좋습니다. 추천.)

    repeat (10) @(posedge clk);

end

네 테스트 벤치에 있던 표현이었습니다.

이해가 되었습니다 답변감사합니다!

움직이는YM님의 프로필 이미지
움직이는YM

작성한 질문수

질문하기