Last active
March 6, 2016 04:49
-
-
Save mcgodfrey/10efe8f8644f3a7c190e to your computer and use it in GitHub Desktop.
Example servo control module in Verilog. Sweeps 4 servo motors back and forth at different speeds.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Servo motor control demo module | |
Four servos swing back and forth with different speeds. | |
*/ | |
module mojo_top( | |
input clk, // 50MHz clock input | |
//remaining default inputs/outputs omitted | |
output [3:0] servo_out //PWM output lines for each servo | |
); | |
//Usual setup code omitted (setting SPI lines, reset, etc. | |
localparam NUM_SERVOS = 4; | |
//pos is a 32 bit array (8 bits per servo) | |
wire [(NUM_SERVOS*8)-1:0] pos; | |
genvar i; | |
//Generate a serparate up/down counter for each servo | |
//Each one moves at a different speed (different CTR_LEN) | |
generate | |
for (i = 0; i < NUM_SERVOS; i=i+1) begin: counter_gen_loop | |
counter #(.CTR_LEN(26+i)) pos_counter ( | |
.clk(clk), | |
.rst(rst), | |
.value(pos[(i+1)*8-1:i*8]) | |
); | |
end | |
endgenerate | |
//loop to generate the servo controllers, 1 per servo. | |
//each has its position wired to the corresponding up/down counter above. | |
generate | |
for (i = 0; i < NUM_SERVOS; i=i+1) begin: servo_gen_loop | |
servo_controller servo_sweep ( | |
.clk(clk), | |
.rst(rst), | |
.position(pos[(i+1)*8-1:i*8]), | |
.servo(servo_out[i]) | |
); | |
end | |
endgenerate | |
endmodule |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment