สารบัญ:

นาฬิกาจับเวลาพื้นฐานที่ใช้บอร์ด VHDL และ Basy3: 9 ขั้นตอน
นาฬิกาจับเวลาพื้นฐานที่ใช้บอร์ด VHDL และ Basy3: 9 ขั้นตอน

วีดีโอ: นาฬิกาจับเวลาพื้นฐานที่ใช้บอร์ด VHDL และ Basy3: 9 ขั้นตอน

วีดีโอ: นาฬิกาจับเวลาพื้นฐานที่ใช้บอร์ด VHDL และ Basy3: 9 ขั้นตอน
วีดีโอ: How to create a timer in VHDL 2024, พฤศจิกายน
Anonim
Image
Image

ยินดีต้อนรับสู่คำแนะนำเกี่ยวกับวิธีการสร้างนาฬิกาจับเวลาโดยใช้บอร์ด VHDL พื้นฐานและ Basy 3 เรารู้สึกตื่นเต้นที่จะแบ่งปันโครงการของเรากับคุณ! นี่เป็นโครงการสุดท้ายสำหรับหลักสูตร CPE 133 (Digital Design) ที่ Cal Poly, SLO ในฤดูใบไม้ร่วงปี 2016 โครงการที่เราสร้างขึ้นคือนาฬิกาจับเวลาแบบเรียบง่ายที่เริ่ม รีเซ็ต และหยุดเวลาชั่วคราว ใช้ปุ่มกดสามปุ่มบนบอร์ด Basy3 เป็นอินพุต และเวลาจะแสดงบนจอแสดงผลเจ็ดส่วนสี่หลักของบอร์ด เวลาที่ผ่านไปจะแสดงเป็นวินาที: รูปแบบเซนติเมตร ใช้นาฬิการะบบของบอร์ดเป็นอินพุตเพื่อติดตามเวลาที่ผ่านไปและส่งออกเวลาเป็นตัวเลขสี่หลักในการแสดงผลเจ็ดส่วน

ขั้นตอนที่ 1: วัสดุ

การตั้งค่าอินพุตและเอาต์พุต
การตั้งค่าอินพุตและเอาต์พุต

วัสดุที่คุณต้องการสำหรับโครงการนี้:

  • คอมพิวเตอร์ 1 เครื่องที่ติดตั้ง Vivado Design Suite WebPack จาก Xilinx (ต้องการเวอร์ชัน 2016.2)
  • 1 Digilent Basys3 Xilinx Artix-7 FPGA บอร์ด
  • สาย USB 1 พอร์ต

ขั้นตอนที่ 2: การตั้งค่าอินพุตและเอาต์พุต

รูปด้านบนแสดงไดอะแกรมบล็อกระดับบนสุดของโมดูลนาฬิกาจับเวลาหลัก นาฬิกาจับเวลารับอินพุต "CLK" (นาฬิกา), "S1" (ปุ่มเริ่มต้น), "S2" (ปุ่มหยุดชั่วคราว) และ "RST" (รีเซ็ต) และมีเอาต์พุต "Anodes" 4 บิต, 7 บิต เอาต์พุต "ส่วน" และเอาต์พุตบิตเดียว "DP" (จุดทศนิยม) เมื่ออินพุต "S1" สูง นาฬิกาจับเวลาจะเริ่มนับเวลา เมื่อ "S2" ต่ำ นาฬิกาจับเวลาจะหยุดเวลาชั่วคราว เมื่อ "RST" สูง นาฬิกาจับเวลาจะหยุดและรีเซ็ตเวลา ภายในวงจรมีโมดูลย่อยสี่โมดูล: ตัวแบ่งนาฬิกา ตัวนับหลัก ไดรเวอร์การแสดงผลเจ็ดส่วน และตัวเข้ารหัสการแสดงผลเจ็ดส่วน โมดูลหลักของนาฬิกาจับเวลาจะเชื่อมโยงโมดูลย่อยทั้งหมดเข้าด้วยกันและเข้ากับอินพุตและเอาต์พุต

ขั้นตอนที่ 3: ทำนาฬิกา

ทำนาฬิกา
ทำนาฬิกา

โมดูลตัวแบ่งนาฬิกาใช้นาฬิกาของระบบและใช้อินพุตตัวหารเพื่อสร้างนาฬิกาที่มีความเร็วไม่เกินความเร็วของนาฬิการะบบ นาฬิกาจับเวลาใช้โมดูลนาฬิกาสองโมดูล อันหนึ่งสร้างนาฬิกา 500 Hz และอีกโมดูลหนึ่งสร้างนาฬิกา 100 Hz แผนผังสำหรับตัวแบ่งนาฬิกาแสดงในรูปด้านบน ตัวแบ่งนาฬิการับอินพุตแบบบิตเดียว "CLK" และอินพุต "ตัวหาร" แบบ 32 บิตและเอาต์พุตแบบบิตเดียว "CLKOUT" "CLK" คือนาฬิการะบบและ "CLKOUT" คือนาฬิกาผลลัพธ์ โมดูลนี้ยังมีเกท NOT ซึ่งจะสลับสัญญาณ "CLKTOG" เมื่อการนับถึงค่าของตัวหาร

ขั้นตอนที่ 4: นับถึงสิบ

นับหนึ่งถึงสิบ
นับหนึ่งถึงสิบ

ตัวนับหลักจะนับแต่ละหลักตั้งแต่ 0 ถึง 10 และสร้างนาฬิกาอีกตัวสำหรับหลักถัดไปเพื่อทำงานจากการสั่นเมื่อนับถึง 10 โมดูลรับอินพุต 3 บิตเดี่ยว "S", "RST" และ "CLK " และผลลัพธ์ในเอาต์พุตบิตเดียว "N" และเอาต์พุต 4 บิต "D" อินพุต "S" คือการเปิดใช้งานในอินพุต นาฬิกาจะเปิดเมื่อ "S" สูงและปิดเมื่อ "S" ต่ำ "RST" เป็นอินพุตรีเซ็ต ดังนั้นนาฬิกาจะรีเซ็ตเมื่อ "RST" สูง "CLK" คืออินพุตนาฬิกาสำหรับตัวนับหลัก "N" คือเอาต์พุตนาฬิกาที่กลายเป็นนาฬิกาอินพุตสำหรับหลักถัดไป เอาต์พุต "D" แสดงค่าไบนารีของตัวเลขที่ตัวนับอยู่

ขั้นตอนที่ 5: การแสดงตัวเลข

กำลังแสดงตัวเลข
กำลังแสดงตัวเลข

ตัวเข้ารหัสการแสดงผลเจ็ดส่วนจะเข้ารหัสเลขฐานสองที่ได้รับจากโมดูลไดรเวอร์การแสดงผลเจ็ดส่วน และเปลี่ยนเป็นกระแสข้อมูลของบิตที่จะถูกตีความว่าเป็นค่า '1' หรือ '0' สำหรับแต่ละส่วนของจอแสดงผล โมดูลได้รับเลขฐานสองเป็น "ตัวเลข" อินพุต 4 บิต และส่งผลให้ "เซ็กเมนต์" เอาต์พุต 7 บิต โมดูลประกอบด้วยบล็อกกระบวนการเคสเดียวที่กำหนดสตรีม 7 บิตเฉพาะสำหรับแต่ละค่าอินพุตที่เป็นไปได้ตั้งแต่ 0 ถึง 9 แต่ละบิตในสตรีมเจ็ดบิตแสดงถึงหนึ่งในเจ็ดส่วนของตัวเลขบนจอแสดงผล ลำดับของเซ็กเมนต์ในสตรีมคือ "abcdefg" โดยที่ '0' แสดงถึงเซ็กเมนต์ที่สว่างขึ้นสำหรับตัวเลขที่ระบุ

ขั้นตอนที่ 6: วิธีแสดงนาฬิกาจับเวลา

วิธีแสดงนาฬิกาจับเวลา
วิธีแสดงนาฬิกาจับเวลา

ในโมดูลไดรเวอร์การแสดงผลเจ็ดส่วน มีอินพุต 4 บิต "D0", "D1", "D2" และ "D3" สี่ช่อง โดยแต่ละรายการจะแสดงตัวเลขสี่หลักที่จะแสดง อินพุต "CLK" คืออินพุตนาฬิกาของระบบ เอาต์พุตแบบบิตเดียว "DP" แทนจุดทศนิยมบนจอแสดงผลเจ็ดส่วน เอาต์พุต 4 บิต "Anodes" กำหนดว่าจะแสดงตัวเลขใดบนจอแสดงผลเจ็ดส่วน และเอาต์พุต "ชั่วคราว" 4 บิตขึ้นอยู่กับสถานะของอินพุตควบคุม 2 บิต "SEL" โมดูลนี้ใช้มัลติเพล็กเซอร์ 4 ตัวสำหรับอินพุตควบคุม "SEL" และเอาต์พุตสามตัว "แอโนด", "อุณหภูมิ" และ "DP"

ขั้นตอนที่ 7: นำทุกอย่างมารวมกัน

บล็อกกระบวนการ 'if' ที่ทำงานโดยนาฬิกา 500Hz ถูกใช้เพื่อสร้างปุ่มเริ่มต้นและหยุดชั่วคราว จากนั้นเชื่อมโยงโมดูลย่อยทั้งหมดเข้าด้วยกันในโมดูลหลักของนาฬิกาจับเวลาโดยการประกาศส่วนประกอบของแต่ละโมดูลย่อยและใช้สัญญาณต่างๆ โมดูลย่อยหลักรับเอาท์พุตสัญญาณนาฬิกาของโมดูลย่อยหลักก่อนหน้า โดยโมดูลย่อยแรกรับในนาฬิกา 100Hz เอาต์พุต "D" ของโมดูลย่อยตัวเลขจะกลายเป็นอินพุต "D" ของโมดูลไดรเวอร์การแสดงผลเจ็ดส่วน และสุดท้าย เอาต์พุต "ชั่วคราว" ของโมดูลไดรเวอร์การแสดงผลเจ็ดส่วนจะกลายเป็นอินพุต "ชั่วคราว" ของโมดูลตัวเข้ารหัสเจ็ดส่วน

ขั้นตอนที่ 8: ข้อจำกัด

ข้อจำกัด
ข้อจำกัด

ใช้ปุ่มกด 3 ปุ่ม (W19, T17 และ U18) สำหรับอินพุต "RST", "S1" และ "S2" W19 คือปุ่มรีเซ็ต T17 คือปุ่มเริ่มต้น (S1) และ U18 คือปุ่มหยุดชั่วคราว (S2) จำเป็นต้องมีข้อจำกัดสำหรับอินพุตนาฬิกาโดยใช้พอร์ต W5 นอกจากนี้ อย่าลืมเพิ่มบรรทัดนี้ในข้อจำกัดนาฬิกา:

create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {CLK}]

เชื่อมโยงแอโนดและเซ็กเมนต์เข้ากับบอร์ดด้วย เพื่อให้นาฬิกาจับเวลาแสดงบนจอแสดงผลเจ็ดส่วนดังที่เห็นในไฟล์ข้อจำกัด

ขั้นตอนที่ 9: การทดสอบ

การทดสอบ
การทดสอบ

ตรวจสอบให้แน่ใจว่าอุปกรณ์ของคุณทำงานโดยใช้ปุ่มสามปุ่ม: กดปุ่มตามลำดับที่เป็นไปได้เพื่อค้นหาปัญหาที่อาจเกิดขึ้นกับรหัสของคุณ

แนะนำ: