From 71272dc776a6f059488f1c6eca7228c6191febc4 Mon Sep 17 00:00:00 2001 From: Nanokloon Date: Thu, 20 Feb 2025 15:27:14 +0100 Subject: [PATCH] Moore Machine for motor controller --- LineFollower.cr.mti | 30 ++++++++++++- LineFollower.mpf | 4 +- entities/motorcontrol.sv | 90 ++++++++++++++++++++++++++------------- work/_info | 18 ++++---- work/_lib.qdb | Bin 49152 -> 49152 bytes 5 files changed, 101 insertions(+), 41 deletions(-) diff --git a/LineFollower.cr.mti b/LineFollower.cr.mti index 28a2f15..c14a983 100644 --- a/LineFollower.cr.mti +++ b/LineFollower.cr.mti @@ -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 + } {} {}} diff --git a/LineFollower.mpf b/LineFollower.mpf index 6c4d910..c5c692f 100644 --- a/LineFollower.mpf +++ b/LineFollower.mpf @@ -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 diff --git a/entities/motorcontrol.sv b/entities/motorcontrol.sv index d11955b..bb0d21d 100644 --- a/entities/motorcontrol.sv +++ b/entities/motorcontrol.sv @@ -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 diff --git a/work/_info b/work/_info index c7d4365..8352d05 100644 --- a/work/_info +++ b/work/_info @@ -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| diff --git a/work/_lib.qdb b/work/_lib.qdb index fe8059f15e145157615904eef5543284b1293fa8..0f5e00cef45f9f18287c16e8ba0073dee85cf1ac 100644 GIT binary patch delta 654 zcmY+B-)mBF7{5gDU>C*Eo8b>4f3%ZH>T%~Bj3Wb& z=OPG3EWQxkq`MkHL5UY$xFz;abko3S47%*HD?4gQ-90?-=Xu|k_f-^~qUiQm_};u6 z4+T~!Ck>@^mP>ANc~0WQb<=&4COw)4FQa}~UZRQ2iGhDM~VlXGWuCeSrVv!~<%>zZkW>Vq` zrE;FnKFQ={e}>JrZ!CiGsv0rSD3Qq$*?GwGueQo-n!%`U$qODtpZvnjc^yuy!!o(ao odFJ-^qx9qJ5NoY}iolHVPho*tUc%2hHVETh*9HmP?;?o*2B1*GO8@`> delta 634 zcmX|;T}V@57{}k|J!k4!nJCuS&d0kgr(!y9<{&ni?4pa{jO+ulMf=E?!@zBFb}&3h zZMzG)FkXaivaTd3iZM`VI++mCb#x&#^g^VY>Z*%Cs(s*iZvOm#e|Wy~c`l#lRz)}{ zNpm6p2=5VKF`?1eJYAp$&5if<@-9Fc%}_mIq_P>lf1;B~WpY$Ea?$eJP@TXCdm3}Y z1bY{|%efr`tUE6AjFq<*-?84btiCo(6o1JNPVH-~#fSXzJPOh%(v7x-HcZ0knv&x#XMvA0Z zDs0QoS55Y8J*WgB*ux7L!xT)l#UxC&MF0ZqWPRs+1R`xi1(khx>Eu(D#6kC9uf*;vo((P3GTUD8Kcm#@mV<@d^O>5KGJ zIZ&$No_HkI&Z<|Doo t%=#Y>makQBfX$0z22C$6HJ&wZYCbcG$UY*tanC_k+f^XKj&=#C{{fL^x1<07