Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

module commutator( input hallGrn,hallYlw,hallBlu, // hall effect sensor inputs output [1:0] selGrn,selYlw,selBlu // determine FET drive combination ); ////////////////////////////////////////// // Declare any needed internal signals

image text in transcribed

image text in transcribed

module commutator( input hallGrn,hallYlw,hallBlu, // hall effect sensor inputs output [1:0] selGrn,selYlw,selBlu // determine FET drive combination );

////////////////////////////////////////// // Declare any needed internal signals // // (for instance: rotation_state // ///////////////////////////////////////

////////////////////////////////////////////////\\ // sel states have 1 of 3 states: \\ // 0X => both FETs off (HIGH_Z) \\ // 10 => ~PWM to high FET and PWM to low FET \\ // 11 -> PWM to high FET and ~PWM to low FET \\ // Make use of these localparams to the comparisons // // in your nested ternary statement more readable // //////////////////////////////////////////////////// localparam HIGH_Z = 2'b0x; localparam LOW_PWM = 2'b10; localparam HIGH_PWM = 2'b11; ////////////////////////////////////////////// // Form a 3-bit rotation_state from: // // {hallGrn,hallYlw,hallBlu} concatenated // /////////////////////////////////////////// assign rotation_state = {hallGrn,hallYlw,hallBlu}; ///////////////////////////////////////////////// // form sel[1:0] signals using rotation state // // (Use a nested ternary statement for each // // of: selGrn, selYlw, selBlu) // /////////////////////////////////////////////

endmodule

Please complete the code above.

commutator.sv The basic job of the commutator is to choose the coil pairs that are driven and the direction current is driven through them based on the current position of the rotor. The current position of the rotor is determined by the hall effect sensor signals (hallGrn, hallelw, hallBlu). One can form a state vector by concantenating all three hall effect sensor signals. rotation_state {hallGrn, hallYlw,hallBlu} The coils are driven one of three ways: 1) Not driven: both FETs off (zero to both) (HIGH_Z) 2) Reverse current: ~PWM driven to high FET and PWM driven to low FET (LOW_PWM) 3) Forward current: PWM driven to high FETand ~PWM driven to low FET (HIGH_PWM) The following table shows the relationship between rotation_state as defined and the desired drive of the coils. rotation_state Green Coil (selGrn) Yellow Coil (selYlw) Blue Coil (selBlu) 3'b010 LOW PWM HIGH PWM HIGH Z 3'b011 LOW PWM HIGH Z HIGH PWM 3'b001 HIGH Z LOW PWM HIGH PWM 3'b101 HIGH PWM LOW_PWM HIGH Z 3'b100 HIGH PWM HIGH Z LOW PWM 3'b110 HIGH_Z HIGH_PWM LOW PWM For any combination not shown (3'b000 & 3'b111) all coils should be not driven (HIGH_Z). Although we could make 6 K-maps and pound out each of selGrn[1], selGrn[0], selYlw[1], ... selBlu[0] as verilog gate primitives, lets do it in a more elegant way and let a synthesis tool figure out the details of the Boolean logic. The verilog ternary assign statement can be nested which can make it quite powerful. If the condition is true it chooses an output for the assigned variable, but if it is false it falls into another ternary statement. One can make a priority encoded mux this way. Lets look at an example with a 6:1 mux in which the last 3 encodings (101, 110 & 111) all select sig5. assign sig_out = (sel==3'b000) ? sigo : - (sel==3'b001) ? sig1 = (sel==3'b010) ? sig2 : = (sel==3'b011) ? sig3 : - (sel==3'b100) ? sig4 : sig5; W A verilog shell (commutator.sv) is provided. Use an assign statement similar in nature to the one shown above to implement the required logic for selGrn[1:0], selylw[1:0], and selBlu[1:0]. commutator.sv The basic job of the commutator is to choose the coil pairs that are driven and the direction current is driven through them based on the current position of the rotor. The current position of the rotor is determined by the hall effect sensor signals (hallGrn, hallelw, hallBlu). One can form a state vector by concantenating all three hall effect sensor signals. rotation_state {hallGrn, hallYlw,hallBlu} The coils are driven one of three ways: 1) Not driven: both FETs off (zero to both) (HIGH_Z) 2) Reverse current: ~PWM driven to high FET and PWM driven to low FET (LOW_PWM) 3) Forward current: PWM driven to high FETand ~PWM driven to low FET (HIGH_PWM) The following table shows the relationship between rotation_state as defined and the desired drive of the coils. rotation_state Green Coil (selGrn) Yellow Coil (selYlw) Blue Coil (selBlu) 3'b010 LOW PWM HIGH PWM HIGH Z 3'b011 LOW PWM HIGH Z HIGH PWM 3'b001 HIGH Z LOW PWM HIGH PWM 3'b101 HIGH PWM LOW_PWM HIGH Z 3'b100 HIGH PWM HIGH Z LOW PWM 3'b110 HIGH_Z HIGH_PWM LOW PWM For any combination not shown (3'b000 & 3'b111) all coils should be not driven (HIGH_Z). Although we could make 6 K-maps and pound out each of selGrn[1], selGrn[0], selYlw[1], ... selBlu[0] as verilog gate primitives, lets do it in a more elegant way and let a synthesis tool figure out the details of the Boolean logic. The verilog ternary assign statement can be nested which can make it quite powerful. If the condition is true it chooses an output for the assigned variable, but if it is false it falls into another ternary statement. One can make a priority encoded mux this way. Lets look at an example with a 6:1 mux in which the last 3 encodings (101, 110 & 111) all select sig5. assign sig_out = (sel==3'b000) ? sigo : - (sel==3'b001) ? sig1 = (sel==3'b010) ? sig2 : = (sel==3'b011) ? sig3 : - (sel==3'b100) ? sig4 : sig5; W A verilog shell (commutator.sv) is provided. Use an assign statement similar in nature to the one shown above to implement the required logic for selGrn[1:0], selylw[1:0], and selBlu[1:0]

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Professional SQL Server 2012 Internals And Troubleshooting

Authors: Christian Bolton, Justin Langford

1st Edition

1118177657, 9781118177655

More Books

Students also viewed these Databases questions

Question

Show the properties and structure of allotropes of carbon.

Answered: 1 week ago