VHDL에 관한 강의를 듣고 Verilog를 배우기 시작했습니다. 행동 진술이 실행되는 순서를 이해하는 데 어려움을 겪고 있습니다. 여기에 문제의 코드가 있습니다. 여기 Verilog 실행 순서
//This files is an experiment into the order in which verilog executes it's statements
module MainCircuit(clk, start);
parameter cycles = 8;
input clk;
input start;
//input [15:0] data;
integer i;
always @(posedge clk)
begin
if(start)
begin
i=0;
repeat(cycles)
begin
@(posedge clk) $display("%d\ti = %d", $time, i);
i = i + 1;
end
end
end
endmodule
module tester;
reg clk;
wire start;
assign start = 1'b1;
initial clk = 1'b0;
MainCircuit myMain(clk, start);
initial repeat(40)
begin
#5 clk = 1'b1;
#5 clk = 1'b0;
end
endmodule
및
내가 각각의 긍정적 인 클럭 에지에서 0으로 재설정되지 않는 이유를 이해하지 않는 출력 15 i = 0
25 i = 1
35 i = 2
45 i = 3
55 i = 4
65 i = 5
75 i = 6
85 i = 7
105 i = 0
115 i = 1
125 i = 2
135 i = 3
145 i = 4
155 i = 5
165 i = 6
175 i = 7
195 i = 0
205 i = 1
215 i = 2
225 i = 3
235 i = 4
245 i = 5
255 i = 6
265 i = 7
285 i = 0
295 i = 1
305 i = 2
315 i = 3
325 i = 4
335 i = 5
345 i = 6
355 i = 7
375 i = 0
385 i = 1
395 i = 2
입니다. myMain이 실행중인 곳을 기억하고 시계가 호출 될 때마다 거기에서 계속합니까? 그렇다면 어디에서 멈출 것입니까? 그리고이 모든 것이 어떻게 합성 될까요?
다른 두 가지 사소한 질문 :
나는 < = 1'b01 시작을 작성하는 시도; 대신 할당 시작 = 1'b01; 두 번째 모듈에 있지만 작동하지 않습니다. 왜 안돼?
두 번째는 출력에서 이상한 간격이 무엇입니까?
감사합니다.
감사합니다. 처음 게시 할 때와 나는 Verilog 섹션이 그리 활성화되지 않을까 걱정했습니다. 1) 그래서 실행은'@ (posedge clk) $ display ("% d \ ti = % d", $ time, i); 또한, 어떻게 이것이 논리로 합성됩니까? 2) 입력을 회로에 연결하는 표준 방법은 어느 것입니까? 저는 할당과 항상 둘 다 절차 코드의 블록이라고 생각했지만 하드 와이어 링은 게이트 수준의 것보다 더 많은 것을 보았습니다. –
@ChrisMorin 대부분의 섹션보다 덜 활동적 일지 모르지만 대부분의 질문은 적어도 하나 또는 두 개의 답변을 얻는 것처럼 보입니다. 예, 실행은 표시 줄에서 일시 중지됩니다. @ (posedge clk)는 "시계의 포지티브 에지까지 여기에서 기다린 다음 다음 문장을 실행하십시오"를 의미합니다. 나는 정확히 '어떻게 합성 된 것인가?'라고 대답하는 방법을 확신하지 못합니다 ... 출력과 비슷하게 8 비트까지 실행 한 후 반복합니다. 입력을 단단히 연결하는 방법은 DUT의 포트를 상수 값으로 설정하는 assign 문에 아무런 문제가 없습니다. – Tim