수색…


통사론

  • 항상 @ (posedge clk) begin / * statements * / end
  • 항상 @ (negedge clk) begin / * statements * / end
  • 항상 @ (posedge clk 또는 posedge reset) // 동기식 재설정보다 덜 효율적으로 합성 할 수 있음

간단한 카운터

FPGA 스타일 플립 플롭 초기화를 사용하는 카운터 :

module counter(
    input clk,
    output reg[7:0] count
)
initial count = 0;
always @ (posedge clk) begin
    count <= count + 1'b1;
end

ASIC 합성에 적합한 비동기식 리셋을 사용하여 구현 된 카운터 :

module counter(
  input            clk,  
  input            rst_n, // Active-low reset
  output reg [7:0] count
)
always @ (posedge clk or negedge rst_n) begin
  if (~rst_n) begin
    count <= 'b0;
  end
  else begin
    count <= count + 1'b1;
  end
end

이 예제의 절차 블록은 모든 상승 클록 에지에서 count 를 증가시킵니다.

비 차단 할당

비 차단 할당 ( <= )은 가장자리 감지 always 블록 내의 할당에 사용됩니다. 블록 내에서 새 값은 전체 블록이 처리 될 때까지 보이지 않습니다. 예 :

module flip(
    input clk,
    input reset
)
reg f1;
reg f2;

always @ (posedge clk) begin
  if (reset) begin // synchronous reset
    f1 <= 0;
    f2 <= 1;
  end
  else begin
    f1 <= f2;
    f2 <= f1;
  end
end
endmodule

비 블로킹 ( <= ) 할당의 사용에주의하십시오. 첫 번째 할당은 프로 시저 블록 이후에 실제로 적용되지 않으므로 두 번째 할당은 블로킹 할당 ( = ) 또는 다른 언어의 할당과 달리 의도 된대로 실제로 두 변수를 스왑합니다. f1 여전히 블록의 두 번째 할당의 오른쪽에 원래 값을 갖습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow