FPGA's vs Microcontrollers [ปิด]


36

ฉันทำงานเกี่ยวกับตระกูล Arduino (โดยเฉพาะ Sanguino) สร้างอุปกรณ์ง่าย ๆ สองสามอย่างและโฟโตรแบบเรียบง่าย ฉันรู้สึกสะดวกสบายกับไมโครคอนโทรลเลอร์ - โดยเฉพาะของ Atmel ฉันอยากรู้ว่า FPGA แตกต่างจากไมโครคอนโทรลเลอร์มาตรฐานอย่างไร ฉันมาจากพื้นหลังทางเทคนิค (การเขียนโปรแกรม C / C ++) และดังนั้นจะรักคำตอบทางเทคนิค เพียงจำไว้ว่าฉันเป็นมือใหม่ (เทียบกับประสบการณ์ s / ​​w ของฉัน) ในโดเมนอิเล็กทรอนิกส์ :)

ฉันทำตามคำถามนี้และมันก็ดี แต่ฉันกำลังมองหารายละเอียดเพิ่มเติม

ขอบคุณ! Sushrut


ภาคผนวก - มีตัวอย่างที่ดีในโลกแห่งความจริงที่ใช้สถาปัตยกรรมไฮบริดนั่นคือการรวม fpga กับไมโครคอนโทรลเลอร์
Sushrut J Mair

Sushrut J Mair - โดยทั่วไปเมื่อคุณมี FPGA และต้องการ Micro, micro จะถูกนำไปใช้ใน FPGA
Connor Wolf

ใช่ชื่อปลอมตกลง อย่างไรก็ตามฉันกำลังมองหากรณีในโลกแห่งความจริงที่ทั้ง FPGA และ MCU ใช้ในการออกแบบระบบ แนวคิดที่ว่าส่วนของ FPGA ของการออกแบบนั้นถูกใช้เพื่อนำ 'evolvable' h / w ที่ตอบสนองและ morphs ตามการเปลี่ยนอินพุตไปยังระบบในขณะที่การประมวลผลแบบลอจิคัลหลักทำโดย MCU
Sushrut J Mair

คำตอบ:


48

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

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

FPGA เน้นวิธีการดำเนินการแบบขนานมากขึ้น บางครั้งคุณต้องกังวลว่า ISR ของ MCU ของคุณใช้เวลานานแค่ไหนในการให้บริการการขัดจังหวะและไม่ว่าคุณจะสามารถบรรลุข้อ จำกัด ตามเวลาจริงหรือไม่ อย่างไรก็ตามใน FPGA นั้นมี Finite State Machines (FSM) จำนวนมากที่ทำงานอยู่ตลอดเวลา พวกมันเหมือนกับ "femto-controllers" เหมือนกลุ่มเมฆควบคุม พวกเขากำลังทำงานพร้อมกันดังนั้นจึงไม่ต้องกังวลว่าจะพลาดการขัดจังหวะ คุณอาจมี FSM เพื่อเชื่อมต่อกับ ADC, อีก FSM เพื่อเชื่อมต่อไปยังที่อยู่ของไมโครคอนโทรลเลอร์ / บัสข้อมูล, FSM อื่นเพื่อสตรีมข้อมูลไปยังตัวแปลงสัญญาณสเตอริโอ แต่ FSM อีกตัวเพื่อบัฟเฟอร์ dataflow จาก ADC ไปยังตัวแปลงสัญญาณ ... จำเป็นต้องใช้โปรแกรมจำลองเพื่อให้แน่ใจว่า FSM ทั้งหมดร้องประสานกัน

FPGAs เป็นความฝันอันเปียกชื้นของนักออกแบบเค้าโครง PCB สามารถกำหนดค่าได้อย่างมาก คุณสามารถมีอินเตอร์เฟสตรรกะที่แตกต่างกันมากมาย (LVTTL, LVCMOS, LVDS, ฯลฯ ) ของแรงดันไฟฟ้าที่แตกต่างกันและแม้กระทั่งความแข็งแกร่งของไดรฟ์ (ดังนั้นคุณจึงไม่จำเป็นต้องมีตัวต้านทานการเลิกจ้างซีรีส์) หมุดสามารถถอดเปลี่ยนได้ คุณเคยเห็นที่อยู่รถบัส MCU ที่หมุดกระจายอยู่รอบ ๆ ชิป? ผู้ออกแบบ PCB ของคุณอาจต้องวางจุดต่าง ๆ เพื่อผูกสัญญาณทั้งหมดเข้าด้วยกันอย่างถูกต้อง ด้วย FPGA ผู้ออกแบบ PCB จะสามารถส่งสัญญาณไปยังชิปในลำดับใดก็ได้ที่สะดวกและจากนั้นการออกแบบนั้นสามารถใส่หมายเหตุประกอบกลับไปยังห่วงโซ่เครื่องมือ FPGA

FPGA ยังมีของเล่นแฟนซีสวย ๆ มากมาย หนึ่งในรายการโปรดของฉันคือ Digital Clock Manager ในชิป Xilinx คุณป้อนสัญญาณนาฬิกาหนึ่งสัญญาณและสามารถรับสัญญาณได้อีกสี่สัญญาณโดยใช้ตัวคูณความถี่และตัวแบ่งความถี่หลากหลายซึ่งทั้งหมดมีรอบการทำงาน 50% ที่บริสุทธิ์และ 100% ในเฟส ... และยังสามารถคิดนาฬิกาที่เอียง เกิดขึ้นจากการขยายพันธุ์ล่าช้าไปยังชิปภายนอก!

แก้ไข (ตอบกลับสู่ภาคผนวก):

คุณสามารถวาง "แกนนุ่ม" ลงใน FPGA คุณกำลังเชื่อมต่อวงจรไมโครคอนโทรลเลอร์เข้าด้วยกันหรือคุณอาจทิ้งวงจรของคนอื่นลงในการออกแบบของคุณเช่น PicoBlaze ของ Xilinx หรือ MicroBlaze หรือ Nios ของ Altera แต่เช่นเดียวกับคอมไพเลอร์ C-> VHDL แกนเหล่านี้มีแนวโน้มที่จะบวมเล็กน้อยและช้าเมื่อเทียบกับการใช้ FSM และ datapath หรือไมโครคอนโทรลเลอร์ตัวจริง เครื่องมือในการพัฒนาสามารถเพิ่มความซับซ้อนที่สำคัญให้กับกระบวนการออกแบบซึ่งอาจเป็นสิ่งที่ไม่ดีเมื่อ FPGA เป็นชิปที่ซับซ้อนมากอยู่แล้ว

นอกจากนี้ยังมี FPGA บางตัวที่มี "คอร์ฮาร์ด" ฝังอยู่ในนั้นเช่นซีรีย์ Xirtx ของ Virtex4 ที่มีไอบีเอ็ม PowerPC ของแท้ที่ทุ่มเทกับผ้า FPGA รอบตัว

EDIT2 (ตอบกลับความคิดเห็น):

ฉันคิดว่าฉันเห็นตอนนี้ ... คุณกำลังถามเกี่ยวกับการเชื่อมต่อ MCU ไม่ต่อเนื่องกับ FPGA; นั่นคือสองชิปที่แยกจากกัน มีเหตุผลที่ดีในการทำเช่นนี้; FPGA ที่มีแกนแข็งและขนาดใหญ่พอที่จะรองรับแกนนุ่มที่เหมาะสมมักจะเป็นสัตว์ประหลาดที่มีหมุดหลายร้อยที่ต้องใช้แพคเกจ BGA ซึ่งเพิ่มความยากในการออกแบบ PCB ได้อย่างง่ายดายโดยปัจจัย 10

อย่างไรก็ตาม C นั้นง่ายกว่ามากดังนั้น MCUs ต้องทำงานร่วมกับ FPGA อย่างแน่นอน เนื่องจากง่ายต่อการเขียน C คุณอาจเขียน "สมอง" หรืออัลกอริธึมกลางใน MCU ในขณะที่ FPGA สามารถใช้อัลกอริทึมย่อยที่อาจต้องเร่งความเร็ว ลองใส่สิ่งต่าง ๆ ที่เปลี่ยนเป็นรหัส C เพราะง่ายต่อการเปลี่ยนแปลงและปล่อยให้ FPGA เป็นประเภทเฉพาะที่ไม่เปลี่ยนแปลงบ่อยนัก

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

วิธีที่ดีที่สุดในการเชื่อมต่อคือการใช้ MCU พร้อมที่อยู่ภายนอกและบัสข้อมูล จากนั้นคุณสามารถแมปหน่วยความจำวงจร FPGA ใน MCU และเพิ่ม "รีจิสเตอร์" ของคุณเองที่แต่ละอันมีที่อยู่ของตัวเอง ตอนนี้ FPGA สามารถเพิ่มอุปกรณ์ต่อพ่วงที่กำหนดเองได้เช่นตัวจับเวลาแบบ 32 บิตที่สามารถสลักได้ทั้ง 4 ไบต์ในครั้งเดียวเมื่ออ่านไบต์แรกเพื่อป้องกันการโอเวอร์โฟลว์ระหว่างการอ่านแบบ 8 บิต นอกจากนี้คุณยังสามารถใช้เป็นกาวตรรกะในการแมปหน่วยความจำเพิ่มเติมอุปกรณ์ต่อพ่วงจากชิปอื่น ๆ เช่น ADC แยก

ในที่สุด MCUs บางตัวได้รับการออกแบบมาเพื่อใช้กับ "ต้นแบบภายนอก" เช่น FPGA Cypress สร้าง MCU USB สองสามตัวที่มีภายใน 8051 แต่จุดประสงค์ก็เพื่อให้ข้อมูล USB ที่จะผลิต / บริโภคโดยเช่น FPGA


นี่เป็นข้อมูลที่ดีขอบคุณ ฉันเคยได้ยินคอมไพเลอร์ C / C ++ ถึง HDL คุณลองพวกเขาทั้งหมดหรือไม่
Sushrut J Mair

พวกเขากำลัง ... โอเค สำหรับบล็อกตรรกะเดียวมันไม่เลวร้ายเกินไป แต่ฉันจะไม่เขียนการออกแบบทั้งหมดผ่านคอมไพเลอร์ชนิดนั้น มันไม่ได้มีประสิทธิภาพมากนักเพราะภาษาต่างกันอย่างเหลือเชื่อ ... คุณต้องใช้การประชุมพิเศษพวกเขาไม่เพียงแค่ใช้รหัส ANSI C อันเก่า
ajs410

ขอบคุณสิ่งนี้มีประโยชน์ ฉันสั่งชุด Dev2B Brevia dev ของ Lattice Semiconductor ฉันตั้งใจจะลองคอมไพเลอร์ HDL ถึง C เมื่อฉันพอใจกับแนวคิดการออกแบบ FPGA ขั้นพื้นฐาน
Sushrut J Mair

เพิ่งเห็นคำตอบสำหรับภาคผนวกของฉันในแบบสอบถามต้นฉบับ ขอบคุณ - คุณกำลังพูดว่าการพูดจริง (อย่างน้อยด้วยเทคโนโลยีของวันนี้), สถาปัตยกรรมไฮบริดของ MCU มาตรฐาน + FPGA มีค่าน้อยมากที่จะใช้งานได้จริงในสถานการณ์จริงหรือไม่?
Sushrut J Mair

น่ากลัว ขอบคุณ ajs410 ฉันหวังว่าจะใช้เวลาสองสามสัปดาห์ในการบู๊ตตัวเองให้เป็น fpga ก่อนที่จะเข้าสู่ไฮบริดที่น่าตื่นเต้น
Sushrut J Mair

10

"ตัวอย่างในโลกแห่งความเป็นจริง ... การรวม FPGA กับไมโครคอนโทรลเลอร์?"

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

  • กล้อง Elphel ; Elphel Project Wikiมี Xilinx (R) Spartan 3e 1200K เกตส์ FPGA และโปรเซสเซอร์ ETRAX FS ที่ใช้ GNU / Linux
  • TS-7500มี 5000 LUT Lattice FPGA และ CPU 250MHz Cavium ARM9 ที่สามารถเรียกใช้ลินุกซ์
  • คณะกรรมการบอลลูนมี Xilinx Spartan FPGA และซีพียู ARM
  • SBCs Teeny weeny Linuxหลายตัวรวมทั้ง FPGA และ CPU
  • วิกิพีเดีย Armadeus โครงการเอกสารคณะกรรมการไม่กี่โต๊ะที่มีทั้ง Xilinx Spartan-3 FPGA และ CPU 400 MHz ARM9
  • Blackfin Handy คณะกรรมการมีทั้ง Xilinx Spartan 3e FPGA และหน่วยประมวลผล 600 MHz อุปกรณ์ Analog Blackfin® ADSP-BF537 (มันไม่มี MMU ดังนั้นจึงไม่สามารถใช้งาน Linux ได้เต็มรูปแบบ แต่สามารถเรียกใช้ uClinux ได้)
  • "Minimig" (มินิเอมิ)รวมถึง Xilinx Spartan-3 FPGA เป็น M68000 CPU และขนาดเล็ก PIC MCU ที่ทำหน้าที่ควบคุมดิสก์

4

บ่อยครั้งที่ FPGA ใช้เพื่อทำภารกิจโดยเฉพาะอย่างยิ่งไมโครคอนโทรลเลอร์ไม่สามารถทำงานได้อย่างมีประสิทธิภาพเช่นการดำเนินการแฝงที่ขนานหรือต่ำการทำงานในโดเมนนาฬิกาหลายแห่งหรือใช้ตรรกะที่กำหนดเองที่ความเร็วของฮาร์ดแวร์ เช่นนี้พวกเขาจะทำการยกของหนักและคุณไม่ค่อยต้องการ MCU เป็นศูนย์กลางในการออกแบบ - พวกเขาอาจถูกย้ายไปยังตำแหน่งการจัดการเช่นการโหลดบิตสตรีมการกำหนดค่า ตัวอย่างของสิ่งนี้คือ PIC หรือ ARM ในMinimigซึ่งใช้อินเตอร์เฟสหน่วยเก็บข้อมูล

อย่างไรก็ตามมีผลิตภัณฑ์เพียงเล็กน้อยที่ทำให้เส้นพร่ามัว ตัวอย่างบางส่วน:

  1. FPGA ที่มีขนาดใหญ่ขึ้นนั้นมีซีพียูในตัวยาก (โครงการขนาดใหญ่มักต้องการมัน แต่อย่างใด) เช่นเดียวกับ RAM และตัวคูณบล็อก
  2. ไมโครคอนโทรลเลอร์บางตัวตั้งเป้าที่การทำงานแบบขนาน (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller)
  3. ชิปบางตัวได้รับการออกแบบให้เป็นลูกผสม (Cypress PSoC, Atmel FPSLIC)

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


1

ไม่มีความแตกต่างระหว่าง MCU เช่น AVR จริง ๆ และอีกหนึ่งโปรแกรมที่ตั้งไว้ใน FPGA ไซต์ OpenCores มีรหัส VHDL สำหรับ AVRที่สามารถใช้ใน FPGA คุณสามารถศึกษาและดูว่ามันทำงานอย่างไรและลองด้วยตัวคุณเองในแบบจำลองโดยไม่ต้องซื้อบอร์ด FPGA ที่เหมาะสม


1
บ่อยครั้งที่ฉันพบว่า FPGA ต้องทำงานด้วยความเร็วสัญญาณนาฬิกาที่ช้าลงสำหรับ MCU เดียวกันหรืออาจมีราคาแพงกว่าอย่างมาก ในกรณีที่มีราคาแพงกว่าคุณสามารถใช้ฮาร์ดแวร์เพิ่มเติมระหว่างคอนโทรลเลอร์และหมุดภายนอกได้ง่ายซึ่งมักจะคุ้มค่า
Kortuk

หากจำเป็นต้องมี FPGA ในระบบอย่างไรก็ตาม MCU เป็น "ฟรี"
Leon Heller

1

Microcontrollers เป็นวงจรดิจิตอลที่ดำเนินการคำสั่งจากหน่วยความจำของโปรแกรมตามลำดับคำสั่งหนึ่งหลังจากนั้นอีกวงจรฮาร์ดแวร์ดิจิตอลของไมโครคอนโทรลเลอร์ได้รับการแก้ไขและการเชื่อมต่อระหว่างประตูต่าง ๆ ที่ประกอบด้วยวงจรดิจิตอลจะถาวรและฝังอยู่ในซิลิคอน ที่เป็น FPGAs สามารถคิดเป็นสระว่ายน้ำของประตูดิจิตอล (ในความเป็นจริงแม้ว่าจะมีอยู่แทน luts) ซึ่งมีการเชื่อมต่อที่ตั้งโปรแกรมได้ ตอนนี้วงจรดิจิตอลใด ๆ (แม้แต่ไมโครคอนโทรลเลอร์) สามารถสร้างบน fpga ได้โดยการเขียนโปรแกรมการเชื่อมต่อระหว่างกัน

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