CONTACT | TEL : 02-728-3440, EMAIL : SALES@ASTRONLOGIC.COM
การออกแบบเครื่องวัดอุณหภูมิด้วย FPGA ตอนที่ 1

» การออกแบบเครื่องวัดอุณหภูมิด้วย FPGA ตอนที่ 1

การสร้างเครื่องวัดอุณหภูมิโดยใช้อุปกรณ์ FPGA ควบคุมการทำงาน และแสดงผลด้วย 7-Segment นอกจากนี้ยังสามารถส่งข้อมูลไปยังคอมพิวเตอร์เพื่อทำการพล็อตกราฟได้อีกด้วย

โครงงานนี้นำเสนอการออกแบบเครื่องวัดอุณหภูมิโดยใช้อุปกรณ์ FPGA เป็นตัวควบคุมการทำงานและแสดงผลด้วย 7-Segment นอกจากนี้ยังสามารถส่งข้อมูลให้กับคอมพิวเตอร์เพื่อนำค่าของอุณหภูมิที่วัดได้ไปทำการพล็อตกราฟได้อีกด้วย คุณจะได้เรียนรู้อัลกอริธึมในส่วนต่างๆ ของตัววัดอุณหภูมิและการสื่อสารข้อมูลแบบอนุกรมกับคอมพิวเตอร์ด้วยภาษา VHDL เพื่อนำไปประยุกต์ใช้งานในด้านอื่นๆ
สำหรับตอนแรกนี้จะเป็นการออกแบบในส่วนของชุดควบคุมการวัดและแสดงผลอุณหภูมิด้วย FPGA โดยใช้ภาษา VHDL เป็นส่วนบรรยายถึงลักษณะพฤติกรรมการทำงานแล้วใช้โปรแกรมสังเคราะห์ MAX+PLUS II ทำการคอมไพล์ (Compile) และจำลองการทำงาน (Simulate) ซึ่งผลที่ได้จากการจำลองการทำงานจะเป็นผลแบบไทมิ่งไดอะแกรม (Timing Diagram) เมื่อผลการทดสอบทั้งหมดถูกต้องจึงทำการโหลดโปรแกรมที่ออกแบบลงในชิพ FPGA สำหรับโครงงานนี้ใช้ชิพ FPGA ของบริษัท ALTERA เบอร์EPF10K10LC84-3 ซึ่งมีจำนวนเกท 10,000 เกทและ RAM bits 6,144 บิท

คุณสมบัติของบอร์ดวัดอุณหภูมิ
IC คอนโทรลเลอร์ FPGA เบอร์ EPF10K10LC84-3
ช่วงการวัดอุณหภูมิ 0 ถึง 125 °C ความละเอียด 0.5 °C
การสื่อสารข้อมูล สื่อสารข้อมูลผ่านพอร์ตอนุกรม RS232 ด้วยอัตราเร็ว 9600 บิตต่อวินาที
โหมดการทำงาน Real Time วัดและแสดงผลข้อมูลด้วยอัตรา 1 ครั้งต่อวินาที
แหล่งจ่าย DC 9 – 12 โวลต์

สำหรับตัววัดอุณหภูมิจะใช้ไอซีเบอร์ DS1620 ของบริษัท DALLAS ซึ่งรายละเอียดการใช้งานจะได้กล่าวต่อไป

การใช้งานDS1620
ลักษณะพิเศษของ DS1620

  • แหล่งจ่ายไฟที่ใช้อยู่ในช่วง 2.7 ถึง 5.5 โวลต์
  • ช่วงการวัดอุณหภูมิ -55oC ถึง +125oC ความละเอียด 0.5oC หรือ -67oF ถึง +257oF ความละเอียด 0.9oF
  • การแปลงค่าของอุณหภูมิให้เป็นค่าทางดิจิตอลจะใช้เวลาไม่เกิน 1 วินาที
  • การอ่านหรือเขียนข้อมูลจะกระทำผ่านการสื่อสารแบบอนุกรมโดยใช้สายสัญญาณ 3 เส้น (CLK, DQ, RST)
  • ตัวถังเป็นแบบ DIP 8-pin หรือ SOIC ดังรูปที่ 1

DQ 3-Wire Input/Output
CLK/CONV 3-Wire Clock Input and Stand-alone Convert Input
RST 3-Wire Reset Input
GND Ground
THIGH High Temperature Trigger
TLOW Low Temperature Trigger
TCOM High/Low Combination Trigger
VDD Power Supply Voltage (3V-5V)
รูปที่1 Package และตำแหน่งขาของไอซี D

รูปที่2 (a) รูปแบบข้อมูลอุณหภูมิที่ DS1620 ส่งออกมา (b) การแปลงข้อมูลอุณหภูมิจากเลขไบนารีเป็นเลขฐาน 10

การทำงานของ DS1620
การสั่งงาน DS1620 จะเริ่มจากการส่งชุดคำสั่งขออ่านค่าอุณหภูมิให้กับ DS1620 ก่อน จากนั้นตัวไอซีเองจะส่งข้อมูลกลับออกมา ซึ่งรูปแบบข้อมูลที่ได้มานั้นจะเป็นข้อมูลอนุกรมขนาด 9 บิตดังรูปที่ 2 (a) โดยข้อมูลที่ DS1620 ส่งออกมานั้นจะเป็นตัวเลขดิจิตอลหรือเลขฐาน 2 ดังนั้นจึงต้องทำการปรับข้อมูลให้อยู่ในรูปแบบของเลขฐาน 10 ก่อน ดังรูปที่ 2 (b) สำหรับอุณหภูมิที่ไอซีตัวนี้สามารถวัดได้นั้นจะอยู่ในช่วง -55oC ถึง +125oC ความละเอียด 0.5oC

การส่งชุดคำสั่งให้กับ DS1620
รูปที่ 3 เป็นรูปแบบการส่งชุดคำสั่งให้กับ DS1620 ซึ่งเริ่มจากการเซ็ตสถานะลอจิกของขา RST ให้มีค่าเป็น ‘1’ ก่อน จากนั้นไอซีจะเริ่มทำการอ่านข้อมูลแบบอนุกรมที่ได้จากขา DQ ตามสัญญาณนาฬิกาที่ได้จากขา CLK ซึ่งข้อมูลนี้จะแบ่งเป็น 2 ส่วน โดยส่วนแรกเป็นชุดคำสั่ง (Protocol) มีขนาด 8 บิต และส่วนที่สองเป็นข้อมูล (Data) ขนาด 9 บิต

ชุดคำสั่งการวัดอุณหภูมิ

  • Read Temperature [AAh] คือคำสั่งสำหรับอ่านข้อมูลอุณหภูมิจากรีจิสเตอร์
  • Start Convert T [EEh] คือคำสั่งเริ่มต้นการวัดอุณหภูมิ
  • Stop Convert T [22h] คือคำสั่งหยุดการวัดอุณหภูมิ
  • Write Config [0Ch] คือคำสั่งเขียน Configuration register
  • Read Config [Ach] คือคำสั่งอ่านค่าข้อมูลจาก Configuration register



รูปที่3 ไทมิ่งไดอะแกรมการส่งชุดคำสั่งของ DS1620 รูปที่4 โครงสร้างการทำงานของระบบ

โครงสร้างเครื่องวัดอุณหภูมิ
โครงสร้างของบอร์ดวัดอุณหภูมิแสดงดังรูปที่ 4 ซึ่งประกอบด้วย หน่วยประมวลผลกลาง, ตัววัดอุณหภูมิ, สัญญาณนาฬิกา, อุปกรณ์แสดงผล 7-Segment และพอร์ตอนุกรม การทำงานของระบบเริ่มจาก
หน่วยประมวลผลกลางจะทำการติดต่อกับตัววัดอุณหภูมิเพื่อทำการอ่านค่าอุณหภูมิ แล้วทำการแปลงข้อมูลที่อ่านได้ส่งออกไปทางอุปกรณ์แสดงผล 7-Segment พร้อมกันนั้นเมื่อมีสัญญาณจากคอมพิวเตอร์ผ่านพอร์ตอนุกรมส่งสัญญาณมาขออ่านข้อมูล หน่วยประมวลผลกลางจะทำการส่งข้อมูลอุณหภูมิออกไปในเวลาดังกล่าวด้วย
สำหรับการสื่อสารระหว่างบอร์ดวัดอุณหภูมิกับเครื่องคอมพิวเตอร์จะใช้การส่งข้อมูลแบบอนุกรม ซึ่งมีข้อดีคือใช้จำนวนสายสัญญาณน้อยและส่งข้อมูลได้ไกล อีกทั้งยังประหยัดพลังงานเนื่องจากใช้พลังงานไฟฟ้าต่ำกว่าการสื่อสารแบบขนานที่ใช้จำนวนสายไฟหลายเส้นในการส่งข้อมูลในแต่ละครั้ง แม้ว่าความเร็วในการส่งข้อมูลแบบอนุกรมจะมีค่าต่ำ แต่จะไม่ส่งผลกระทบกับอัตราการวัดค่าอุณหภูมิสำหรับโครงงานนี้แต่อย่างใด

รายละเอียดของวงจร
วงจรสมบูรณ์ของบอร์ดวัดอุณหภูมิแสดงดังรูปที่ 5 ซึ่งการทำงานของแต่ละส่วนสามารถอธิบายได้ดังนี้
  • หน่วยประมวลผลกลาง IC1 ใช้ชิป FPGA เบอร์ EPF10K10LC84-3 มีหน่วยความจำภายในแบบ SRAM BASED และมีจำนวนเกท 10,000 เกท ทำหน้าที่เป็นส่วนควบคุมการทำงานของอุปกรณ์ต่างๆ ภายในระบบ

  • ตัววัดอุณหภูมิ IC2 เบอร์ DS1620 สามารถวัดอุณหภูมิได้ตั้งแต่ -55 ถึง +125 องศาเซลเซียส มีความละเอียดในการวัด 0.5 องศาเซลเซียส ข้อมูลอุณหภูมิที่ส่งออกมาเป็นข้อมูลแบบอนุกรม โดยข้อมูลของอุณหภูมิจะมีขนาด 9 บิท ใช้สายในการส่งข้อมูล 3 เส้น (ไม่รวมสายไฟและกราวนด์)

  • ไอซี RS232 ใช้เป็นตัวปรับระดับแรงดันให้เหมาะสมสำหรับการเชื่อมต่อระหว่างบอร์ดวัดอุณหภูมิกับคอมพิวเตอร์ เนื่องจากแรงดันบนบอร์ดวัดอุณหภูมิจะอยู่ที่ 5 โวลต์ แต่แรงดันที่ถูกส่งออกมาจากคอมพิวเตอร์จะอยู่ที่ 12 โวลต์

  • ตัวกำเนิดความถี่ Oscillator 2 MHz ใช้เป็นตัวอ้างอิงการทำงานของโปรแกรม และใช้กำหนดความเร็วในการส่งข้อมูลกับคอมพิวเตอร์ ซึ่งในโครงงานนี้จะใช้อัตราการส่งข้อมูลที่ 9600 บิตต่อวินาที

  • อุปกรณ์แสดงผลแบบ 7-Segment เป็นส่วนที่ทำหน้าที่แสดงผลออกมาเป็นตัวเลขของอุณหภูมิใช้ทั้งหมดจำนวน 4 หลัก

การทำงานของโปรแกรมวัดอุณหภูมิ (Measurement)
ขั้นตอนการทำงานของโปรแกรมวัดอุณหภูมิแสดงดังรูปที่ 6 เริ่มจากทำการเซตโหมดการทำงานของไอซี DS1620 ให้อยู่ในโหมดการวัดอุณหภูมิ โดยการส่งคำสั่ง Write Config (00h) ออกไปให้กับไอซี DS1620 ต่อมาโปรแกรมจะส่งชุดคำสั่ง Start Conversion ออกไปเพื่อส่งสัญญาณให้ DS1620 เริ่มทำการวัดค่าอุณหภูมิ เมื่อคำสั่งนี้ถูกส่งไปแล้วข้อมูลของการวัดจะถูกบันทึกไว้ในหน่วยความจำของ DS1620 จากนั้นหน่วยประมวลผลกลางจะส่งชุดคำสั่งการอ่านออกไปเพื่ออ่านค่าอุณหภูมิออกมา ข้อมูลที่อ่านได้นั้นจะถูกส่งไปยังส่วนโปรแกรมแสดงผลซึ่งมีหน้าที่นำข้อมูลที่อ่านได้นั้นมาแปลงให้เหมาะสมกับการแสดงผลบนอุปกรณ์ 7-Segment โดยวิธีการแสดงผลบน 7-Segment นั้นจะใช้วิธีการแสดงผลแบบ Multiplex ซึ่งจะได้อธิบายต่อไป

รูปที่ 5 วงจรสมบูรณ์ของบอร์ด FPGA Thermometer

รูปที่ 6 รูปแบบและโครงสร้างการเขียนภาษา VHDL

รูปแบบและโครงสร้างการเขียนภาษา VHDL
ภาษา VHDL เป็นภาษาที่ใช้ในการบรรยายฟังก์ชันการทำงานของฮาร์ดแวร์ในระบบดิจิตอลโดยมีรูปแบบการเขียนดังรูปที่ 6 คือ
  • Entity Design Unit เป็นส่วนที่ใช้ติดต่อกับอุปกรณ์ภายนอกโดยการกำหนดจุดต่อ (Connection Point) ทิศทางการไหลเข้าของสัญญาณ (Node) และประเภทของค่าสัญญาณ (Type of Value) ที่กำหนดให้กับสัญญาณตามจุดต่อต่างๆ
  • Architecture Design Unit เป็นส่วนของการบรรยายพฤติกรรมการทำงานต่างๆ ขึ้นอยู่กับข้อมูลที่ผ่านเข้า-ออก ตลอดจนพารามิเตอร์ที่กำหนดในส่วนของ Entity design unit
  • Behavioral Design เป็นรูปแบบการบรรยายพฤติกรรมแบบหนึ่งในส่วนของ Architecture design ที่ไม่ชี้ชัดว่าวงจรมีรูปร่างวงจรหรือจำนวนอุปกรณ์ที่ใช้อย่างไร เช่น Process จะเป็นชุดคำสั่งชุดหนึ่งที่มีลักษณะการทำงานเป็นแบบลำดับ (Sequential Statement) ขึ้นอยู่กับการเปลี่ยนแปลงสัญญาณที่รับเข้ามา



    การออกแบบโปรแกรมวัดอุณหภูมิด้วยภาษา VHDL
    โปรแกรมที่ออกแบบมานี้แบ่งออกเป็น 2 ส่วนด้วยกัน ส่วนแรกจะเป็นส่วนที่ใช้ติดต่อเพื่ออ่านค่าอุณหภูมิจากไอซี DS1620 และส่วนที่สองจะเป็นการนำค่าอุณหภูมิที่อ่านมาได้ไปแสดงผลแบบ Multiplex ทางอุปกรณ์ 7 – Segment โปรแกรมแต่ละส่วนจะประกอบไปด้วยโมดูลต่างๆ ดังรูปที่ 7 ซึ่งแต่ละโมดูลมีหน้าที่และหลักการออกแบบดังต่อไปนี้

รูปที่ 7 การเชื่อมต่อโมดูลต่างๆ ในโมดูล Temperature
  • DS1620_SQ ใช้ส่งฟังก์ชันสำหรับเลือกชุดคำสั่งเพื่อส่งให้กับไอซี DS1620 ซึ่งมีลำดับดังนี้ 1. ส่งชุดคำสั่งไปเขียน Config ให้ไอซี DS1620 ทำงานในโหมดการวัดอุณหภูมิ 2. ส่งชุดคำสั่งเพื่อเริ่มต้นการวัดอุณหภูมิ และ 3. ส่งชุดคำสั่งเพื่อการอ่านค่าอุณหภูมิ โปรแกรมรูปที่ 8 จะประกาศ Entity name เป็น DS1620_SQ มีสัญญาณอินพุท dclk ขนาด 1 บิตรับสัญญาณนาฬิกาเข้ามาส่วนเอาท์พุทมี 2 สัญญาณคือ en ขนาด 3 บิต และ en_find ขนาด 1 บิต การทำงานของโปรแกรมจะนับจำนวนสัญญาณ dclk แล้วเช็คจำนวนพัลซ์ของสัญญาณ dclk เก็บไว้ในตัวแปร n แบ่งออกเป็น 4 เงื่อนไข เช่น เงื่อนไขในช่วง 1 > n > 20 ก็จะส่งสัญญาณ en = 1 ออกไปยังโมดูล DS1620_TR เพื่อเลือกชุดคำสั่งให้ไอซี DS1620 เป็นโหมดการวัดอุณหภูมิ
  • DS1620_TR เป็นส่วนส่งชุดคำสั่งให้กับไอซี DS1620 ซึ่งมีชุดคำสั่งอยู่ 3 ชุดและแต่ละชุดคำสั่งก็มีการทำงานที่ต่างกันไปดังที่กล่าวไว้แล้วข้างต้นซึ่งสามารถอธิบายลักษณะการทำงานดังนี้
รูปที่ 8 โมดูลและ Source code DS1620_SQ

ในโปรแกรมรูปที่ 9 ประกาศ Entity name เป็น DS1620_TR ส่วนของอินพุทประกอบด้วย dclk เป็นสัญญาณนาฬิกาใช้สำหรับอ้างอิงการทำงาน สัญญาณ en[2..0] เป็นส่วนที่ได้รับจาก Entity DS1620_SQ ซึ่งส่งสัญญาณมาเลือกชุดคำสั่งในการติดต่อกับตัววัดอุณหภูมิ และสัญญาณ dqi จะเป็นข้อมูลอุณหภูมิแบบอนุกรมขนาด 1 บิต ที่อ่านได้จากตัววัดอุณหภูมิ เมื่อผ่านกระบวนการในส่วนนี้แล้วจะได้สัญญาณเอาท์พุท dqo ออกมา ซึ่ง dqo จะเป็นข้อมูลแบบอนุกรมเพื่อใช้สื่อสารกับ DS1620 สัญญาณ rst เป็นสัญญาณควบคุมขนาด 1 บิตส่งสัญญาณให้ตัววัดอุณหภูมิตอบสนองการทำงาน ส่วนสัญญาณ zdq เป็นสัญญาณขนาด 1 บิตใช้ควบคุมเพื่อแยกสัญญาณระหว่างอินพุท dqi กับเอาท์พุท dqo ที่ใช้ขาสัญญาณร่วมกันโดยมีการทำงานเป็นแบบ Tri-State และสัญญาณ temp[8..0] เป็นข้อมูลอุณหภูมิขนาด 9 บิต ที่ได้จากการแปลงข้อมูลแบบอนุกรม
โปรแกรมจะทำการตรวจเช็ค
สัญญาณ en เพื่อเซตค่า Protocol ให้กับตัวแปร ptc และกำหนดค่าจำนวนการใช้สัญญาณนาฬิกาในแต่ละฟังก์ชัน หลังจากนั้นจะเป็นส่วนของการรับส่งข้อมูลจากไอซี DS1620 โดยลำดับแรกจะเช็คฟังก์ชันการอ่าน (en=4) และจำนวนสัญญาณนาฬิกาที่ใช้ (rn2) เพื่อหยุดการรับส่ง แต่ถ้าเป็นฟังก์ชันอื่นก็จะทำการเช็คค่าจำนวนสัญญาณนาฬิกา (rn1) อีกครั้งและในลูปนี้จะมีชุดรับข้อมูลอุณหภูมิขนาด 9 บิต สำหรับลูปถัดไปเป็นส่วนที่ทำหน้าที่ส่งข้อมูลแบบอนุกรมตามฟังก์ชันต่างๆ
สำหรับส่วนของการแสดงผลนั้นประกอบด้วยโปรแกรมย่อยดังนี้

  • Parting_number ทำหน้าที่แยกตัวเลขออกเป็นหลักต่างๆ คือหลักร้อย, หลักสิบ, หลักหน่วย และหลักทศนิยม 1 ตำแหน่ง ทั้งนี้เพื่อจะส่งข้อมูลตัวเลขแต่ละหลักให้กับจอ 7-Segment ในแต่ละหลักได้อย่างถูกต้อง
    จากรูปที่ 10 ส่วนอินพุทคือ en เป็นสัญญาณควบคุมให้โมดูลในส่วนนี้ทำงาน dtv [7...0] เป็นสัญญาณข้อมูลอุณหภูมิขนาด 8 บิต ที่รับมาจากโมดูล DS1620_TR ส่วนเอาท์พุทประกอบด้วยข้อมูลขนาด 4 บิต ของแต่ละหลักซึ่งมีทั้งหมด 3 หลัก โดยหลักทศนิยมจะมีขนาดเพียง 1 บิต ซึ่งข้อมูลนี้จะมีข้อมูลอยู่ 2 แบบ คือ 0 และ 5 เนื่องจากความละเอียดของตัววัดอุณหภูมิที่มีความละเอียดเป็น 0.5 องศา
รูปที่ 9 โมดูลและ Source code DS1620_TR

ในการเขียนโปรแกรมนั้นจะต้องแยกหาตัวเลขในแต่ละหลักออกมาก่อน จากโปรแกรมรูปที่ 10(a) โดยนำข้อมูลที่ได้ไปตรวจสอบหาตัวเลขหลักร้อย ซึ่งค่าที่เป็นไปได้จะมีอยู่ 2 ค่า คือ เลข 1 หรือ เลข 0 โดยใช้เงื่อนไขอย่างง่ายๆ คือถ้ามีค่าอุณหภูมิมากกว่า 99 องศา ก็ให้เลขหลักร้อยเท่ากับ 1 แล้วนำไปลบด้วย 100 ออกให้ค่าของข้อมูลเหลืออยู่ในหลักสิบหรือหลักหน่วยเก็บค่าไว้ใน dtvi2 จากนั้นจึงนำไปหาตัวเลขหลักสิบ ซึ่งในส่วนนี้จะไม่ใช้การแยกหลักแบบหลักร้อยเนื่องจากต้องการลดจำนวนเงื่อนไขให้น้อยลง ทั้งนี้เพื่อแสดงให้เห็นว่าภาษา VHDL มีความยืดหยุ่นในการออกแบบซึ่งล้วนแต่มีจุดประสงค์ในการหาผลลัพธ์เหมือนกันแต่ต่างกันที่วิธีการเท่านั้น นั่นคือใน Process ที่ 2 เมื่อสัญญาณ en มีสถานะลอจิกเป็น ‘1’ โปรแกรมจะเข้าไปเช็คในเงื่อนไข (เริ่มต้น nmax จะมีค่าเป็น 9 และ d_value มีค่าเป็น 0 ) ถ้า dtvi2 มีค่ามากว่า nmax ก็จะทำการเพิ่มค่า d_value และ nmax เพื่อที่จะทำการตรวจสอบใหม่อีกครั้งจนกว่าจะมีค่า dtvi2 จะน้อยกว่า nmax แล้วจึงส่งค่า d_value ออกช่องสัญญาณ ds2 นั่นก็คือตัวเลขหลักสิบและในขณะเดียวกันก็นำค่า dtvi2 ลบกับค่า nmax เพื่อให้เหลือเพียงเลขหลักหน่วยแล้วส่งออกไปที่ช่องสัญญาณ ds1 หรือก็คือตัวเลขหลักหน่วยนั่นเอง

รูปที่ 10 Source code Parting_number
  • Sc_7Segment ทำหน้าที่แปลงข้อมูลอุณหภูมิเพื่อแสดงผลบน 7–Segment 4 หลัก โดยใช้วิธีการแบบ Multiplex นั่นคือเราจะทำการส่งข้อมูลให้กับ 7 - Segment ทีละหลักด้วยความเร็วสูงทำให้เหมือนกับว่าตัวเลขในแต่ละหลักนั้นถูกแสดงออกมาพร้อมๆ กัน

    จากรูปที่ 11 ส่วนอินพุทประกอบด้วย ds0, ds1, ds2 และ ds3 ซึ่งเป็นข้อมูลตัวเลขแต่ละหลักที่จะถูกนำไปแปลงเป็นข้อมูลที่ใช้แสดงผลบนจอ 7–Segment ซึ่งก็คือ ds_out[7...0] และมีสัญญาณ col_scan[3...0] เป็นตัวควบคุมการติด-ดับของ 7– Segment แต่ละหลัก จากโปรแกรมรูปที่ 11 คำสั่ง case จะตรวจเช็คค่า cnt ซึ่งวนนับจำนวนสัญญาณนาฬิกาอยู่ 4 ค่า โดยแต่ละค่าจะแทนหลักของตัวเลขบน 7-Segment นั่นคือ cnt = 0 เป็นการแสดงตัวเลขหลักทศนิยม cnt = 1 เป็นการแสดงหลักหน่วยสำหรับหลักนี้จะต้องเซ็ตสัญญาณ ds_out(7) เป็นลอจิก ‘0’ เพื่อให้หลอดไฟที่แทนจุดสว่าง cnt = 2 และ cnt = 3 เป็นการแสดงหลักสิบและหลักร้อยตามลำดับ ซึ่งการแสดงผลนี้จะสลับวนตามสัญญาณนาฬิกาจนเหมือนกับว่าสามารถแสดงผลได้พร้อมๆ กัน
    หลังจากสร้างโมดูลต่างๆ เสร็จเรียบร้อยแล้ว เราจะนำส่วนต่างๆ มาต่อเข้าด้วยกันแล้วตั้งชื่อไฟล์เป็น Temperature.gdf ดังรูปที่ 7 จากนั้นให้ทำการคอมไพล์เพื่อตรวจเช็คความถูกต้องของโปรแกรมก่อนดังรูปที่ 12 เมื่อผลการตรวจสอบทั้งหมดถูกต้องโปรแกรม MAX+PLUS II จะสร้างไฟล์ข้อมูลต่างๆ รวมทั้งไฟล์สำหรับใช้โหลดลงบนชิป FPGA ซึ่งมีนามสกุลเป็น .sof (SRAM Object Files) แต่ก่อนที่จะโหลดโปรแกรมไปใช้งานนั้นเราควรทำการจำลองการทำงาน (Simulation) ของโปรแกรมก่อนที่จะนำไปใช้งานจริง
รูปที่ 11 Source code Sc_7segment


รูปที่ 12
แสดงผลการ Compiler

รูปที่ 13 แสดงผลการ Simulation ทั้งหมด

จำลองการทำงานแบบ Timing Simulation
สำหรับการจำลองการทำงานของโปรแกรมแบบ Timing Simulation จะทำให้เราทราบถึงการเปลี่ยนแปลงสถานะทางลอจิกของสัญญาณและตัวแปรต่างๆ ที่ใช้ ซึ่ง โปรแกรม Simulator จะรวมอยู่ใน MAX+PLUS II อยู่แล้ว สำหรับผลการจำลองการทำงานของโปรแกรมแสดงดังรูปที่ 13 โดยก่อนทำการจำลองเราจะต้องทำการเซตค่าพารามิเตอร์ของตัวแปรต่างๆ เพื่อป้อนให้ระบบก่อน นั่นคือ สัญญาณนาฬิกาและข้อมูลอุณหภูมิที่ต้องสมมติขึ้นมาที่ขาสัญญาณ dqi ให้เป็น “001000000” ซึ่งเป็นข้อมูลแบบอนุกรมขนาด 9 บิทที่ถูกส่งออกมาจากตัววัดอุณหภูมิ DS1620 จากนั้นข้อมูลดังกล่าวจะผ่านเข้าโปรแกรมสำหรับแปลงข้อมูลให้เป็นแบบขนานออกมาที่ Port Output ที่ชื่อ temp[7..0] ได้เป็น 30H หรือ 48 ในเลขฐาน 10 ซึ่งก็คือข้อมูลอุณหภูมิเป็น 48 องศา นั่นเอง จากนั้นข้อมูลที่ได้จะถูกส่งต่อไปยังโปรแกรมแปลงชุดข้อมูลเพื่อให้แสดงออกทาง 7-Segment ที่พอร์ต ds_out[7..0] และในขณะเดียวกันโปรแกรมจะทำการสแกนหลักของอุปกรณ์แสดงผล 7-Segment โดยส่งผ่านพอร์ต col_scan
สำหรับตอนที่ 1 นี้เราจะได้โปรแกรมสำหรับส่วนการวัดอุณหภูมิซึ่งใช้อุปกรณ์ FPGA ในตอนต่อไปจะเป็นการออกแบบโปรแกรมสำหรับสื่อสารข้อมูลระหว่างคอมพิวเตอร์กับบอร์ดวัดอุณหภูมิ เพื่อส่งข้อมูลไปแสดงผลให้กับโปรแกรมพล๊อตกราฟรวมทั้งขั้นตอนการโหลดโปรแกรมลงในอุปกรณ์ FPGA