จะเกิดอะไรขึ้นเมื่อ FPGA ถูก“ ตั้งโปรแกรม”?


13

จากสิ่งที่ฉันเข้าใจกระบวนการของการเขียนโปรแกรม FPGA มีสองส่วนด้วยกัน:

  1. เข้ารหัสคำอธิบายฮาร์ดแวร์เป็นบิตที่ FPGA สามารถเข้าใจได้ (เช่นเขียน HDL บางส่วนและคอมไพล์แล้ว)
  2. โหลด HDL ที่คอมไพล์แล้วลงใน FPGA

คำถามของฉันคือ: "FPGA ทำอะไรกับ HDL ที่คอมไพล์แล้ว" ในตอนนี้ฉันคิดว่า FPGAs เป็น "ฮาร์ดแวร์ mouldable" ซึ่งสามารถเชื่อมต่อสายไฟและประตูตรรกะกับสิ่งที่คุณต้องการ หนึ่งในสิ่งที่ดีคือความสามารถในการขึ้นรูปเป็นแบบถาวร: FPGA สามารถทำการ reprogrammed ได้

FPGAs ตีความ HDL ที่คอมไพล์แล้วอย่างไร การขึ้นรูปถาวรทำได้อย่างไร


4
จริง ๆ แล้วมันไม่ได้ถาวร - FPGA บิตสตรีมจะต้องโหลดใหม่จาก EEPROM ทุกครั้งที่มีการใช้พลังงาน CPLDs ไม่มีปัญหานี้และ FPGA บางตัวมี EEPROM ในตัวที่โหลดบิตสตรีมทุกครั้งที่เพิ่มพลัง
AngryEE

2
ฉันคิดว่าเขาหมายถึง "ความสามารถในการขึ้นรูปถาวร" นั่นคือโปรแกรมนั้นไม่ถาวร
ajs410

คำตอบ:


23

ตัดสินโดยคำถามอื่นของคุณคุณเป็นคน Xilinx ดังนั้นฉันขอแนะนำให้รับแผ่นข้อมูลสำหรับชิป Xilinx ของคุณและไปที่บทคำอธิบายการใช้งาน สำหรับชิป Spartan 3 ที่ฉันใช้มันเป็น 42 หน้าของการอ่านสนุก มันมีรายละเอียดที่แน่นอนว่าส่วนประกอบอยู่ใน FPGA - IOBs, CLBs, ชิ้น, LUTs, Block RAM, ตัวคูณ, ตัวจัดการนาฬิกาดิจิตอล, เครือข่ายนาฬิกา, การเชื่อมต่อและข้อมูลการกำหนดค่าพื้นฐานบางอย่าง คุณต้องเข้าใจข้อมูลนี้หากคุณต้องการรู้ว่า "คอมไพล์ HDL" มีหน้าตาเป็นอย่างไร

เมื่อคุณคุ้นเคยกับสถาปัตยกรรมของ FPGA แล้วคุณสามารถเข้าใจกระบวนการนี้ ก่อนอื่นการออกแบบ HDL ของคุณนั้นทำงานผ่านเครื่องมือสังเคราะห์ซึ่งทำให้ HDL ของคุณกลายเป็น RTL โดยทั่วไป จากนั้น Mapper จะประมวลผลผลลัพธ์จากการสังเคราะห์ "ทำการแมป" ลงบนชิ้นส่วนของสถาปัตยกรรม FPGA จากนั้นเราเตอร์จะวางตำแหน่งและเส้นทาง (PAR) ซึ่งจะระบุตำแหน่งที่ชิ้นส่วนเหล่านั้นไปและวิธีการเชื่อมต่อ ท้ายที่สุดผลลัพธ์จาก PAR จะถูกเปลี่ยนเป็นไฟล์ BIT โดยทั่วไปแล้วไฟล์ BIT นี้จะถูกแปลงในบางวิธีเพื่อให้สามารถโหลดลงในชิปแฟลชเพื่อให้ FPGA สามารถโปรแกรมได้โดยอัตโนมัติเมื่อเปิดเครื่อง

ไฟล์บิตนี้อธิบายโปรแกรม FPGA ทั้งหมด ตัวอย่างเช่น CLBs ใน Spartan 3 ประกอบด้วยชิ้นซึ่งประกอบด้วย LUT ซึ่งเป็นเพียง SRAM 16 บิต 1 บิต ดังนั้นสิ่งหนึ่งที่ไฟล์ BIT จะมีคือข้อมูลที่ตรงเข้าไปในแต่ละที่อยู่ของ SRAM อีกสิ่งหนึ่งที่ไฟล์ BIT บรรจุคือแต่ละอินพุตของ LUT นั้นเชื่อมต่อกับเมทริกซ์การเชื่อมต่ออย่างไร ไฟล์ BIT จะมีค่าเริ่มต้นที่เข้าไปใน block RAM มันจะอธิบายสิ่งที่เชื่อมต่อกับชุดที่กำหนดและรีเซ็ตพินของแต่ละฟล็อปฟล็อปในแต่ละชิ้น มันจะอธิบายวิธีการเชื่อมโยงห่วงโซ่การดำเนินการเชื่อมต่อ มันจะอธิบายถึงอินเตอร์เฟสตรรกะสำหรับแต่ละ IOB (LVTTL, LVCMOS, LVDS, ฯลฯ ) มันจะอธิบายตัวต้านทานแบบ pull-up หรือ pull-down ใด ๆ ในตัว โดยทั่วไปทุกอย่าง

สำหรับ Xilinx หน่วยความจำของ FPGA จะถูกล้างเมื่อเริ่มต้นการกำหนดค่า (เช่น PROG_B ถูกยืนยัน) เมื่อหน่วยความจำชัดเจน INIT_B จะสูงเพื่อระบุว่าเฟสเสร็จสมบูรณ์ จากนั้นไฟล์ BIT จะถูกโหลดผ่าน JTAG หรืออินเตอร์เฟสแฟลชชิป เมื่อโหลดโปรแกรมแล้ว Global Set / Reset (GSR) จะกะพริบการรีเซ็ต flops พลิกทั้งหมดกลับสู่สถานะเริ่มต้น จากนั้นขา DONE จะสูงเพื่อระบุว่าการกำหนดค่าเสร็จสมบูรณ์ รอบหนึ่งนาฬิกาในเวลาต่อมาสัญญาณ Global Three-State (GTS) จะถูกปล่อยออกมาเพื่อให้สามารถขับเคลื่อนเอาต์พุตได้ หนึ่งรอบนาฬิกาในเวลาต่อมาการเปิดใช้งานการเขียนทั่วโลก (GWE) จะช่วยให้ฟลิปฟล็อปสามารถเริ่มเปลี่ยนสถานะเพื่อตอบสนองต่ออินพุต โปรดทราบว่าแม้กระบวนการกำหนดค่าสุดท้ายนี้สามารถจัดลำดับใหม่ได้เล็กน้อยขึ้นอยู่กับแฟล็กที่ตั้งค่าในไฟล์ BIT

แก้ไข:

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


6

การรวบรวมผลลัพธ์ HDL ในรูปแบบบิตซึ่งระบุว่าการเชื่อมต่อภายใน FPGA ใดที่ควรเปิดใช้งาน FPGA ไม่จำเป็นต้องตีความ HDL อีกต่อไป รูปแบบบิตถูกตั้งโปรแกรมไว้ในแฟลชโหลดเดอร์อนุกรม / EEPROM และเมื่อทำการบูตรูปแบบนี้จะถูกเปลี่ยนเป็น FPGA เพื่อทำการเชื่อมต่อที่จำเป็น


1
การสังเคราะห์หมายถึงสามวลี 1. การสร้างรายการ 2. การเพิ่มประสิทธิภาพระดับประตู 3. การแมปเทคโนโลยี
มาตรฐาน Sandun

4

ผลลัพธ์ของการคอมไพล์เป็นบิตสตรีม (แท้จริงเป็นสตรีมของบิต) ซึ่งโหลดหลังจากเปิดเครื่อง สิ่งนี้จะเลื่อนผ่าน FPGA ที่จัดเก็บไว้ในเซลล์หน่วยความจำบางส่วน (สลัก) เซลล์เหล่านี้เชื่อมต่อกับเอนทิตีลอจิกต่างๆ, มัลติเพล็กเซอร์, ตารางการค้นหา, บล็อก RAM, เมทริกซ์การกำหนดเส้นทางและประกอบด้วยสิ่งที่เรียกว่า "การกำหนดค่า" เมื่อโหลดบิตสตรีม FPGA จะเริ่มทำงาน - บิตในสลัก - กำหนดค่า "บอก" แต่ละชิ้นเล็ก ๆ ของ FPGA วิธีการใช้งาน

แก้ไข 24 เมษายน 2012: flip-flop ที่ฉันพูดถึงไม่ได้มีไว้สำหรับตารางค้นหาหรือการกำหนดค่าของพวกเขา ในฐานะที่เป็น @ ajs410 กล่าวว่าพวกเขาอยู่ใน RAM ซึ่งเป็นทรานซิสเตอร์น้อยลง flip-flop ใช้สำหรับการจัดเก็บข้อมูลออกจาก LUT หากเปิดใช้งานที่เก็บข้อมูล


วงจรใน FPGA ทั่วไปนั้นมีตรรกะและการกำหนดเส้นทางเท่าไรและสนับสนุนการเขียนโปรแกรมเป็นจำนวนเท่าใด
supercat

ในทางเทคนิค "เซลล์หน่วยความจำ" เป็น flip-flop ไม่ใช่สลัก เช่นพวกเขาถูกเรียกขอบ
Brian Carlton

@BrianCarlton: ใช้ flip flops จริงๆสำหรับเซลล์ที่เก็บโปรแกรมทั้งหมดหรือไม่ จากความเข้าใจของฉันรองเท้าแตะต้องการบางสิ่งบางอย่างตามคำสั่งของ 12-16 MOSFET ต่อบิต ในทางตรงกันข้ามเทคนิคครบวงจรอื่น ๆ สำหรับการล็อคข้อมูลต้องการเพียง 5-8 เท่านั้น
supercat

1
โดยทั่วไปแล้ว LUT จะทำจาก SRAM รองเท้าแตะติดกับเอาท์พุทของ SRAM
ajs410

1
@supercat: ฉันได้ยินมาว่า 90% ของ FPGA กำลังกำหนดเส้นทาง ... ส่วนที่เหลือเป็นตรรกะและการกำหนดค่า - ไม่สามารถหาข้อมูลอ้างอิงได้อย่างรวดเร็วแม้ว่า :(
Martin Thompson

1

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

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

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