FPGA를 사용하여 4 개의 모터를 제어하려고합니다. (의 Verilog HDL) 제가 차단 커스텀 모듈 항상 이용하는 코드를 만들었다 (하나 개의 서보 모터를 제어하는, 그리고 값-L_CTRL 및 R_CTRL 서보 모터가 왼쪽으로 한 단계를 회전 또는 우측의 여부를 판정 입력이다) 여기서 FPGA를 사용하여 4 개의 모터 제어
맞춤 모듈 번호 :module Servo(CLK, RESETN, L_CTRL, R_CTRL, SERVO);
input CLK;
input RESETN, L_CTRL, R_CTRL;
output SERVO;
integer REG, CNT;
reg L, R;
reg SERVO;
always @(posedge RESETN or posedge CLK)
begin
if (RESETN) CNT = 0;
else
if (CNT >= 199) CNT = 0;
else CNT = CNT + 1;
end
always @(posedge RESETN or posedge CLK)
begin
if (RESETN)
REG = 15;
else
begin
L <= L_CTRL; R <= R_CTRL;
if (L == 0 & L_CTRL & REG > 7)
REG = REG - 1;
else if (R == 0 & R_CTRL & REG < 23)
REG = REG + 1;
end
end
always @(CNT or REG)
begin
if (CNT < REG)
SERVO = 1;
else
SERVO = 0;
end
endmodule
및 I 4 개 모터를 제어하기위한 코드를 만들어 : 항상 블록이 에러를 야기 측 모듈을 호출 추측
module Servo_Motor(direction,CLK,RESETN,SERVO);
input [1:0]direction;
input CLK, RESETN;
reg L_CTRL, R_CTRL;
reg [3:0] SERVO;
output [3:0] SERVO;
//servo0, servo1->x_axis
//servo2, servo3->y_axis
always @(posedge RESETN or posedge CLK)
begin
if(direction==2'b01)//east
begin
L_CTRL<=0; R_CTRL<=1;
Servo S0(CLK, RESETN, L_CTRL, R_CTRL, SERVO[0], enable_0);
Servo S1(CLK, RESETN, L_CTRL, R_CTRL, SERVO[1], enable_1);
SERVO[2]<=0;
SERVO[3]<=0;
end
else if(direction==2'b11)//SOUTH
begin
L_CTRL<=1; R_CTRL<=0;
Servo S2(CLK, RESETN, L_CTRL, R_CTRL, SERVO[2], enable_2);
Servo S3(CLK, RESETN, L_CTRL, R_CTRL, SERVO[3], enable_3);
SERVO[0]<=0;
SERVO[1]<=0;
end
else if(direction==2'b10)//WEST
begin
L_CTRL<=1; R_CTRL<=0;
Servo S0(CLK, RESETN, L_CTRL, R_CTRL, SERVO[0], enable_0);
Servo S1(CLK, RESETN, L_CTRL, R_CTRL, SERVO[1], enable_1);
SERVO[2]<=0;
SERVO[3]<=0;
end
else if(direction==2'b00)//NORTH
begin
L_CTRL<=0; R_CTRL<=1;
Servo S2(CLK, RESETN, L_CTRL, R_CTRL, SERVO[2], enable_2);
Servo S3(CLK, RESETN, L_CTRL, R_CTRL, SERVO[3], enable_3);
SERVO[0]<=0;
SERVO[1]<=0;
end
end
endmodule
. 이 문제를 해결하기위한 대안 알고리즘/방법이 있습니까?
감사합니다.