verilog
Verilog 모듈에는 모듈 이전에 정의된 시간 척도가 있어야 하지만 시뮬레이터는 기본 시간 척도를 삽입할 수 있습니다. Verilog의 정교한 계층 구조의 모든 범위에 적용되는 실제 시간 척도는 시스템 작업 $printtimescale
을 사용하여 인쇄할 수 있습니다. 범위를 인수로 허용합니다.
module tb;
initial begin
// Print timescale of this module
$printtimescale(tb);
// $printtimescale($root);
end
endmodule
이 모듈 이전에 timescale 지시문이 배치되지 않았음에도 시뮬레이터는 1ns/1ns timescale 값을 적용했습니다.
시뮬레이션 로그xcelium> run Time scale of (tb) is 1ns / 1ns xmsim: *W,RNQUIE: Simulation is complete.
기본적으로 파일에 배치된 타임스케일 지시어는 다른 타임스케일 지시어가 정의될 때까지 지시어를 따르는 모든 모듈에 적용됩니다.
`timescale 1ns/1ps
module tb;
des m_des();
alu m_alu();
initial begin
$printtimescale(tb);
$printtimescale(tb.m_alu);
$printtimescale(tb.m_des);
end
endmodule
module alu;
endmodule
`timescale 1ns/10ps
module des;
endmodule
위의 예에서 tb와 alu는 1ns/1ns의 시간 척도로 끝나고 des는 des
의 모듈 정의 앞에 지시문을 배치하기 때문에 1ns/10ps의 시간 척도를 얻습니다. 시뮬레이션 로그xcelium> run Time scale of (tb) is 1ns / 1ps Time scale of (tb.m_alu) is 1ns / 1ps Time scale of (tb.m_des) is 1ns / 10ps xmsim: *W,RNQUIE: Simulation is complete.
`include
를 사용하여 다른 파일을 현재 파일에 포함할 수 있습니다. 전처리기 지시문이며 컴파일러가 컴파일 전에 포함된 파일의 내용을 배치하도록 합니다. 따라서 이는 다른 파일의 전체 내용을 이 기본 파일에 단순히 붙여넣는 것과 같습니다.
// main.v
`timescale 1ns/1ps
module tb;
des m_des();
alu m_alu();
initial begin
$printtimescale(tb);
$printtimescale(tb.m_alu);
$printtimescale(tb.m_des);
end
endmodule
`include "file_alu.v"
`include "file_des.v"
// file_alu.v
module alu;
endmodule
// file_des.v
`timescale 1ns/10ps
module des;
endmodule
결과가 이전 예와 정확히 동일한지 확인하십시오. alu는 1ns/1ps의 시간 척도를 얻습니다. 컴파일러가 다른 파일에 배치하더라도 alu 정의를 찾을 때까지 유효한 마지막 지시문이기 때문입니다. des는 정의 전에 지시문이 교체되었기 때문에 1ns/10ps의 타임스케일을 얻습니다.
시뮬레이션 로그xcelium> run Time scale of (tb) is 1ns / 1ps Time scale of (tb.m_alu) is 1ns / 1ps Time scale of (tb.m_des) is 1ns / 10ps xmsim: *W,RNQUIE: Simulation is complete.
파일을 포함하는 순서는 시간 척도 지시어를 재정의하는 데 중요한 역할을 하며, 이는 아래 예에서 분명합니다.
// main.v
`timescale 1ns/1ps
module tb;
des m_des();
alu m_alu();
initial begin
$printtimescale(tb);
$printtimescale(tb.m_alu);
$printtimescale(tb.m_des);
end
endmodule
// NOTE! Swapped order of inclusion
`include "file_des.v"
`include "file_alu.v"
// file_alu.v
module alu;
endmodule
// file_des.v
`timescale 1ns/10ps
module des;
endmodule
모듈 alu가 이제 1ns/10ps의 시간 척도를 갖는 것을 확인하십시오.
시뮬레이션 로그xcelium> run Time scale of (tb) is 1ns / 1ps Time scale of (tb.m_alu) is 1ns / 10ps Time scale of (tb.m_des) is 1ns / 10ps xmsim: *W,RNQUIE: Simulation is complete.
이것이 파일의 맨 위에 timescale 지시어를 두어 해당 파일의 모든 모듈이 파일 포함에 관계없이 올바른 시간 단위를 가정하도록 하는 이유 중 하나입니다.
그러나 이 접근 방식을 사용하면 각 파일을 변경하지 않고 다른 시간 척도 정밀도(사선 다음 값)로 컴파일하기 어려울 수 있습니다. 많은 컴파일러와 시뮬레이터는 모든 모듈에 적용될 기본 타임스케일 값을 재정의하는 옵션도 제공합니다.
verilog
Verilog 시뮬레이션은 시뮬레이터가 #1이 시간 측면에서 무엇을 의미하는지 알아야 하기 때문에 시간이 정의되는 방식에 따라 다릅니다. `timescale 컴파일러 지시문은 뒤에 오는 모듈의 시간 단위와 정밀도를 지정합니다. 구문 `timescale <time_unit>/<time_precision> // Example `timescale 1ns/1ps `timescale 10us/100ns `timescale 10ns/1ns time_unit time_precision 동안 지연 및 시뮬레
디자인 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