verilog
단일 명령문과 구문상 동일하고 블록 명령문이라고 하는 명령문 세트를 함께 그룹화하는 방법이 있습니다. . 블록 명령문에는 순차 및 병렬의 두 가지 종류가 있습니다.
명령문은 begin
을 사용하여 래핑됩니다. 및 end
키워드를 지정하고 지정된 순서대로 차례로 실행됩니다. 지연 값은 이전 명령문의 실행 시간을 기준으로 처리됩니다. 블록 내의 모든 명령문이 실행된 후 제어가 다른 곳으로 전달될 수 있습니다.
module design0;
bit [31:0] data;
// "initial" block starts at time 0
initial begin
// After 10 time units, data becomes 0xfe
#10 data = 8'hfe;
$display ("[Time=%0t] data=0x%0h", $time, data);
// After 20 time units, data becomes 0x11
#20 data = 8'h11;
$display ("[Time=%0t] data=0x%0h", $time, data);
end
endmodule
위의 예에서 begin-end
의 첫 번째 문 블록은 10시간 단위로 실행되고 두 번째 명령문은 30시간 단위로 실행됩니다. 이전 명령문 실행 후 20시간 단위입니다.
ncsim> run [Time=10] data=0xfe [Time=30] data=0x11 ncsim: *W,RNQUIE: Simulation is complete.
병렬 블록은 명령문을 동시에 실행할 수 있으며 지연 제어를 사용하여 할당의 시간 순서를 제공할 수 있습니다. 명령문은 fork
내에 래핑하여 병렬로 실행됩니다. 및 join
키워드.
initial begin
#10 data = 8'hfe;
fork
#20 data = 8'h11;
#10 data = 8'h00;
join
end
<노스크립트>
위의 예에서 fork-join
블록은 10 시간 단위로 명령문을 실행한 후 실행됩니다. 이 블록 내의 명령문은 병렬로 실행되며 시작될 첫 번째 명령문은 포크 조인 시작 후 10시간 단위의 지연이 있기 때문에 데이터에 8'h00 값이 할당된 명령문입니다. 10시간 단위가 더 지나면 첫 번째 명령문이 실행되고 데이터는 8'h11 값을 얻습니다.
initial begin
#10 data = 8'hfe;
fork
#10 data = 8'h11;
begin
#20 data = 8'h00;
#30 data = 8'haa;
end
join
end
<노스크립트>
begin-end
가 있습니다. 위의 예에서 블록과 시작-끝 블록 내의 모든 명령문은 순차적으로 실행되지만 블록 자체는 다른 명령문과 함께 병렬로 실행됩니다. 따라서 데이터는 20시간 단위에서 8'h11, 30시간 단위에서 8'h00, 60시간 단위에서 8'haa를 얻습니다.
순차 블록과 병렬 블록 모두 : name_of_block
를 추가하여 이름을 지정할 수 있습니다. 키워드 begin
뒤 및 fork
. 이렇게 하면 disable
에서 블록을 참조할 수 있습니다. 성명서.
begin : name_seq
[statements]
end
fork : name_fork
[statements]
join
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 동안 지연 및 시뮬레