กลับไปหน้าบทความ

อ่าน 13 นาที

วีเอชดีแอล

VHDL ( VHSIC Hardware Description Language) เป็น ภาษาสำหรับการอธิบายฮาร์ดแวร์ ที่สามารถจำลองพฤติกรรมและโครงสร้างของ ระบบดิจิทัล ได้หลายระดับ ตั้งแต่ระดับระบบลงไปจนถึงระดับ...

วีเอชดีแอล

( เรียนรู้วิธีและเวลาในการลบข้อความนี้ )
วีเอชดีแอล
กระบวนทัศน์พร้อมกัน , ตอบสนอง , การไหลของข้อมูล
ปรากฏครั้งแรกทศวรรษ 1980
เวอร์ชันเสถียร
IEEE 1076-2019 / 23 ธันวาคม 2019 ( 23 ธันวาคม 2019 )
วินัยในการพิมพ์แข็งแกร่ง
นามสกุลไฟล์.vhd
เว็บไซต์อีอีอีอี วีเอสจี
ภาษาถิ่น
วีเอชดีแอล-เอเอ็มเอส
ได้รับอิทธิพลจาก
อาดา [ 1 ] ปาสคาล
  • โลโก้ Wikibooksตรรกะที่ตั้งโปรแกรมได้/VHDLที่ Wikibooks
โค้ด VHDL สำหรับวงจรบวกเลข แบบมีเครื่องหมาย

VHDL ( VHSIC Hardware Description Language) เป็นภาษาสำหรับการอธิบายฮาร์ดแวร์ที่สามารถจำลองพฤติกรรมและโครงสร้างของระบบดิจิทัลได้หลายระดับ ตั้งแต่ระดับระบบลงไปจนถึงระดับเกตตรรกะเพื่อใช้ในการป้อนข้อมูลการออกแบบ การจัดทำเอกสาร และการตรวจสอบ ภาษาดังกล่าวได้รับการพัฒนาขึ้นสำหรับโครงการ VHSIC ของกองทัพสหรัฐฯ ในช่วงทศวรรษ 1980 และได้รับการกำหนดมาตรฐานโดยสถาบันวิศวกรรมไฟฟ้าและอิเล็กทรอนิกส์ (IEEE) เป็น มาตรฐาน IEEE Std 1076ซึ่งเวอร์ชันล่าสุดคือIEEE Std 1076-2019สำหรับการจำลอง ระบบ อนาล็อกและ ระบบ สัญญาณผสม ได้ มีการพัฒนา ภาษา HDL ที่ได้มาตรฐาน IEEE โดยอิงจาก VHDL เรียกว่าVHDL-AMS (อย่างเป็นทางการคือ IEEE 1076.1)

ประวัติศาสตร์

ในปี พ.ศ. 2526 VHDL ได้รับการพัฒนาขึ้นครั้งแรกตามคำขอของกระทรวงกลาโหมสหรัฐฯเพื่อใช้ในการบันทึกพฤติกรรมของASICที่บริษัทผู้ผลิตได้รวมไว้ในอุปกรณ์ มาตรฐาน MIL-STD-454N [ 2 ]ในข้อกำหนดที่ 64 ในส่วนที่ 4.5.1 "เอกสาร ASIC ใน VHDL" กำหนดให้ต้องบันทึก "อุปกรณ์ไมโครอิเล็กทรอนิกส์" ใน VHDL อย่างชัดเจน

แนวคิดในการจำลองวงจร ASIC จากข้อมูลในเอกสารนี้มีความน่าสนใจอย่างเห็นได้ชัด จึง มีการพัฒนา โปรแกรมจำลองตรรกะที่สามารถอ่านไฟล์ VHDL ได้ ขั้นตอนต่อไปคือการพัฒนา เครื่องมือ สังเคราะห์ตรรกะที่อ่านไฟล์ VHDL และส่งออกคำจำกัดความของการใช้งานทางกายภาพของวงจร

เนื่องจากกระทรวงกลาโหมต้องการให้ไวยากรณ์ส่วนใหญ่เท่าที่จะเป็นไปได้อิงตามภาษา Ada เพื่อหลีกเลี่ยงการคิดค้นแนวคิดใหม่ที่ได้รับการทดสอบอย่างละเอียดถี่ถ้วนแล้วในการพัฒนาภาษา Ada ดังนั้น VHDL จึงยืมแนวคิดและไวยากรณ์ จาก ภาษาโปรแกรม Ada เป็นอย่าง มาก

VHDL เวอร์ชันเริ่มต้นซึ่งออกแบบตาม มาตรฐาน IEEE 1076–1987 [ 3 ]ประกอบด้วยประเภทข้อมูลที่หลากหลาย รวมถึงตัวเลข ( จำนวนเต็มและ จำนวน จริง ) ตรรกะ ( บิตและบูลีน ) อักขระและเวลารวมถึงอาร์เรย์ของ สตริง bitที่ถูกเรียกbit_vectorและสตริงที่ characterถูกเรียก

อย่างไรก็ตาม ปัญหาที่ยังไม่ได้รับการแก้ไขในฉบับนี้คือตรรกะหลายค่า ซึ่ง พิจารณาถึงความแรงในการขับเคลื่อนของสัญญาณ (ไม่มี อ่อน หรือแรง) และค่าที่ไม่ทราบค่าด้วย สิ่งนี้จำเป็นต้องใช้ มาตรฐาน IEEE 1164ซึ่งกำหนดประเภทตรรกะ 9 ค่า ได้แก่ สเกลาร์std_logicและเวอร์ชันเวกเตอร์std_logic_vectorเนื่องจากเป็นชนิดย่อยที่ได้รับการแก้ไขแล้วของstd_Ulogicชนิดหลักstd_logicสัญญาณประเภท -typed จึงอนุญาตให้มีการขับเคลื่อนหลายแบบสำหรับการจำลองโครงสร้างบัส โดยที่ฟังก์ชันการแก้ไขที่เชื่อมต่อจะจัดการกับการกำหนดค่าที่ขัดแย้งกันได้อย่างเหมาะสม

มาตรฐานIEEE 1076 ฉบับปรับปรุง ในปี 1993 ทำให้ไวยากรณ์มีความสอดคล้องกันมากขึ้น อนุญาตให้มีความยืดหยุ่นมากขึ้นในการตั้งชื่อ ขยายcharacterประเภทเพื่อให้รองรับ อักขระที่พิมพ์ได้ ตามมาตรฐาน ISO-8859-1เพิ่มxnorตัวดำเนินการ ฯลฯ

การเปลี่ยนแปลงเล็กน้อยในมาตรฐาน (ปี 2000 และ 2002) ได้เพิ่มแนวคิดเรื่องประเภทที่ได้รับการป้องกัน (คล้ายกับแนวคิดของคลาสในC++ ) และลบข้อจำกัดบางประการออกจากกฎการแมปพอร์ต

นอกจากมาตรฐาน IEEE 1164 แล้ว ยังมีการแนะนำมาตรฐานย่อยอีกหลายมาตรฐานเพื่อขยายฟังก์ชันการทำงานของภาษา มาตรฐาน IEEE 1076.2 เพิ่มการจัดการข้อมูลประเภทจำนวนจริงและจำนวนเชิงซ้อนที่ดีขึ้น มาตรฐาน IEEE 1076.3 แนะนำ ประเภทข้อมูล แบบมีเครื่องหมายและไม่มีเครื่องหมายเพื่ออำนวยความสะดวกในการดำเนินการทางคณิตศาสตร์บนเวกเตอร์ มาตรฐาน IEEE 1076.1 (รู้จักกันในชื่อVHDL-AMS ) ให้ส่วนขยายสำหรับการออกแบบวงจรอนาล็อกและวงจรผสมสัญญาณ

มาตรฐานอื่นๆ บางมาตรฐานสนับสนุนการใช้งาน VHDL อย่างกว้างขวางยิ่งขึ้น โดยเฉพาะVITAL (VHDL Initiative Towards ASIC Libraries) [ 4 ]และส่วนขยายการออกแบบวงจร ไมโครเวฟ

ในเดือนมิถุนายน พ.ศ. 2549 คณะกรรมการด้านเทคนิค VHDL ของAccellera (ซึ่งได้รับมอบหมายจาก IEEE ให้ทำงานเกี่ยวกับการปรับปรุงมาตรฐานครั้งต่อไป) ได้อนุมัติร่างเวอร์ชัน 3.0 ของ VHDL-2006 แม้ว่าจะยังคงความเข้ากันได้กับเวอร์ชันเก่าอย่างสมบูรณ์ แต่มาตรฐานที่เสนอนี้ได้เพิ่มส่วนขยายมากมายที่ทำให้การเขียนและการจัดการโค้ด VHDL ง่ายขึ้น การเปลี่ยนแปลงที่สำคัญ ได้แก่ การรวมมาตรฐานย่อย (1164, 1076.2, 1076.3) เข้ากับมาตรฐาน 1076 หลัก ชุดตัวดำเนินการที่ขยายเพิ่มเติม ไวยากรณ์ที่ยืดหยุ่นมากขึ้นของคำสั่ง caseและgenerateการรวม VHPI (VHDL Procedural Interface) (อินเทอร์เฟซสำหรับภาษา C/C++) และส่วนย่อยของ PSL ( Property Specification Language ) การเปลี่ยนแปลงเหล่านี้ควรปรับปรุงคุณภาพของโค้ด VHDL ที่สามารถสังเคราะห์ได้ ทำให้ testbench มีความยืดหยุ่นมากขึ้น และอนุญาตให้ใช้ VHDL อย่างกว้างขวางมากขึ้นสำหรับการอธิบายระดับระบบ

ในเดือนกุมภาพันธ์ พ.ศ. 2551 Accellera ได้อนุมัติ VHDL 4.0 หรือที่รู้จักกันอย่างไม่เป็นทางการว่า VHDL 2008 ซึ่งแก้ไขปัญหามากกว่า 90 ประเด็นที่ค้นพบระหว่างช่วงทดลองใช้เวอร์ชัน 3.0 และรวมถึงประเภททั่วไปที่ได้รับการปรับปรุง ในปี พ.ศ. 2551 Accellera ได้เผยแพร่ VHDL 4.0 ให้กับ IEEE เพื่อลงคะแนนเสียงสำหรับการรวมอยู่ใน IEEE 1076–2008 มาตรฐาน VHDL IEEE 1076-2008 [ 5 ]ได้รับการเผยแพร่ในเดือนมกราคม พ.ศ. 2552

การกำหนดมาตรฐาน

มาตรฐานIEEE 1076 กำหนดภาษาสำหรับการอธิบายฮาร์ดแวร์VHSIC หรือ VHDL เดิมทีภาษานี้ได้รับการพัฒนาภายใต้สัญญา F33615-83-C-1003 จากกองทัพอากาศสหรัฐฯซึ่งมอบให้แก่ทีมงานของ Intermetrics, Inc. ในปี 1983 ในฐานะผู้เชี่ยวชาญด้านภาษาและผู้รับเหมาหลัก, Texas Instrumentsในฐานะผู้เชี่ยวชาญด้านการออกแบบชิป และIBMในฐานะผู้เชี่ยวชาญด้านการออกแบบระบบคอมพิวเตอร์ ภาษานี้ได้รับการแก้ไขปรับปรุงหลายครั้งและมีมาตรฐานย่อยต่างๆ ที่เกี่ยวข้องซึ่งเพิ่มเติมหรือขยายขอบเขตของภาษาในด้านสำคัญๆ หลายด้าน

มาตรฐาน IEEE 1076 ถือเป็นหลักสำคัญในการออกแบบระบบอิเล็กทรอนิกส์มาโดยตลอด[ 6 ]

การแก้ไข

  • IEEE 1076–1987 [ 3 ]การแก้ไขมาตรฐานครั้งแรกของเวอร์ชัน 7.2 ของภาษาจากกองทัพอากาศสหรัฐอเมริกา
  • IEEE 1076–1993 [ 7 ] (ตีพิมพ์พร้อมISBN ด้วย) 1-55937-376-8(มีการปรับปรุงที่สำคัญซึ่งเป็นผลมาจากข้อเสนอแนะตลอดหลายปีที่ผ่านมา น่าจะเป็นเวอร์ชันที่ใช้งานกันอย่างแพร่หลายที่สุดและได้รับการสนับสนุนเครื่องมือจากผู้จำหน่ายมากที่สุด)
  • IEEE 1076–2000 [ 8 ]การแก้ไขเล็กน้อย แนะนำการใช้ประเภทที่ได้รับการป้องกัน
  • IEEE 1076–2002 [ 9 ]การแก้ไขเล็กน้อยของ 1076–2000 กฎเกี่ยวกับพอร์ตบัฟเฟอร์ได้รับการผ่อนปรน
    • IEC 61691-1-1:2004 [ 10 ]การนำมาตรฐาน IEEE 1076–2002 มาใช้โดย IEC
  • IEEE 1076c–2007 [ 11 ]แนะนำ VHPI ซึ่งเป็นอินเทอร์เฟซเชิงกระบวนการของ VHDL ซึ่งช่วยให้ซอฟต์แวร์สามารถเข้าถึงโมเดล VHDL ได้ ภาษา VHDL จำเป็นต้องมีการแก้ไขเล็กน้อยเพื่อรองรับ VHPI
  • IEEE 1076–2008 (เดิมเรียกว่า 1076–200x) ฉบับปรับปรุงครั้งใหญ่เผยแพร่เมื่อวันที่ 26 มกราคม 2552 มาตรฐานนี้มีการเปลี่ยนแปลงหลายอย่าง รวมถึงการรวมเอาชุดย่อยพื้นฐานของ PSL เข้ามา อนุญาตให้ใช้ generics ในแพ็กเกจและโปรแกรมย่อย และแนะนำการใช้ชื่อ ภายนอก
    • IEC 61691-1-1:2011 [ 12 ]การนำมาตรฐาน IEEE 1076–2008 มาใช้โดย IEC
  • IEEE 1076–2019 ฉบับปรับปรุงครั้งใหญ่
  • IEEE 1076.1 VHDL อนาล็อกและสัญญาณผสม ( VHDL-AMS )
  • แพ็คเกจมาตรฐาน IEEE 1076.1.1 VHDL-AMS (stdpkgs)
  • แพ็คเกจคณิตศาสตร์ VHDL IEEE 1076.2
  • แพ็คเกจสังเคราะห์ VHDL ตามมาตรฐาน IEEE 1076.3 (vhdlsynth) ( มาตรฐานตัวเลข )
  • แพ็คเกจการสังเคราะห์ VHDL IEEE 1076.3 – จุดลอยตัว (fphdl)
  • IEEE 1076.4 Timing (VHDL Initiative Towards ASIC Libraries: VITAL)
  • IEEE 1076.6 การทำงานร่วมกันของการสังเคราะห์ VHDL (ถูกยกเลิกในปี 2010) [ 13 ]
  • แพ็คเกจIEEE 1164 VHDL Multivalue Logic (std_logic_1164)

ออกแบบ

โดยทั่วไปแล้ว VHDL ใช้สำหรับเขียนแบบจำลองข้อความที่อธิบายวงจรตรรกะ แบบจำลองดังกล่าวจะถูกประมวลผลโดยโปรแกรมสังเคราะห์ก็ต่อเมื่อเป็นส่วนหนึ่งของการออกแบบตรรกะเท่านั้น โปรแกรมจำลองใช้สำหรับทดสอบการออกแบบตรรกะโดยใช้แบบจำลองจำลองเพื่อแสดงวงจรตรรกะที่เชื่อมต่อกับการออกแบบ ชุดของแบบจำลองจำลองนี้โดยทั่วไปเรียกว่า testbench

โดยทั่วไปแล้ว โปรแกรมจำลอง VHDL เป็นโปรแกรมจำลองที่ขับเคลื่อนด้วยเหตุการณ์[ 14 ]ซึ่งหมายความว่าแต่ละธุรกรรมจะถูกเพิ่มเข้าไปในคิวเหตุการณ์ตามเวลาที่กำหนดไว้ ตัวอย่างเช่น หากการกำหนดสัญญาณควรเกิดขึ้นหลังจาก 1 นาโนวินาที เหตุการณ์จะถูกเพิ่มเข้าไปในคิวเป็นเวลา +1ns อนุญาตให้มีการหน่วงเวลาเป็นศูนย์ได้เช่นกัน แต่ยังคงต้องมีการกำหนดเวลา: สำหรับกรณีเหล่านี้ จะใช้ การหน่วงเวลาเดลต้าซึ่งแสดงถึงขั้นตอนเวลาที่เล็กมากจนไม่มีที่สิ้นสุด การจำลองจะสลับระหว่างสองโหมด: การดำเนินการคำสั่ง ซึ่งคำสั่งที่ถูกเรียกใช้จะได้รับการประเมิน และการประมวลผลเหตุการณ์ ซึ่งเหตุการณ์ในคิวจะได้รับการประมวลผล

VHDL มีโครงสร้างสำหรับจัดการกับการทำงานแบบขนานที่มีอยู่ในงานออกแบบฮาร์ดแวร์ แต่โครงสร้างเหล่านี้ ( กระบวนการ ) มีไวยากรณ์ที่แตกต่างจากโครงสร้างการทำงานแบบขนานใน Ada ( งาน ) เช่นเดียวกับ Ada, VHDL เป็นภาษาที่มีการกำหนดประเภทอย่างเข้มงวดและไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก เพื่อให้สามารถแสดงการดำเนินการที่พบได้ทั่วไปในฮาร์ดแวร์ได้โดยตรง VHDL จึงมีคุณสมบัติหลายอย่างที่ไม่พบใน Ada เช่น ชุดตัวดำเนินการบูลีนที่ขยายเพิ่มเติม รวมถึง nandและnor

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

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

สามารถออกแบบฮาร์ดแวร์ใน IDE VHDL (สำหรับการใช้งาน FPGA เช่น Xilinx ISE, Altera Quartus, Synopsys Synplify หรือ Mentor Graphics HDL Designer) เพื่อสร้าง แผนผัง RTLของวงจรที่ต้องการได้ หลังจากนั้น สามารถตรวจสอบแผนผังที่สร้างขึ้นโดยใช้ซอฟต์แวร์จำลอง ซึ่งจะแสดงรูปคลื่นของอินพุตและเอาต์พุตของวงจรหลังจากสร้าง testbench ที่เหมาะสมแล้ว ในการสร้าง testbench ที่เหมาะสมสำหรับวงจรหรือโค้ด VHDL เฉพาะ อินพุตจะต้องถูกกำหนดอย่างถูกต้อง ตัวอย่างเช่น สำหรับอินพุตนาฬิกา จำเป็นต้องมีกระบวนการวนซ้ำหรือคำสั่งแบบวนซ้ำ[ 16 ]

เมื่อแบบจำลอง VHDL ถูกแปลงเป็นเกตและสายไฟที่ถูกแมปไปยังอุปกรณ์ลอจิกที่ตั้งโปรแกรมได้ เช่นCPLDหรือFPGAนั่นหมายความว่าฮาร์ดแวร์จริง ๆ กำลังได้รับการกำหนดค่า ไม่ใช่โค้ด VHDL ที่ถูกประมวลผลราวกับว่ากำลังทำงานอยู่บนชิปประมวลผลชนิดใดชนิดหนึ่ง

ข้อดี

ข้อได้เปรียบที่สำคัญของ VHDL เมื่อใช้ในการออกแบบระบบ คือ ช่วยให้สามารถอธิบาย (สร้างแบบจำลอง) และตรวจสอบ (จำลอง) พฤติกรรมของระบบที่ต้องการได้ ก่อนที่เครื่องมือสังเคราะห์จะแปลงการออกแบบนั้นไปเป็นฮาร์ดแวร์จริง (เกตและสายไฟ)

ข้อดีอีกประการหนึ่งคือ VHDL ช่วยให้สามารถอธิบายระบบแบบขนานได้ VHDL เป็นภาษาการไหลของข้อมูลซึ่งทุกคำสั่งจะถูกพิจารณาเพื่อดำเนินการพร้อมกัน ต่างจากภาษาการคำนวณเชิงขั้นตอน เช่น BASIC, C และภาษาแอสเซมบลี ซึ่งลำดับของคำสั่งจะถูกดำเนินการตามลำดับทีละคำสั่ง

โปรเจ็กต์ VHDL มีวัตถุประสงค์หลากหลาย เมื่อสร้างขึ้นเพียงครั้งเดียว บล็อกการคำนวณสามารถนำไปใช้ในโปรเจ็กต์อื่นๆ ได้อีกมากมาย อย่างไรก็ตาม พารามิเตอร์ของบล็อกทั้งในด้านโครงสร้างและฟังก์ชันการทำงานสามารถปรับแต่งได้หลายอย่าง (เช่น พารามิเตอร์ความจุ ขนาดหน่วยความจำ ฐานขององค์ประกอบ องค์ประกอบของบล็อก และโครงสร้างการเชื่อมต่อ)

โปรเจ็กต์ VHDL สามารถพกพาได้ เนื่องจากถูกสร้างขึ้นสำหรับฐานองค์ประกอบหนึ่ง โปรเจ็กต์อุปกรณ์คอมพิวเตอร์จึงสามารถพอร์ตไปยังฐานองค์ประกอบอื่นได้ ตัวอย่างเช่นVLSIที่ใช้เทคโนโลยีต่างๆ

ข้อได้เปรียบที่สำคัญของ VHDL เมื่อเทียบกับ Verilogดั้งเดิมคือ VHDL มีระบบประเภท ที่สมบูรณ์ นักออกแบบสามารถใช้ระบบประเภทเพื่อเขียนโค้ดที่มีโครงสร้างมากขึ้น (โดยเฉพาะอย่างยิ่งโดยการประกาศ ประเภท เรคอร์ด ) [ 17 ]

ตัวอย่างการออกแบบ

ในภาษา VHDL การออกแบบประกอบด้วยอย่างน้อยที่สุด 1 ส่วน คือ เอนทิตี ที่อธิบายอินเทอร์เฟซ และสถาปัตยกรรม ที่ประกอบด้วยการใช้งานจริง นอกจากนี้ การออกแบบส่วนใหญ่ยังนำเข้าโมดูลจากไลบรารี บางการออกแบบยังประกอบด้วยสถาปัตยกรรมและ การกำหนดค่าหลายแบบอีกด้วย

วงจร ANDอย่างง่ายในภาษา VHDL จะมีลักษณะดังนี้:

-- (นี่คือความคิดเห็น VHDL) /*  นี่คือความคิดเห็นแบบบล็อก (VHDL-2008) */ -- นำเข้า std_logic จากไลบรารี IEEE library IEEE ; ใช้IEEE.std_logic_1164 . all ;-- นี่คือเอนทิตีentity ANDGATE คือพอร์ต( I1 : in std_logic ; I2 : in std_logic ; O : out std_logic ); end entity ANDGATE ;-- นี่คือสถาปัตยกรรมRTL ของANDGATE ซึ่งเริ่มต้นที่O <= I1 และI2 ; สิ้นสุดสถาปัตยกรรมRTL ;

(โปรดสังเกตว่า`register transfer levelRTL design` หมายถึง การออกแบบระดับการถ่ายโอนรีจิ สเตอร์) แม้ว่าตัวอย่างข้างต้นอาจดูเยิ่นเย้อสำหรับผู้เริ่มต้นใช้ HDL แต่หลายส่วนนั้นเป็นตัวเลือกหรือไม่ก็จำเป็นต้องเขียนเพียงครั้งเดียว โดยทั่วไปแล้ว ฟังก์ชันง่ายๆ เช่นนี้เป็นส่วนหนึ่งของโมดูลพฤติกรรมขนาดใหญ่ แทนที่จะมีโมดูลแยกต่างหากสำหรับสิ่งที่ง่ายๆ เช่นนี้ นอกจากนี้ การใช้ส่วนประกอบต่างๆ เช่นประเภท อาจดูเหมือนเกินความจำเป็นในตอนแรก เราสามารถใช้ประเภทในตัวและหลีกเลี่ยงการนำเข้าไลบรารีในตอนเริ่มต้นได้ง่ายๆ อย่างไรก็ตาม การใช้ตรรกะแบบหลายค่าโดยเฉพาะตรรกะ 9 ค่า ( , , , , , , , , ) แทนที่จะใช้บิตธรรมดา (0,1) จะมอบเครื่องมือจำลองและดีบักที่มีประสิทธิภาพมากให้กับนักออกแบบ ซึ่งปัจจุบันยังไม่มีใน HDL อื่นๆ std_logicbitUX01ZWHL-

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

โครงสร้างที่สังเคราะห์ได้และแม่แบบ VHDL

VHDL มักถูกใช้เพื่อวัตถุประสงค์สองอย่างที่แตกต่างกัน คือ การจำลองการออกแบบทางอิเล็กทรอนิกส์ และการสังเคราะห์การออกแบบเหล่านั้น การสังเคราะห์คือกระบวนการที่ VHDL ถูกคอมไพล์และแปลงไปเป็นเทคโนโลยีการใช้งาน เช่น FPGA หรือ ASIC

ไม่ใช่ทุกโครงสร้างใน VHDL จะเหมาะสมสำหรับการสังเคราะห์ ตัวอย่างเช่น โครงสร้างส่วนใหญ่ที่เกี่ยวข้องกับจังหวะเวลาโดยตรง เช่นwait for 10 ns;ไม่สามารถสังเคราะห์ได้แม้ว่าจะใช้งานได้ในการจำลองก็ตาม ถึงแม้ว่าเครื่องมือสังเคราะห์ต่างๆ จะมีขีดความสามารถที่แตกต่างกัน แต่ก็มีชุดย่อยของ VHDL ที่สามารถสังเคราะห์ได้ ทั่วไป ซึ่งกำหนดว่าโครงสร้างและสำนวนภาษาใดที่สามารถแมปกับฮาร์ดแวร์ทั่วไปสำหรับเครื่องมือสังเคราะห์หลายๆ ตัว มาตรฐาน IEEE 1076.6 กำหนดชุดย่อยของภาษาที่ถือว่าเป็นชุดย่อยสำหรับการสังเคราะห์อย่างเป็นทางการ โดยทั่วไปแล้วถือเป็นแนวปฏิบัติที่ดีที่สุดในการเขียนโค้ดที่เป็นไปตามสำนวนภาษาอย่างเคร่งครัดสำหรับการสังเคราะห์ เนื่องจากผลลัพธ์อาจไม่ถูกต้องหรือไม่เหมาะสมสำหรับโครงสร้างที่ไม่เป็นมาตรฐาน

เทมเพลต MUX

มัลติเพล็กเซอร์หรือ 'MUX' ตามที่เรียกกันโดยทั่วไป เป็นโครงสร้างที่เรียบง่ายและพบได้ทั่วไปในการออกแบบฮาร์ดแวร์ ตัวอย่างด้านล่างแสดงให้เห็น MUX แบบสองต่อหนึ่งอย่างง่าย โดยมีอินพุตAและBตัวเลือกSและเอาต์พุตXโปรดทราบว่ามีวิธีอื่น ๆ อีกมากมายในการแสดง MUX เดียวกันใน VHDL [ 18 ]

X <= A เมื่อS = '1' มิฉะนั้นB ;

ตัวอย่างที่ซับซ้อนกว่าของ MUX ที่มีอินพุต 4x3 และตัวเลือก 2 บิต:

library IEEE ; use IEEE.std_logic_1164. all ; entity mux4 is port ( a1 : in std_logic_vector ( 2 downto 0 ); a2 : in std_logic_vector ( 2 downto 0 ); a3 : in std_logic_vector ( 2 downto 0 ); a4 : in std_logic_vector ( 2 downto 0 ); sel : in std_logic_vector ( 1 downto 0 ); b : out std_logic_vector ( 2 downto 0 ) ); end mux4 ; architecture rtl of mux4 is -- declarative part: empty begin p_mux : process ( a1 , a2 , a3 , a4 , sel ) begin case sel is when "00" => b <= a1 ; when "01" => b <= a2 ; when "10" => b <= a3 ; เมื่อเงื่อนไขอื่นๆ=> b <= a4 ; สิ้นสุดกรณี; สิ้นสุดกระบวนการp_mux ; สิ้นสุดrtl ;

แม่แบบตัวล็อค

แลตช์แบบโปร่งใสโดยพื้นฐานแล้วคือหน่วยความจำหนึ่งบิตที่จะได้รับการอัปเดตเมื่อสัญญาณเปิดใช้งานถูกส่งขึ้นมา นอกจากนี้ยังมีวิธีอื่นๆ อีกมากมายที่สามารถแสดงโครงสร้างนี้ในภาษา VHDL ได้

-- แม่แบบล็อค 1: Q <= D เมื่อEnable = '1' มิฉะนั้นQ ;-- แม่แบบล็อค 2: กระบวนการ( ทั้งหมด) เริ่มต้นQ <= D เมื่อ( เปิดใช้งาน); สิ้นสุดกระบวนการ;

ฟลิปฟลอปแบบ D

ฟลิปฟลอปชนิด D จะสุ่มตัวอย่างสัญญาณขาเข้าที่ขอบขาขึ้น (หรือขาลง) ของสัญญาณนาฬิกา ตัวอย่างนี้มีรีเซ็ตแบบอะซิงโครนัสที่ทำงานที่ระดับสูง และสุ่มตัวอย่างที่ขอบขาขึ้นของสัญญาณนาฬิกา

DFF : process ( all ) is begin if RST then Q <= '0' ; elsif rising_edge ( CLK ) then Q <= D ; end if ; end process DFF ;

อีกวิธีหนึ่งที่นิยมใช้ในการเขียนพฤติกรรมแบบทริกเกอร์ขอบใน VHDL คือการใช้แอตทริบิวต์สัญญาณ 'event' โดยต้องใส่เครื่องหมายอัญประกาศเดี่ยวคั่นระหว่างชื่อสัญญาณและชื่อของแอตทริบิวต์

DFF : process ( RST , CLK ) is begin if RST then Q <= '0' ; elsif CLK 'event and CLK = '1' then Q <= D ; end if ; end process DFF ;

นอกจากนี้ VHDL ยังเหมาะสำหรับการเขียนโค้ดแบบ "บรรทัดเดียว" เช่น:

DFF : Q <= '0' เมื่อRST = '1' มิฉะนั้นD เมื่อขอบขาขึ้น( clk );

หรือ:

DFF : process ( all ) is begin if rising_edge ( CLK ) then Q <= D ; end if ; if RST then Q <= '0' ; end if ; end process DFF ;

หรือ:

ไลบรารีIEEE ; USE IEEE.Std_logic_1164. all ;entity RisingEdge_DFlipFlop_SyncReset is port ( Q : out std_logic ; Clk : in std_logic ; sync_reset : in std_logic ; D : in std_logic ); end RisingEdge_DFlipFlop_SyncReset ;architecture Behavioral of RisingEdge_DFlipFlop_SyncReset is begin process ( Clk ) begin if ( rising_edge ( Clk )) then if ( sync_reset = '1' ) then Q <= '0' ; else Q <= D ; end if ; end if ; end process ; end Behavioral ;

ซึ่งอาจมีประโยชน์หากไม่จำเป็นต้องรีเซ็ตสัญญาณ (รีจิสเตอร์) ทั้งหมดที่ถูกควบคุมโดยกระบวนการนี้

ตัวอย่าง: ตัวนับ

ตัวอย่างต่อไปนี้เป็นวงจรนับขึ้นที่มีการรีเซ็ตแบบอะซิงโครนัส การโหลดแบบขนาน และความกว้างที่กำหนดค่าได้ ตัวอย่างนี้แสดงให้เห็นถึงการใช้ชนิดข้อมูล 'unsigned' การแปลงชนิดข้อมูลระหว่าง 'unsigned' และ 'std_logic_vector' และgenerics ใน VHDL generics นั้นคล้ายคลึงกับ arguments หรือ templates ในภาษาโปรแกรมแบบดั้งเดิมอื่นๆ เช่น C++ ตัวอย่างนี้เขียนด้วยภาษา VHDL 2008

library IEEE ; use IEEE.std_logic_1164. all ; use IEEE.numeric_std. all ; -- สำหรับชนิดข้อมูล unsignedentity COUNTER is generic ( WIDTH : in natural := 32 ); port ( RST : in std_logic ; CLK : in std_logic ; LOAD : in std_logic ; DATA : in std_logic_vector ( WIDTH - 1 downto 0 ); Q : out std_logic_vector ( WIDTH - 1 downto 0 )); end entity COUNTER ;สถาปัตยกรรมRTL ของCOUNTER คือเริ่มกระบวนการ( ทั้งหมด) เริ่มต้นถ้าRST แล้วQ <= ( อื่นๆ=> '0' ); มิฉะนั้น ถ้า rising_edge ( CLK ) แล้วถ้าLOAD = '1' แล้วQ <= DATA ; มิฉะนั้นQ <= std_logic_vector ( unsigned ( Q ) + 1 ); สิ้นสุดเงื่อนไข; สิ้นสุดเงื่อนไข; สิ้นสุดกระบวนการ;สถาปัตยกรรมส่วนท้ายRTL ;

ตัวนับที่ซับซ้อนกว่าอาจเพิ่มคำสั่ง if/then/else เข้าไปrising_edge(CLK) elsifเพื่อเพิ่มฟังก์ชันอื่นๆ เช่น การเปิดใช้งานการนับ การหยุดหรือการวนกลับไปที่ค่าการนับบางค่า และการสร้างสัญญาณเอาต์พุต เช่น สัญญาณการนับสุดท้าย ต้องระมัดระวังในการจัดลำดับและการซ้อนกันของตัวควบคุมดังกล่าวหากใช้ร่วมกัน เพื่อให้ได้ลำดับความสำคัญที่ต้องการและลดจำนวนระดับตรรกะที่จำเป็นให้น้อยที่สุด

โครงสร้างจำลองเท่านั้น

ส่วนย่อยขนาดใหญ่ของ VHDL ไม่สามารถแปลงเป็นฮาร์ดแวร์ได้ ส่วนย่อยนี้เรียกว่าส่วนที่ไม่สามารถสังเคราะห์ได้ หรือส่วนที่ใช้ได้เฉพาะการจำลองเท่านั้น และสามารถใช้ได้เฉพาะสำหรับการสร้างต้นแบบ การจำลอง และการดีบักเท่านั้น ตัวอย่างเช่น โค้ดต่อไปนี้จะสร้างสัญญาณนาฬิกาที่มีความถี่ 50 MHz ตัวอย่างเช่น สามารถใช้เพื่อขับสัญญาณนาฬิกาในวงจรออกแบบระหว่างการจำลองได้ อย่างไรก็ตาม มันเป็นโครงสร้างที่ใช้ได้เฉพาะการจำลองเท่านั้น และไม่สามารถนำไปใช้งานในฮาร์ดแวร์จริงได้ ในฮาร์ดแวร์จริง สัญญาณนาฬิกาจะถูกสร้างขึ้นจากภายนอก และสามารถลดขนาดลงภายในได้ด้วยตรรกะของผู้ใช้หรือฮาร์ดแวร์เฉพาะ

กระบวนการเริ่มต้นCLK < = ' 1' ; รอ10 NS ; CLK <= '0' ; รอ10 NS ; สิ้นสุดกระบวนการ;

โครงสร้างที่ใช้การจำลองอย่างเดียวสามารถใช้สร้างรูปคลื่นที่ซับซ้อนได้ในเวลาอันสั้น รูปคลื่นเหล่านี้สามารถนำไปใช้ได้ เช่น เป็นเวกเตอร์ทดสอบสำหรับการออกแบบที่ซับซ้อน หรือเป็นต้นแบบของตรรกะสังเคราะห์บางอย่างที่จะนำไปใช้งานในอนาคต

กระบวนการเริ่มต้น รอจนกว่าSTART = '1' ; -- รอจนกว่า START จะเป็นค่าสูงสำหรับi ใน1 ถึง10 วนซ้ำ-- จากนั้นรอเป็นเวลาสองสามรอบสัญญาณนาฬิกา... รอจนกว่าขอบขาขึ้น( CLK ); สิ้นสุดการวนซ้ำ;สำหรับi ในช่วง 1 ถึง10 วนลูป-- เขียนตัวเลข 1 ถึง 10 ลงใน DATA ทีละ 1 ตัวในแต่ละรอบDATA <= to_unsigned ( i , 8 ); รอจนกว่า สัญญาณ CLK จะเป็นขอบขาขึ้น; สิ้นสุดลู;-- รอจนกว่าเอาต์พุตจะเปลี่ยนแปลงwait on RESULT ; -- จากนั้นส่ง ACK เป็นเวลาหนึ่งรอบสัญญาณนาฬิกาACK <= '1' ; รอจนกว่าrising_edge ( CLK ); ACK <= '0' ;-- และอื่นๆ... สิ้นสุดกระบวนการ;

คุณสมบัติของ VHDL-2008

ชื่อแทนแบบลำดับชั้น

library ieee ; use ieee.std_logic_1164. all ;entity bfm is end entity ; architecture beh of bfm is signal en : std_logic ; begin -- insert implementation here end architecture ;// ------------------------------------------ library ieee ; use ieee.std_logic_1164. all ;entity test1 คือend entity ; architecture beh ของtest1 คือbeginibfm : entity work . bfm ; -- กระบวนการทดสอบชื่อเรียกแทนprobe_en คือ<< signal . test1 . ibfm . en : std_logic >> ; begin probe_en <= '1' ; wait for 100 ns ; probe_en <= '0' ; wait for 100 ns ; probe_en <= '1' ; wait for 100 ns ; std.env . stop ( 0 ); end process ; end architecture ;

ไลบรารีมาตรฐาน

เรียกอีกอย่างว่า แพ็คเกจมาตรฐาน

แพ็คเกจมาตรฐาน IEEE

แพ็คเกจมาตรฐาน IEEE ประกอบด้วยสิ่งต่อไปนี้: [ 19 ]

โปรแกรมจำลอง VHDL

ทางการค้า:

อื่น:

  • EDA Playgroundเป็น IDE สำหรับเขียนโปรแกรม VHDL บนเว็บที่ใช้งานได้ฟรี (ใช้ Synopsys VCS, Cadence Incisive, Aldec Riviera-PROและ GHDL สำหรับการจำลอง VHDL)
  • GHDLเป็นคอมไพเลอร์ VHDL แบบโอเพนซอร์ส[ 21 ]ที่สามารถเรียกใช้โปรแกรม VHDL ได้ ( GHDLบนGitHub )
  • bootจาก freerangefactory.org เป็นคอมไพเลอร์และโปรแกรมจำลอง VHDL ที่ใช้ GHDL และGTKWave
  • Simili โดย Symphony EDA เป็นโปรแกรมจำลอง VHDL เชิงพาณิชย์ฟรีที่มีอยู่ในWayback Machine (เก็บถาวรเมื่อ 2 ตุลาคม 2007)
  • nvcโดย Nick Gasson เป็นคอมไพเลอร์และโปรแกรมจำลอง VHDL แบบโอเพนซอร์ส[ 22 ] [ 23 ]
  • freehdlโดย Edwin Naroska เป็นโปรแกรมจำลอง VHDL แบบโอเพ่นซอร์ส ซึ่งถูกละทิ้งไปตั้งแต่ปี 2544 [ 24 ]

ดูเพิ่มเติม

อ่านเพิ่มเติม

  • Ashenden, Peter J. (2008). คู่มือสำหรับนักออกแบบเกี่ยวกับ VHDL ฉบับที่สาม (Systems on Silicon ) ISBN 978-0-1208-8785-9.(หนังสืออ้างอิง VHDL ที่เขียนโดยหนึ่งในผู้พัฒนาหลักของภาษา)
  • Bryan Mealy, Fabrizio Tappero (กุมภาพันธ์ 2012). [1]คู่มือที่ไม่ซับซ้อนสำหรับการเขียนโค้ด VHDL ที่ทรงพลังสำหรับการใช้งานดิจิทัลของคุณ เก็บถาวรจากFree Range VHDL ฉบับดั้งเดิม เมื่อวันที่ 13 กุมภาพันธ์ 2015
  • Johan Sandstrom (ตุลาคม 1995). "การเปรียบเทียบ Verilog กับ VHDL ในเชิงไวยากรณ์และเชิงความหมาย" . การออกแบบระบบแบบบูรณาการ . EE Times.— แซนด์สตรอมนำเสนอตารางที่แสดงความสัมพันธ์ระหว่างโครงสร้างของ VHDL กับโครงสร้างของ Verilog
  • Qualis Design Corporation (2000-07-20). "บัตรอ้างอิงฉบับย่อ VHDL" (PDF) . 1.1. Qualis Design Corporation. เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 2003-12-10.
  • Qualis Design Corporation (2000-07-20). "บัตรอ้างอิงฉบับย่อสำหรับแพ็คเกจ 1164" (PDF) . 1.0. Qualis Design Corporation. เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 2016-03-14.
  • Janick Bergeron, "การเขียน Testbenches: การตรวจสอบการทำงานของโมเดล HDL", 2000, ISBN 0-7923-7766-4(คู่มือทดสอบ HDL)
  • Krolikoski, SJ (พฤษภาคม 1995). "การกำหนดมาตรฐานไลบรารี ASIC ใน VHDL โดยใช้ VITAL: คู่มือ". รายงานการประชุม IEEE 1995 Custom Integrated Circuits Conference . หน้า  603–610 . doi : 10.1109/CICC.1995.518256 . ISBN 0-7803-2584-2.
  • Vreeland, Russell E. "การเชื่อมต่อระบบกับชิป: การใช้ VHDL/VITAL สำหรับการจำลองระดับบอร์ด" (PDF) . สืบค้นเมื่อ12 พฤษภาคม 2025 .
  • Rushton, Andrew (2011). VHDL สำหรับการสังเคราะห์ตรรกะ (ฉบับที่ 3). ชิเชสเตอร์ เวสต์ซัสเซ็กซ์ สหราชอาณาจักร: Wiley . หน้า 4. ISBN 9780470977972.
  • Vreeland, Russell E. "การ สร้างแบบจำลองส่วนประกอบระดับบอร์ดโดยใช้ VITAL" สืบค้นเมื่อ12 พฤษภาคม 2025
  • Tuzov, Ilya; Ruiz, Juan-Carlos; de Andrés, David (กันยายน 2017). "การจำลองผลกระทบของความผิดพลาดในแบบจำลอง VHDL ที่อธิบายไว้ในระดับการใช้งานอย่างแม่นยำ". การประชุม European Dependable Computing Conference ครั้งที่ 13 ประจำปี 2017 (EDCC) . สถาบันวิศวกรรมไฟฟ้าและอิเล็กทรอนิกส์ . หน้า  10–17 . doi : 10.1109/EDCC.2017.26 . ISBN 978-1-5386-0602-5.
  • เว็บไซต์อย่างเป็นทางการ
  • กลุ่มวิเคราะห์และกำหนดมาตรฐาน VHDL (VASG)
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=VHDL&oldid=1360090633 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ วีเอชดีแอล

VHDL ( VHSIC Hardware Description Language) เป็น ภาษาสำหรับการอธิบายฮาร์ดแวร์ ที่สามารถจำลองพฤติกรรมและโครงสร้างของ ระบบดิจิทัล ได้หลายระดับ ตั้งแต่ระดับระบบลงไปจนถึงระดับ...

ประวัติศาสตร์

ในปี พ.ศ. 2526 VHDL ได้รับการพัฒนาขึ้นครั้งแรกตามคำขอของ กระทรวงกลาโหมสหรัฐฯ เพื่อใช้ในการบันทึกพฤติกรรมของ ASIC ที่บริษัทผู้ผลิตได้รวมไว้ในอุปกรณ์ มาตรฐาน MIL-STD-454N [ 2 ] ในข้อกำหนดที่ 64 ในส่วนที่ 4.5.

การกำหนดมาตรฐาน

มาตรฐาน IEEE 1076 กำหนด ภาษาสำหรับการอธิบายฮาร์ดแวร์ VHSIC หรือ VHDL เดิมทีภาษานี้ได้รับการพัฒนาภายใต้สัญญา F33615-83-C-1003 จาก กองทัพอากาศสหรัฐฯ ซึ่งมอบให้แก่ทีมงานของ Intermetrics, Inc.

ออกแบบ

โดยทั่วไปแล้ว VHDL ใช้สำหรับเขียนแบบจำลองข้อความที่อธิบายวงจรตรรกะ แบบจำลองดังกล่าวจะถูกประมวลผลโดยโปรแกรมสังเคราะห์ก็ต่อเมื่อเป็นส่วนหนึ่งของการออกแบบตรรกะเท่านั้น...