다음 코드가 컴파일되고 동시에 작동합니다.이 코드가 순차적으로 작동하도록 도와주세요. 즉 stage1 카운터가 자체적으로 재설정되고 stage2에 대해 0부터 시작해야합니다. 다음 코드는 Module1- stage1 및 module2-stage2를 포함합니다. 이것은 하나의 단계가 다른 단계를 완료 한 후에 발생하는 프로세스 흐름입니다. 예를 들어, 스테이지 1 대향하고 완료 될 때 그 자체를 재설정하고 단계 카운트 zero.Here 단계 2 개시 1 개 모듈은 스테이지 2 (18)와 스테이지 (2) 카운터 카운트Verilog를 사용하여이 코드를 연속적으로 실행하는 방법
module stage1(
input Clk, //50 Hz clock
input x0,
input reset,
output reg y0,y1,y2,y3,y5,y7,y10,y15,
output reg stage1_done
);
reg [15:0] counter = 0;
parameter F = 50;
[email protected] (posedge Clk or posedge reset)
if(reset) begin
counter <= 0;
{y0,y1,y2,y3,y5,y7,y10,y15} <= 8'b00000000;
stage1_done <= 0;
end else begin
if(x0 == 1) begin
if(counter == 18*F)
stage1_done <= 1;
else begin
counter <= counter + 1;
stage1_done <= 0;
end
if(counter >= 1*F && counter < 10*F)
y0 <= 1;
else
y0 <= 0;
if(counter >= 1*F && counter < 17*F)
y1 <= 1;
else
y1 <= 0;
if(counter >= 1*F && counter < 9*F)
y2 <= 1;
else
y2 <= 0;
if(counter >= 11*F && counter < 16*F)
y3 <= 1;
else
y3 <= 0;
if(counter >= 1*F && counter < 18*F)
y5 <= 1;
else
y5 <= 0;
if(counter >= 1*F && counter < 5*F)
y7 <= 1;
else
y7 <= 0;
if(counter >= 1*F && counter < 5*F)
y10 <= 1;
else
y10 <= 0;
if((counter >= 2*F && counter < 9*F) || (counter >= 13*F && counter < 17*F))
y15 <= 1;
else
y15 <= 0;
end
end
endmodule
// 모듈 (8)까지 세는 카운터를 갖고 ; 당신이 stage2
모듈에서 카운터가 counter
stage1
에서 완료된 후 계산 시작하려면
module stage2(
input x0,
input Clk, //50 Hz clock
input reset,
output reg y1,y3,y5,
output reg stage2_done
);
reg [15:0] counter = 0;
parameter F = 50;
[email protected] (posedge Clk or posedge reset)
if(reset) begin
counter <= 0;
{y1,y3,y5} <= 3'b000;
stage2_done <= 0;
end
else begin if(x0 == 1) begin
if(counter == 8*F)
stage2_done <= 1;
else begin
counter <= counter + 1;
stage2_done <= 0;
end
if(counter >= 1*F && counter < 8*F)
y1 <= 1;
else
y1 <= 0;
if(counter >= 1*F && counter < 8*F)
y3 <= 1;
else
y3 <= 0;
if(counter >= 1*F && counter < 8*F)
y5 <= 1;
else
y5 <= 0;
end
end
endmodule
동일한 작업을 시도했지만 올바른 해결책이 없었습니다. 1 단계에서 카운터를 재설정하고 2 단계에 stage1_done 조건을 제공하는 것과 같이 계속 진행하는 방법을 보여줄 수 있습니까? 감사합니다. –
'stage1_done'을'stage2' 모듈의 입력으로 선언하고, 최상위 레벨에서'stage1'에서'stage2'까지 경로를 지정하십시오. 'stage1'에서'counter '를 리셋하려면'stage1_done'을 선언 할 때'0''을 할당하십시오. – RaZ
여러 번 반복했지만 원하는 결과를 얻을 수 없습니다. if (stage1_done <= 1) begin과 같은 조건을 사용했습니다. counter <= 0; 끝과 몇 가지 다른 조건이 있지만 결과를 얻지 못하고 있습니다. 구현하여이 작업을 어떻게 시도하는지 알려주십시오. 나는 사용할 수있는 구문을 주석으로 처리하는 것을 의미합니다. –