해결된 질문
작성
·
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
네 테스트 벤치에 있던 표현이었습니다.
이해가 되었습니다 답변감사합니다!