How to Create Power Control Switch with Finite State Machine (FSM)

Finite State Machine(FSM) เป็นตัวช่วยในการออกแบบระบบวงจรดิจิตอล โดยใช้เทคนิคเขียนแผงผังการทำงานแบบ state ซึ่งทำให้เข้าใจขั้นตอนการทำงานของระบบวงจรดิจิตอลที่จะออกแบบได้ง่ายขึ้นและทำให้การเขียนโปรแกรมด้วยภาษา VHDL(Very High Speed Intregrated Circuit Hardware Description Language) ง่ายขึ้นด้วย

FSM

การเขียน Finite State Machine ใน VHDL จะเป็นการเขียนแบบ sequential logic คือ การทำงานจะมีการเขียนเงื่อนไขตรวจสอบค่า input มีการเก็บค่าสถานะและทำการตรวจสอบเงื่อนไขอย่างต่อเนื่องซึ่งสามารถเขียนการทำงานแบบซับซ้อนหรือแบบง่ายๆ เช่น วงจร counters

ตัวอย่างการเขียนนี้ จะทำการเขียน FSM เพื่อสร้างวงจรดิจิตอลภายใน FPGA ควบคุมการเปิด-ปิดวงจรจ่ายพลังงานซึ่งมีสัญญาณควบคุมจากวงจรป้องกันกระแสเกิน(Trip current) เป็นตัวตัดสัญญาณการเปิด-ปิดวงจรจ่ายพลังงาน

การเขียน FSM มีวิธีการดังนี้

1.กำหนดสัญญาณ input/output ให้ Blank box.  

2.คิดสถานะการทำงานก่อนว่ามีอะไรบ้าง

3.เขียน Diagram FSM

4.แปลงมาเป็นภาษา VHDL

5.เขียน Test Bench เพื่อ Simulation การทำงาน

6.Implementation ใน FPGA

 

1. กำหนดสัญญาณ input/output ให้ Blank box.  

การทำงานใน Blank Box

  • สัญญาณ i_cmd_power เป็นตัวเปิด/ปิด output ถ้า i_cmd_power = 1 ที่ output o_power_on_off จะเท่ากับ 1
  • แต่ถ้ามีสัญญาณ i_current_trip = ‘1’ จะตัดที่ output ทันที o_power_on_off = ‘0’ โดยสามารถควบคุมการเปิดอีกครั้งด้วยสัญญาณ i_reset = ‘0

FSM Blank box

Entity ในภาษา VHDL คือ

Entity

 

2. คิดสถานะการทำงานก่อนว่ามีอะไรบ้าง

คิดสถานะการทำงานโดยแบ่งการทำงานออกเป็น 3 สถานะ

1. Power Off

2. Power ON

3. Trip

 

3. เขียน Diagram FSM

FSM power control

 

4. แปลงมาเป็นภาษา VHDL

Behaviral

 

5. เขียน Test Bench เพื่อ Simulation การทำงาน

waveform

test bench

test bench2

6. Implementation ใน FPGA

implementation

 

 

 

 

 

 

Rev2_Optimize design >> 1'st priority focus on i_current_trip if trip go to trip state

 

ver2

แปลงมาเป็นภาษา VHDL

VHDL_V2

Test Bench เพื่อ Simulation การทำงาน

test bench

test bench

 

Simulation waveform

simulation

 

RTL Analysis: the combination loop back was created with the intention of cutting output from exceeding the current limit.


RTL analysis

 

Synthesis result:

synthesis

 

See the messages tab at the bottom of the window. we will see the warning about the combination loop.

warning

We can fix this issue by adding allow combinational loop in the constraint file.

set_property ALLOW_COMBINATORIAL_LOOPS true [get_nets state_PowerEN[1]]     
set_property SEVERITY {Warning}  [get_drc_checks LUTLP-1]
set_property SEVERITY {Warning} [get_drc_checks NSTD-1]

 

ประเภทเนื้อหาของ article
FPGA Development
Rating
Average: 4 (2 votes)