การเขียนโปรแกรม FPGA ที่จะเริ่มต้น


29

ฉันเป็นผู้พัฒนาซอฟต์แวร์ (C, C ++, Object-c, java ... ) และฉันสนใจที่จะเรียนรู้ที่จะตั้งโปรแกรม FPGA ตอนนี้คำถามอาจดูง่ายสำหรับคุณ แต่โปรดใช้เวลาช่วยฉันในเรื่องนี้เพราะฉันติดอยู่ในตอนนี้ บริษัท ของฉันขอให้ฉันทำความคุ้นเคยกับเทคโนโลยีและทำงานกับผลิตภัณฑ์ขัดแตะ คำถามของฉันจะเริ่มตรงไหน? หลังจากการวิจัยบางอย่างฉันพบว่าฉันสามารถเลือกระหว่าง VHDL และ Verilog ฉันไม่เคยใช้มันเลย มีผู้เชี่ยวชาญคนใดบ้างที่สามารถแนะนำฉันได้ฉันควรเริ่มต้นที่ไหน เรียนรู้ภาษาเรียนรู้เกี่ยวกับส่วนประกอบฮาร์ดแวร์และจากนั้นผลิตภัณฑ์ขัดแตะ? หรือเริ่มต้นโดยตรงกับผลิตภัณฑ์ Lattice (เมื่อฉันอ่านว่าวิธีการเขียนโปรแกรมแตกต่างกันมากระหว่างผู้จำหน่าย FPGA)?


3
หากคุณคุ้นเคยกับการเขียนโปรแกรม C / C ++ คุณควรเลือกVerilogแทนที่จะเป็น VHDL ไวยากรณ์ของ Verilog คล้ายกับ C.
m.Alin

1
@ m.Alin ฉันเพิ่งเริ่มและฉันพบว่ามันไม่สำคัญว่าถ้ามันดูเหมือน C เพราะฉันพบว่าส่วนที่ยากที่สุดไม่ใช่ไวยากรณ์ แต่ความแตกต่างของแนวคิด ความหมายยังไม่ใกล้เคียงกับ C.
Edgar Klerks

การเปลี่ยนแปลงครั้งใหญ่ที่สุดที่ฉันพบจาก C / C ++ / Java / etc คือโมดูลที่คุณเขียน (เทียบเท่าฉันคิดว่าหน่วยการแปล) เป็นเหตุการณ์ที่ขับเคลื่อนอย่างหมดจด ใน C ทำให้ง่ายขึ้นกับหลักการพื้นฐานโปรแกรมที่คอมไพล์จะดำเนินการบรรทัดที่ 1 ของรหัสของคุณจากนั้นบรรทัดที่ 2 จากนั้น 3 จากนั้น 4 และอื่น ๆ ไม่มีสิ่งนั้นใน Verilog / VHDL มันเป็นเหมือนวาดภาพ : อินพุตขานี้เชื่อมต่อกับ module1_input, module1_output สลับสถานะทุกครั้งที่ module1_input สูงขึ้น แทนมันif(condition) when(condition)FPGA IDEs ส่วนใหญ่มีอินพุตการออกแบบกราฟิกราวกับว่าคุณกำลังวาดลงบนกระดาษ
CharlieHanson

คำตอบ:


40

การออกแบบดิจิทัลไม่เหมือนกันมากกับการพัฒนาซอฟต์แวร์ (อาจยกเว้นว่า Verilog syntax ดูเหมือนภาษา C เล็กน้อย แต่มันก็ดูเหมือน) ดังนั้นจึงเป็นการยากที่จะตอบคำถามประเภทนี้อย่างเพียงพอ แต่ในฐานะคนที่เดินเส้นทางจากการพัฒนาซอฟต์แวร์ไปจนถึงการออกแบบฮาร์ดแวร์ฉันจะให้มันยิง มองย้อนกลับไปที่ตัวเองนี่คือวิธีที่ฉันจะแนะนำตัวเองย้อนกลับไปถ้าฉันรู้สิ่งที่ฉันรู้ตอนนี้:

เริ่มจากศูนย์

ลืมทุกอย่างเกี่ยวกับการพัฒนาซอฟต์แวร์ โดยเฉพาะภาษาโปรแกรม หลักการเหล่านั้นใช้ไม่ได้กับการออกแบบดิจิทัล อาจเป็นเรื่องง่ายสำหรับคนที่ออกแบบ CPU เพื่อเขียนโปรแกรมในแอสเซมเบลอร์หรือ C แต่โปรแกรมเมอร์แอสเซมเบลอร์จะไม่สามารถออกแบบ CPU ได้

บนเส้นทางการเรียนรู้ของคุณไม่ได้มีแนวโน้มที่จะแก้ไขสิ่งที่ดูเหมือนจะเป็นปัญหาง่าย ๆ กับความรู้ที่มีอยู่ของคุณจากซอฟต์แวร์ หนึ่งในตัวอย่างคลาสสิกคือ "for loop" แม้ว่าคุณสามารถเขียน for for loop ได้ แต่พูด verilog - มันมีจุดประสงค์ที่แตกต่างกัน ส่วนใหญ่จะใช้สำหรับการสร้างรหัส มันอาจจะเป็นวงสำหรับนักพัฒนาซอฟต์แวร์ที่เห็นมัน แต่มันจะไม่ดีสำหรับอะไรนอกจากการจำลอง (เช่นคุณจะไม่สามารถโปรแกรม FPGA แบบนั้น)

ดังนั้นสำหรับทุกงานที่คุณต้องการจัดการอย่าคิดว่าคุณรู้วิธีทำวิจัยแทน - ตรวจสอบหนังสือตัวอย่างถามคนที่มีประสบการณ์มากกว่าเป็นต้น

เรียนรู้ฮาร์ดแวร์และภาษา HDL

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

บางคนแนะนำให้เรียนรู้ Verilog เพราะดูเหมือนว่าใช่ใช่ไวยากรณ์ของมันคือการผสมผสานระหว่าง C และ Ada แต่มันไม่ได้ทำให้ง่ายนักสำหรับนักพัฒนาซอฟต์แวร์ที่จะเรียนรู้ อันที่จริงฉันคิดว่ามันอาจทำให้แย่ลงเพราะจะมีการล่อใจให้เขียน C ใน Verilog นั่นเป็นสูตรที่ดีสำหรับการมีช่วงเวลาที่แย่มาก

โดยที่ในใจฉันขอแนะนำให้จ้องมองจาก VHDL แม้ว่า Verilog ก็ใช้ได้เช่นกันตราบใดที่มีการพิจารณาข้างต้น

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

ด้วยเหตุนี้ฉันขอแนะนำให้คุณหาหนังสือเกี่ยวกับอุปกรณ์อิเล็กทรอนิกส์โดยทั่วไปและหนังสือดี ๆ เล่มนี้ - HDL Chip Design (หรือที่รู้จักในนามสมุดสีฟ้า)

รับโปรแกรมจำลอง

ก่อนที่คุณจะเริ่มทำสิ่งใดในฮาร์ดแวร์และใช้คุณสมบัติเฉพาะของผู้ขายเป็นต้นลองจำลองด้วยตัวคุณเอง ฉันเริ่มต้นด้วย Verilog และใช้ Icarus Verilog พร้อมกับ GTK Wave เหล่านี้เป็นโครงการโอเพนซอร์ซฟรี ใช้ตัวอย่างที่คุณเห็นในหนังสือฝึกฝนโดยการออกแบบวงจรของคุณเองเพื่อรับรสชาติของมัน

รับบอร์ดพัฒนา

เมื่อคุณรู้สึกอยากก้าวไปข้างหน้าให้ได้รับคณะกรรมการพัฒนา หากคุณรู้ว่านายจ้างของคุณต้องการไปกับ Lattice ให้ไปที่ Lattice

วิธีการเขียนโปรแกรมคล้ายกันมาก แต่มีรายละเอียดที่แตกต่างกัน ตัวอย่างเช่นเครื่องมือต่าง ๆ ตัวเลือกต่าง ๆ อินเทอร์เฟซที่แตกต่างกัน โดยปกติหากคุณมีประสบการณ์กับผู้ขายรายเดียวไม่ยากที่จะเปลี่ยน แต่คุณอาจต้องการหลีกเลี่ยงช่วงการเรียนรู้เพิ่มเติมนี้

ฉันต้องแน่ใจว่าบอร์ดนั้นมาพร้อมกับส่วนประกอบที่คุณวางแผนจะใช้หรือขยายได้ ตัวอย่างเช่นถ้าคุณต้องการออกแบบอุปกรณ์เครือข่ายเช่นเราเตอร์ตรวจสอบให้แน่ใจว่าบอร์ดมี Ethernet PHY หรือสามารถขยายผ่านพูดขั้วต่อ HSMC เป็นต้น

บอร์ดมักจะมาพร้อมกับการอ้างอิงที่ดีคู่มือผู้ใช้และตัวอย่างการออกแบบ ศึกษาพวกเขา

อ่านหนังสือ

คุณจะต้องอ่านหนังสือ ในกรณีของฉันฉันไม่มีเพื่อนที่รู้การออกแบบดิจิทัลและไซต์นี้ไม่ได้มีประโยชน์มากเพราะสิ่งหนึ่ง - ฉันไม่รู้ด้วยซ้ำว่าจะใช้คำถามของฉันอย่างไร ทั้งหมดที่ฉันสามารถทำได้คือ "Uhm, ผู้ชาย, มีสิ่ง dcfifo และฉันได้ยินอะไรบางอย่างเกี่ยวกับความท้าทายข้ามโดเมนนาฬิกามันคืออะไรและทำไมการออกแบบของฉันไม่ทำงาน"

ฉันเริ่มต้นด้วยตนเองเหล่านี้:

ผู้ขายของ FPGA มีตำราจำนวนมากที่มีแนวปฏิบัติที่ดีที่สุด ศึกษาพวกเขาพร้อมกับการออกแบบอ้างอิง นี่คือตัวอย่างหนึ่งจาก Altera

กลับมาพร้อมคำถามที่เจาะจงมากขึ้น

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


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

5
คำตอบที่ยอดเยี่ยม
อัสซาด Ebrahim

ย้อนกลับไปในโรงเรียนเราเรียนรู้ C ++ ก่อนที่เราจะเรียน VHDL มีปัญหามากมายในการทำความเข้าใจ แต่จุดที่ทุกอย่างถูกคลิกคือเมื่อฉันเข้าใจว่าทุกอย่างเกิดขึ้นแบบเรียลไทม์และขนาน (ขนานไม่ใช่แบบอะซิงโครนัสเหมือน nodejs) การพัฒนาซอฟต์แวร์เป็นไปตามลำดับต่อเนื่อง แต่ใน HDL ทุกอย่างเกิดขึ้นพร้อมกัน (เกือบตลอดเวลา) หากคุณมีบางอย่างเช่น "x = 1; y = 2; y = x; x = y" ใน SW ที่ท้าย y จะเท่ากับ 1 ใน HDL คุณมีสภาพการแข่งขันเนื่องจากทั้ง x และ y จะพยายาม เปลี่ยนเป็นกันและกันในเวลาเดียวกัน แค่จำสิ่งนี้ไว้และชีวิตก็อาจจะง่ายขึ้นสำหรับคุณ
PGT

@PGT คุณจะคาดหวังว่าค่าของ y จะเป็นอย่างอื่นที่ไม่ใช่ 1 หาก 'y' สามารถเข้าถึงได้ในหลาย ๆ กระบวนการที่ทำงานบนแกนหลักเดียวหรือหลายคอร์ซึ่งสามารถกำหนดสิทธิ์ในกระบวนการที่อ่อนแอกว่า
Adithya

1

คุณสามารถใช้เทคนิคการสังเคราะห์ระดับสูงเช่น Vivado HLS ของ Xilinx และโซลูชัน OpenCL ของ Altera บางทีนี่อาจช่วยลดความโค้งของคุณในการเรียนรู้ภาษาคำอธิบายฮาร์ดแวร์โดยพิจารณาพื้นหลังซอฟต์แวร์ของคุณ


-1

เรียนรู้พื้นฐานการออกแบบดิจิทัลก่อน เครื่อง Mealy / Moore, combinatorial logic, ตารางความจริง, แผนที่ karnaugh และอื่น ๆ เริ่มสร้างการออกแบบที่เรียบง่ายในแผนงาน (ตัวนับ 7 ส่วน) จากนั้นเรียนรู้ HDL ในยุโรป VHDL ถูกใช้ใน US Verilog ในที่สุดการจับเวลาก็เป็นสิ่งสำคัญโปรดทราบว่าสัญญาณมีความล่าช้าซึ่งเป็นองค์ประกอบทันทีและขึ้นอยู่กับอุณหภูมิและสัญญาณทุกสัญญาณมีความล่าช้าอีกครั้ง

จองเพื่ออ่าน: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

ความรู้ด้านไวยากรณ์ภาษาที่สมบูรณ์แบบนั้นใช้สำหรับในภายหลังทำความเข้าใจการออกแบบดิจิทัลและปัญหาก่อน


ในยุโรป VHDL ถูกใช้ใน US Verilog ไม่เป็นความจริงเลย ...
Matt Young

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