มีไลบรารีโอเพ่นซอร์สสำหรับ VHDL สำหรับ C ++ หรือ python หรือไม่?


11

เมื่อฉันเข้าใกล้ปัญหาใน C ++ หรือ python มีหลายไลบรารีที่มีอยู่ซึ่งทำให้รหัสของฉันหนักขึ้น ฉันกำลังคิดถึงGNU GSL , BOOSTหรือ FFTW สำหรับ C ++ และ NumPy หรือ SciPy สำหรับ python ในหลาย ๆ ทางความจริงที่ว่าทรัพยากรเหล่านี้มีอยู่ทำให้การเขียนโค้ดในภาษาที่เกี่ยวข้องเหล่านี้มีมูลค่าเนื่องจากห้องสมุดป้องกันไม่ให้คุณต้องเขียนสิ่งที่ต่ำทั้งหมดตั้งแต่เริ่มต้น

ไลบรารีมาตรฐาน IEEE ดูเหมือนจะครอบคลุมเฉพาะพื้นฐานมาก ๆ เช่นชนิดข้อมูล (เรียงลำดับคล้ายกับ lib มาตรฐาน C)

ดูเหมือนว่าใน VHDL คุณสามารถซื้อ / หา "IP Cores" บางอย่างที่จะแก้ปัญหาแทนที่จะใช้ไลบรารีโอเพ่นซอร์ส ในไพ ธ อนถ้าฉันต้องการพูดคุยกับอุปกรณ์แบบอนุกรมฉันเพียงimport serialและฉันก็ทำโดยทั่วไป ใน VHDL ฉันอาจจะเขียนโพรโทคอลแบบอนุกรมตั้งแต่เริ่มต้นหรือฉันต้องไปที่ google บนที่เก็บต่างๆจนกว่าฉันจะพบใครบางคนที่ผลิตงานบางอย่างที่เรียงลำดับ จากนั้นฉันจะทำการแก้ไขโค้ดในโครงการของฉันแทนที่จะรวมเอาบางสิ่งและเรียกสิ่งนั้น ในทำนองเดียวกันถ้าฉันต้องการแสดง FFT ฉันสามารถค้นหาตัวอย่างของ FFT ใน VHDL ผ่าน google ได้ แต่ไม่มีอะไรง่าย ๆ เหมือน FFTW ที่ฉันสามารถหาได้

มีไลบรารีโอเพ่นซอร์สที่ครอบคลุมใด ๆ ที่ฉันสามารถนำเข้าสู่โครงการของฉันได้หรือไม่? ทำไมทุกคนดูเหมือนจะม้วนรหัสของตัวเองสำหรับสิ่งเดียวกันมากมาย


2
คุณค้นหา opencores.org หรือไม่
MarkU

3
สำหรับไลบรารีการตรวจสอบ VHDL ดู osvvm.org
Jim Lewis

Opencores คุณยังสามารถซื้อห้องสมุดจากแหล่งต่าง ๆ คุณจะใช้เวลากับแกนส่วนใหญ่จาก opencores ส่วนใหญ่จะไม่ได้รับการบันทึกไว้อย่างดี
Spike แรงดัน

คำตอบ:


14

ฉันเป็นนักพัฒนาและผู้ดูแลที่ ' The PoC Library ' เราพยายามจัดเตรียมไลบรารี่ที่ประกอบด้วยแพคเกจ (ชุดของประเภทและฟังก์ชั่นใหม่) และโมดูล มันมาพร้อมกับฟีฟ่าทั่วไป, arithmetics, ส่วนประกอบข้ามนาฬิกา, ส่วนประกอบ I-O ความเร็วต่ำและสแต็ค Ethernet / IP / UDP (รีลีสถัดไป)

ตามที่ @crgrace อธิบายไว้มันค่อนข้างซับซ้อนในการออกแบบโมดูลซึ่ง:

  • ทำงานบนหลาย ๆ แพลตฟอร์ม
  • สนับสนุนกลุ่มเครื่องมือผู้ขายส่วนใหญ่
  • เพิ่มค่าใช้จ่ายไม่ / น้อย

ห้องสมุดของเรามีกลไกการกำหนดค่าภายใน (PoC.config) เพื่อแยกแยะผู้ขายอุปกรณ์และแม้แต่อุปกรณ์ย่อยของครอบครัวเพื่อเลือกรหัสที่ถูกต้องหรือการนำไปใช้ที่เหมาะสม นอกจากนี้ยังแยกความแตกต่างระหว่างการสังเคราะห์และรหัสการจำลองในบางจุด

ตัวอย่างเช่นPoC.fifo_cc_gotFIFO ที่มีอินเทอร์เฟซ 'นาฬิกาทั่วไป' (cc) และวาง / รับสัญญาณเพื่อควบคุม Fifo Fifo สามารถกำหนดได้ทั้งความกว้างความลึกบิตสถานะการเติมและประเภทการนำไปใช้งาน เป็นไปได้ที่จะเลือกประเภทการนำไปใช้งานตาม LUT หรือ On-Chip-RAM (ocram) หากฟีเจอร์นี้ถูกสังเคราะห์ด้วยตัวเลือก ocram สำหรับ Altera จะใช้ altsyncram ถ้าเลือก Xilinx จะใช้คำอธิบาย BlockRAM ทั่วไปและใช้ตัวชี้ทางคณิตศาสตร์โดยการสร้างอินสแตนซ์ของเชนเชนอย่างชัดเจน (Xilinx XST ไม่พบโซลูชันที่ดีที่สุดดังนั้นจึงทำได้ด้วยตนเอง)

มีอีกห้าประเภทฟีฟ่าที่มี 'นาฬิกาขึ้นอยู่กับ' (dc) และอินเทอร์เฟซนาฬิกา (ic) อิสระ ดังนั้นหากจำเป็นต้องเปลี่ยนจาก Fifo ปกติเป็น Fifo Clock (PoC.fifo_ic_got) ให้เปลี่ยนชื่อเอนทิตีและเพิ่มนาฬิกาและรีเซ็ตนาฬิกาโดเมนที่สองนั่นคือทั้งหมด

ฉันคิดว่านี่พิสูจน์ได้ว่าเป็นไปได้ที่จะเขียนโมดูลทั่วไปซึ่งทำงานบนหลายแพลตฟอร์มและรวบรวมในเครื่องมือต่าง ๆ (Spartan-> Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus)

นอกจาก PoC แล้วยังมีไลบรารีโอเพ่นซอร์สอื่น ๆ :


"การค้นพบฟรีและเปิดการ Silicon" ( Fossiโครงการ) บน GitHub มีฐานข้อมูลที่สามารถเรียกดูได้ทุกโครงการ GitHub ที่ส่วนใหญ่ใช้ , , หรือภาษาอธิบายฮาร์ดแวร์ที่สำคัญอื่น ๆ ( )

ดูสิ่งนี้ด้วย:


+1 สำหรับแสดงสิ่งที่คุณทำและสิ่งที่คนอื่นทำ รายการยาวดี
นายMystère

3

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

นอกจากนี้เนื่องจากเรากำลังอธิบายฮาร์ดแวร์ฟังก์ชั่นที่ทำ FFT จะต้องมีความเฉพาะเจาะจงเช่นความกว้างของคำและนาฬิกาและกลยุทธ์การตั้งค่าใหม่ที่มันจะผูกมือของคุณและ จำกัด การออกแบบทั้งหมดของคุณ ถ้าคุณทำให้ฟังก์ชั่นมีความยืดหยุ่นมากมันจะมีค่าใช้จ่ายมหาศาล

สุดท้ายให้ดูขนาดของไฟล์ที่เรียกใช้งานได้ของคุณเมื่อคุณใส่ไลบรารี่จำนวนมากใน C เช่นกัน มีตันของที่นั่น นั่นไม่สำคัญสำหรับการพัฒนาซอฟต์แวร์ (ส่วนใหญ่) แต่สำคัญมากสำหรับ FPGA และการพัฒนา ASIC โดยเฉพาะ ไม่มีความรู้สึกในการสังเคราะห์กลุ่มของค่าใช้จ่ายที่คุณไม่ต้องการ

ดังนั้นกำไรคือไม่มีห้องสมุดดังกล่าวและวิธีการปัจจุบันของคุณคือเสียง


ตัวกำเนิดหลักทางเลือก (IP) ยังให้ความเสี่ยงของ Scylla และ Chabydris ของการล็อคผู้ขายและทำให้เกิดการขยายตัว ความจุของ FPGA และ ASIC นั้นเพิ่มขึ้นอย่างมากพอที่จะรองรับการขยายตัวของปัญหาและค่าใช้จ่ายและการทดสอบ การแลกเปลี่ยนเวลาในการทำตลาดเมื่อเทียบกับ "ค่าใช้จ่ายที่คุณไม่ต้องการ" ทำโดยอุตสาหกรรมทั้งหมด การออกแบบระบบโดยใช้แบบเอกสารสำเร็จรูปแทนการออกแบบฮาร์ดแวร์ซึ่งเป็นระบบหลังการทำงานของ VHDL
user8352

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

2

VHDL และ Verilog เป็นภาษาที่สื่อความหมายและอธิบายถึงบล็อกฮาร์ดแวร์ ไดรเวอร์อนุกรมใน C ++ อาจแปลเป็น Serial IP ใน VHDL / Verilog

opencores.org เป็นฐานข้อมูลโอเพ่นซอร์สที่ใหญ่ที่สุดจนถึงปัจจุบัน

เพื่ออำนวยความสะดวกในกระบวนการค้นหาดาวน์โหลดและเรียกดูรหัส (ผ่าน Github) คุณสามารถใช้อินเทอร์เฟซที่ทันสมัยนี้:

http://freerangefactory.org/cores.html

ตัวอย่างเช่นหากคุณค้นหาซีเรียลคุณสามารถท้ายได้ที่นี่:

http://freerangefactory.org/cores/communication_controller/serial_uart_2/index.html

และข้ามไปที่รหัสใน GitHub โดยตรง ที่นั่นคุณจะเห็นว่าคุณสามารถยกตัวอย่างโมดูลอนุกรมและเชื่อมต่อวงจรของคุณเองได้อย่างง่ายดายและเริ่มส่งและรับข้อมูล นี่เป็นเรื่องง่ายเหมือน libs อนุกรมใน C ++

ฉันหวังว่านี่จะช่วยได้.


0

ไซต์แรกที่ฉันไปสำหรับสิ่งนี้ (ตามที่ @MarkU กล่าวถึง) คือ opencores.org

ตัวอย่างเช่นมีเครื่องมือ FFT แปรสภาพซึ่งเขียนใน VHDL เผยแพร่ภายใต้ใบอนุญาต BSD สถานะคือ "เบต้า"


นั่นไม่ใช่สิ่งที่ OP ถาม เขาหรือเธอรู้เกี่ยวกับการดู opencores.org เครื่องมือ FFT ที่กำหนดพารามิเตอร์เป็นหนทางไกลจากการนำเข้าไลบรารีคณิตศาสตร์มาตรฐานใน Python และใช้งาน ไม่มีสิ่งเช่น "มิดเดิลแวร์" ในฮาร์ดแวร์เนื่องจากค่าใช้จ่าย
crgrace

0

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

เว็บไซต์ OSVVM และบล็อกที่มีความhttp://osvvm.org แพคเกจนี้ยังมีอยู่ใน github ที่: https://github.com/JimLewis/OSVVM

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.