현재 Verilog를 가르치고 있으며 내가 찾은 튜토리얼과 두 가지를 혼동하는 것은 입력을 변경 한 후 지연해야하는 시간을 구체적으로 계산하는 방법입니다 조합 회로 및 항목이 코드에서 실행되는 순서. 일반적으로 실제 회로에는 상승/하강 지연 시간이 있으며 출력을 계산하기 전에 입력 값이 생성되도록 출력을 지연시키고 싶지만 구체적인 것을 알고 싶습니다.Verilog 및 타이밍의 지연 계산에 대한 세부 정보
그래서, 여기에 예는 다음과 같습니다
이module dflipflop (d,clk,reset,q);
input d, clk, reset;
output q;
reg q;
always @ (posedge clk or posedge reset) begin
if (reset) begin
q <= 0;
else begin
q <= #2 d; //why did I need to delay this 2 time units?
end
end
end module
module main;
reg d, clk, rst;
wire q;
dflipflop dff(d,clk,rst,q);
inital begin
forever begin
clk = 0;
#5
clk = 1;
#5
clk = 0; //why do I need to reset the clk to 0 if this is a forever block and my first assignment is clk = 0 in the beginning?
end
end
initial begin
d=0; rst=1;
#4 //why #4? How did they calculate that?
d=1; rst=0;
#50
d=1; rst=1;
#20
d=0; rst=0;
end
end module
내 질문의 일부는 코드의 주석에 포함됩니다. 그러나, 다른 혼란은 타이밍입니다. 메인 모듈의 시작 부분에서 위의 main에서 정의한 매개 변수를 사용하여 dff라는 dflipflop 모듈을 인스턴스화합니다. 내 코드에서 다음과 같이 말합니다 : 모듈을 다시 빌드하거나 메인에서 입력을 변경할 때 Q를 다시 계산합니까? 링크가 보이지 않습니다.
내 게시물을 투표하려면 다음 번에 개선 할 수있는 이유를 알려주세요. –