verilog
Verilog 문 세트는 일반적으로 시뮬레이션에서 순차적으로 실행됩니다. 이러한 명령문은 절차적 차단하다. 절차적에는 주로 두 가지 유형이 있습니다. Verilog의 블록 - 초기 그리고 항상
initial
[single statement]
initial begin
[multiple statements]
end
initial
블록은 합성할 수 없으므로 디지털 요소가 있는 하드웨어 회로도로 변환할 수 없습니다. 따라서 초기 블록은 시뮬레이션에 사용되는 것보다 많은 목적을 수행하지 않습니다. 이 블록은 주로 변수를 초기화하고 특정 값으로 설계 포트를 구동하는 데 사용됩니다.
initial
블록은 시간 0 단위에서 시뮬레이션 시작 시 시작됩니다. 이 블록은 전체 시뮬레이션 동안 한 번만 실행됩니다. initial
실행 블록 내의 모든 명령문이 실행되면 블록이 종료됩니다.
위에 표시된 이미지에는 module
이 있습니다. 및 b라는 두 개의 내부 신호가 있는 행동이라고 합니다. initial
블록에는 명령문이 하나만 있으므로 begin
내에 명령문을 배치할 필요가 없습니다. 및 end
. 이 명령문은 초기 블록이 시간 0 단위에서 시작될 때 값 2'b10을 a에 할당합니다.
아래 표시된 코드에는 신호 b에 일부 값을 할당하는 추가 명령문이 있습니다. 그러나 이것은 이전 명령문을 실행한 후 10시간 단위 후에만 발생합니다. 이것은 a가 주어진 값으로 먼저 할당되고 10시간 단위 후에 b가 0으로 할당됨을 의미합니다.
<노스크립트>
initial
의 수에는 제한이 없습니다. 모듈 내에서 정의할 수 있는 블록입니다.
아래에 표시된 코드에는 3이 있습니다. initial
모든 블록이 동시에 시작되고 병렬로 실행됩니다. 그러나 각 초기 블록 내의 명령문 및 지연에 따라 블록을 완료하는 데 걸리는 시간이 다를 수 있습니다.
이 예에서 첫 번째 블록의 지연 시간은 20단위이고 두 번째 블록의 총 지연 시간은 50단위(10 + 40)이고 마지막 블록의 지연 시간은 60단위입니다. 따라서 60시간 단위까지 실행 중인 초기 블록이 하나 이상 있기 때문에 시뮬레이션을 완료하는 데 60시간 단위가 걸립니다.
$finish
현재 시뮬레이션을 종료하도록 시뮬레이터에 지시하는 Verilog 시스템 작업입니다.
마지막 블록에 아래와 같이 30시간 단위의 지연이 있는 경우 시뮬레이션은 30시간 단위로 종료되어 다른 모든 initial
이 종료됩니다. 해당 시간에 활성화된 블록입니다.
initial begin
#30 $finish;
end
initial
블록은 시뮬레이션에서 실행됩니다.
시뮬레이션 예제가 있는 슬라이드쇼를 보려면 여기를 클릭하십시오!
verilog
Verilog는 하드웨어 설명 언어이며 설계자가 RTL 설계를 시뮬레이션하여 논리 게이트로 변환할 필요가 없습니다. 시뮬레이션이 필요한 이유는 무엇입니까? 시뮬레이션은 RTL 코드가 의도한 대로 동작하는지 확인하기 위해 다른 시간에 다른 입력 자극을 설계에 적용하는 기술입니다. 기본적으로 시뮬레이션은 설계의 견고성을 검증하기 위해 잘 따라야 하는 기술입니다. 또한 가공된 칩이 실제 세계에서 사용되는 방식과 다양한 입력에 반응하는 방식과 유사합니다. 예를 들어, 위의 디자인은 출력 pe 보여진 바와 같이. 시뮬레이션을 통해
디자인 module pr_en ( input [7:0] a, input [7:0] b, input [7:0] c, input [7:0] d, input [1:0] sel, output reg [7:0] out); always @ (a or b or c or d or sel) begin if (sel == 2b00) out <= a; else if