Moore Machine for motor controller

This commit is contained in:
Nanokloon 2025-02-20 15:27:14 +01:00
parent 4f0563da8c
commit 71272dc776
5 changed files with 101 additions and 41 deletions

View File

@ -1,4 +1,25 @@
/home/nano/Documents/EE/DS-B/LineFollower-DSB/blinking_led.sv {1 {vlog -work work -vopt -sv -stats=none /home/nano/Documents/EE/DS-B/LineFollower-DSB/blinking_led.sv
/home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/timebase.sv {1 {vlog -work work -vopt -sv -stats=none /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/timebase.sv
QuestaSim-64 vlog 10.6g Compiler 2019.08 Aug 2 2019
-- Compiling module timebase
Top level modules:
timebase
} {} {}} /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/robot.sv {1 {vlog -work work -vopt -sv -stats=none /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/robot.sv
QuestaSim-64 vlog 10.6g Compiler 2019.08 Aug 2 2019
-- Compiling module robot
Top level modules:
robot
} {} {}} /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/inputbuffer.sv {1 {vlog -work work -vopt -sv -stats=none /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/inputbuffer.sv
QuestaSim-64 vlog 10.6g Compiler 2019.08 Aug 2 2019
-- Compiling module inputbuffer
Top level modules:
inputbuffer
} {} {}} /home/nano/Documents/EE/DS-B/LineFollower-DSB/blinking_led.sv {1 {vlog -work work -vopt -sv -stats=none /home/nano/Documents/EE/DS-B/LineFollower-DSB/blinking_led.sv
QuestaSim-64 vlog 10.6g Compiler 2019.08 Aug 2 2019
-- Compiling module blinking_led
@ -33,4 +54,11 @@ QuestaSim-64 vlog 10.6g Compiler 2019.08 Aug 2 2019
Top level modules:
timebase_tb
} {} {}} /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/controller.sv {1 {vlog -work work -vopt -sv -stats=none /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/controller.sv
QuestaSim-64 vlog 10.6g Compiler 2019.08 Aug 2 2019
-- Compiling module controller
Top level modules:
controller
} {} {}}

View File

@ -834,7 +834,7 @@ Resolution = ns
UserTimeUnit = default
; Default run length
RunLength = 360 ms
RunLength = 40 ms
; Maximum iterations that can be run without advancing simulation time
IterationLimit = 10000000
@ -2114,7 +2114,7 @@ Project_File_P_0 = cover_toggle 0 vlog_protect 0 file_type systemverilog group_i
Project_File_1 = /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/robot.sv
Project_File_P_1 = cover_toggle 0 vlog_protect 0 file_type systemverilog group_id 0 cover_exttoggle 0 cover_nofec 0 cover_cond 0 vlog_1995compat SV vlog_nodebug 0 cover_fsm 0 last_compile 1740008019 vlog_noload 0 cover_branch 0 folder {Top Level} vlog_enable0In 0 cover_excludedefault 0 vlog_disableopt 0 cover_covercells 0 vlog_hazard 0 vlog_showsource 0 cover_optlevel 3 voptflow 1 ood 0 vlog_0InOptions {} toggle - vlog_options {} compile_to work vlog_upper 0 cover_noshort 0 compile_order 8 dont_compile 0 cover_expr 0 cover_stmt 0
Project_File_2 = /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/motorcontrol.sv
Project_File_P_2 = cover_toggle 0 vlog_protect 0 file_type systemverilog group_id 0 cover_exttoggle 0 cover_nofec 0 cover_cond 0 vlog_1995compat SV vlog_nodebug 0 cover_fsm 0 cover_branch 0 vlog_noload 0 last_compile 1740057090 folder {Top Level} cover_excludedefault 0 vlog_enable0In 0 vlog_disableopt 0 cover_covercells 0 voptflow 1 cover_optlevel 3 vlog_showsource 0 vlog_hazard 0 toggle - vlog_0InOptions {} ood 0 cover_noshort 0 vlog_upper 0 compile_to work vlog_options {} compile_order 7 cover_expr 0 dont_compile 0 cover_stmt 0
Project_File_P_2 = cover_toggle 0 vlog_protect 0 file_type systemverilog group_id 0 cover_exttoggle 0 cover_nofec 0 cover_cond 0 vlog_1995compat SV vlog_nodebug 0 cover_fsm 0 cover_branch 0 vlog_noload 0 last_compile 1740061310 folder {Top Level} cover_excludedefault 0 vlog_enable0In 0 vlog_disableopt 0 cover_covercells 0 voptflow 1 cover_optlevel 3 vlog_showsource 0 vlog_hazard 0 toggle - vlog_0InOptions {} ood 0 cover_noshort 0 vlog_upper 0 compile_to work vlog_options {} compile_order 7 cover_expr 0 dont_compile 0 cover_stmt 0
Project_File_3 = /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/inputbuffer.sv
Project_File_P_3 = cover_toggle 0 vlog_protect 0 file_type systemverilog group_id 0 cover_exttoggle 0 cover_nofec 0 cover_cond 0 vlog_1995compat SV vlog_nodebug 0 vlog_noload 0 last_compile 1740008019 folder {Top Level} cover_branch 0 cover_fsm 0 vlog_enable0In 0 cover_excludedefault 0 vlog_disableopt 0 cover_covercells 0 vlog_hazard 0 vlog_showsource 0 cover_optlevel 3 voptflow 1 ood 0 vlog_0InOptions {} toggle - vlog_options {} compile_to work vlog_upper 0 cover_noshort 0 compile_order 6 dont_compile 0 cover_expr 0 cover_stmt 0
Project_File_4 = /home/nano/Documents/EE/DS-B/LineFollower-DSB/blinking_led.sv

View File

@ -6,44 +6,76 @@ module motorcontrol
input logic [20:0] count_in,
output logic pwm);
typedef enum logic [1:0] { motor_off, motor_cw, motor_ccw } motor_controller_state;
motor_controller_state state,next_state;
// typedef enum logic [1:0] { motor_off, motor_cw, motor_ccw } motor_controller_state;
// motor_controller_state state,next_state;
//
// always_ff @(posedge clk)
// if (reset)
// state <= motor_off;
// else
// state <= next_state;
//
// always_comb //state logic
// begin
// if(direction ==? 0)
// next_state = motor_ccw;
// else
// next_state = motor_cw;
// end
//
// always_comb //PWM logic
// begin
// case(state)
// motor_off:
// pwm=0;
// motor_ccw:
// begin
// if(count_in <= 100000)
// pwm=1;
// else
// pwm=0;
// end
// motor_cw:
// begin
// if(count_in <= 200000 )
// pwm=1;
// else
// pwm=0;
// end
// endcase
//
// end
always_ff @(posedge clk)
if (reset)
state <= motor_off;
typedef enum logic { pwm_off, pwm_on } motor_controller_state;
motor_controller_state state,next_state;
always_ff @(posedge clk) begin
if(reset)
state<=pwm_off;
else
state <= next_state;
always_comb //state logic
begin
if(direction ==? 0)
next_state = motor_ccw;
else
next_state = motor_cw;
state<= next_state;
end
always_comb //PWM logic
begin
always_comb begin
case(state)
motor_off:
pwm_off:
begin
pwm=0;
motor_ccw:
begin
if(count_in <= 100000)
pwm=1;
else
pwm=0;
if(count_in ==? 0) begin
next_state=pwm_on;
end
end
motor_cw:
pwm_on:
begin
if(count_in <= 200000 )
pwm=1;
pwm=1;
if((direction ==? 0) && (count_in >= 100000)) begin //CCW
next_state=pwm_off;
end
else if((direction ==? 1) && (count_in >= 200000)) begin
next_state=pwm_off;
end
else
pwm=0;
next_state=pwm_on;
end
endcase
end
endmodule

View File

@ -116,23 +116,23 @@ R8
R1
vmotorcontrol
R2
R9
!s110 1740061324
R4
r1
!s85 0
31
!i10b 1
!s100 K8[l6@OcQ9YNX==LlIUOX3
IO?fk96X;Y9oaf[e1kUblg2
!s100 ;emhoV3HFDWaaM1`aeWkc3
If5hJo_lREHS9TNo3?Lhd]1
!s105 motorcontrol_sv_unit
S1
R5
w1740057090
w1740061310
8/home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/motorcontrol.sv
F/home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/motorcontrol.sv
L0 2
R6
R11
!s108 1740061324.000000
!s107 /home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/motorcontrol.sv|
!s90 -reportprogress|300|-work|work|-vopt|-sv|-stats=none|/home/nano/Documents/EE/DS-B/LineFollower-DSB/entities/motorcontrol.sv|
!i113 0
@ -141,10 +141,13 @@ R1
vmotorcontrol_tb
R2
R3
R4
r1
!s85 0
31
!i10b 1
!s100 :B8Yi2Oo;QP<8>OCdD=f33
IR^J9km[@a77RRWkS:_SJk2
R4
!s105 motorcontrol_tb_sv_unit
S1
R5
@ -153,9 +156,6 @@ w1739890968
F/home/nano/Documents/EE/DS-B/LineFollower-DSB/motorcontrol_tb.sv
L0 3
R6
r1
!s85 0
31
R7
!s107 /home/nano/Documents/EE/DS-B/LineFollower-DSB/motorcontrol_tb.sv|
!s90 -reportprogress|300|-work|work|-vopt|-sv|-stats=none|/home/nano/Documents/EE/DS-B/LineFollower-DSB/motorcontrol_tb.sv|

Binary file not shown.