verilog
Verilog 디자인과 테스트벤치는 일반적으로 always
로 구성된 많은 코드 라인을 가지고 있습니다. 또는 initial
블록, 연속 할당 및 시뮬레이션 과정에서 다른 시간에 활성화되는 기타 절차적 진술.
Verilog 모델에서 신호 값의 모든 변경은 업데이트 이벤트로 간주됩니다. . always
과 같은 프로세스 및 assign
이러한 업데이트 이벤트에 민감한 블록은 임의의 순서로 평가되며 평가 이벤트라고 합니다. . 이러한 이벤트는 서로 다른 시간에 발생할 수 있으므로 이벤트 대기열로 일정을 예약하여 더 잘 관리되고 올바른 실행 순서를 보장합니다. 시뮬레이션 시간으로 정렬됩니다.
module tb;
reg a, b, c;
wire d;
// 'always' is a process that gets evaluated when either 'a' or 'b' is updated.
// When 'a' or 'b' changes in value it is called an 'update event'. When 'always'
// block is triggered because of a change in 'a' or 'b' it is called an evaluation
// event
always @ (a or b) begin
c = a & b;
end
// Here 'assign' is a process which is evaluated when either 'a' or 'b' or 'c'
// gets updated
assign d = a | b ^ c;
endmodule
시뮬레이션 단계는 4개의 다른 영역으로 나눌 수 있습니다. 활성 이벤트 대기열은 현재 시간에 실행해야 하는 프로세스 집합일 뿐이므로 활성 또는 다른 이벤트 대기열에 더 많은 프로세스가 예약될 수 있습니다. 이벤트는 모든 지역에 추가할 수 있지만 항상 활성 지역.
현재 시간 단계에 대한 활성 대기열의 모든 이벤트가 실행이 완료되면 시뮬레이터는 시간을 다음 단계로 진행하고 활성 대기열을 실행합니다.
module tb;
reg x, y, z
initial begin
#1 x = 1;
y = 1;
#1 z = 0;
end
endmodule
시뮬레이션은 시간 0에서 시작하고 시뮬레이션 시간이 1시간 단위에 도달하면 첫 번째 문장이 실행되도록 스케줄링되어 x와 y를 1로 할당합니다. 이것은 1시간 단위인 현재 시간에 대한 활성 큐입니다. 그런 다음 시뮬레이터는 z에 0이 할당된 1시간 단위 후에 다음 명령문을 예약합니다.
시뮬레이션 중에 동일한 설계 및 테스트벤치에 대해 서로 다른 출력을 제공하는 경쟁 조건이 있을 수 있습니다. 비결정적 행동의 이유 중 하나는 활동적 이벤트를 대기열에서 제거하고 임의의 순서로 처리할 수 있습니다.
verilog
Verilog는 하드웨어 설명 언어이며 설계자가 RTL 설계를 시뮬레이션하여 논리 게이트로 변환할 필요가 없습니다. 시뮬레이션이 필요한 이유는 무엇입니까? 시뮬레이션은 RTL 코드가 의도한 대로 동작하는지 확인하기 위해 다른 시간에 다른 입력 자극을 설계에 적용하는 기술입니다. 기본적으로 시뮬레이션은 설계의 견고성을 검증하기 위해 잘 따라야 하는 기술입니다. 또한 가공된 칩이 실제 세계에서 사용되는 방식과 다양한 입력에 반응하는 방식과 유사합니다. 예를 들어, 위의 디자인은 출력 pe 보여진 바와 같이. 시뮬레이션을 통해
Verilog 시뮬레이션은 시뮬레이터가 #1이 시간 측면에서 무엇을 의미하는지 알아야 하기 때문에 시간이 정의되는 방식에 따라 다릅니다. `timescale 컴파일러 지시문은 뒤에 오는 모듈의 시간 단위와 정밀도를 지정합니다. 구문 `timescale <time_unit>/<time_precision> // Example `timescale 1ns/1ps `timescale 10us/100ns `timescale 10ns/1ns time_unit time_precision 동안 지연 및 시뮬레