อะไรคือความแตกต่างและความคล้ายคลึงกันระหว่าง FPGA, ASIC และไมโครคอนโทรลเลอร์ทั่วไป?


25

ฉันได้อ่านโพสต์นี้และไม่ได้ตอบคำถามของฉันทั้งหมด:

ฉันคิดว่าไมโครคอนโทรลเลอร์เป็นสิ่งที่มีหน่วยความจำลงทะเบียนและสามารถประมวลผลชุดคำสั่งเช่น LOAD, STORE และ ADD มันมีลอจิกประตูและเช่นนั้นเพื่อทำหน้าที่ของมัน แต่หน้าที่หลักของมันคือการเป็นโปรเซสเซอร์สากลของบิต ฉันคิดว่า Microntroller เป็นระบบของการออกแบบ ASIC ที่เชื่อมต่อระหว่างกันเพื่อสร้างความสามารถในการจัดเก็บและประมวลผลคำสั่ง

ฉันคิดว่าอุปกรณ์ ASIC เป็นวงจรที่สร้างขึ้นเป็นพิเศษโดยใช้ส่วนประกอบแบบลอจิคัลและไฟฟ้าเพื่อทำงานชิ้นเดียวโดยไม่มีงานอื่น ๆ

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

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

โพสต์ข้างต้นที่ฉันอ้างถึงยังกล่าวถึง HDL ซึ่งฉันคุ้นเคย ไม่สามารถใช้ HDL สำหรับทั้ง ASIC และ FPGA และโดยพร็อกซีเพื่อออกแบบไมโครคอนโทรลเลอร์ทั้งหมดได้หรือไม่


1
ยังไม่ชัดเจนว่าคำถามของคุณคืออะไร คุณอ่านคำถามที่เกี่ยวข้องกับ FPGA vs ASIC หรือไม่ จริง ๆ แล้ว HDL นั้นใช้ในการออกแบบ ASICs และ FPGA และคุณสามารถออกแบบไมโครคอนโทรลเลอร์ใน HDL
pjc50

3
Altera นำเสนอ ebook ฟรีที่เรียกว่าFPGA สำหรับ Dummiesซึ่งจะอธิบายความแตกต่างระหว่าง FPGAs, ASIC และไมโครคอนโทรลเลอร์ได้เป็นอย่างดี
kkrambo

@kkrambo คุณเรียกฉันว่าหุ่นงั้นเหรอ? :) ขออภัยไม่สามารถต้านทาน ... ฉันจะตรวจสอบออก
user58446

ฉันเพิ่มคำว่า 'ความคล้ายคลึงกัน' ในชื่อคำถามเนื่องจากดูเหมือนว่ามีรายละเอียดศัพท์แสงทางเทคนิคนาทีซึ่งอาจสร้างความสับสนเกี่ยวกับความสัมพันธ์ระหว่างอุปกรณ์ทั้งสาม: ตัวอย่างเช่นอุปกรณ์หนึ่งอาจมีหนึ่งในสองอุปกรณ์อื่นหรืออาจมีจำนวนมาก ส่วนประกอบที่คล้ายกัน แต่แตกต่างกันในบางแง่มุมที่สำคัญ นี่เป็นคำตอบที่มีอยู่แล้วในบางข้อ ขอขอบคุณ.
user58446

คำตอบ:


28

ASIC กับ FPGA

Gate Array ที่ตั้งโปรแกรมได้สามารถมองเห็นได้เป็นขั้นตอนการสร้างต้นแบบของวงจรรวมเฉพาะแอปพลิเคชัน: ASICs มีราคาแพงมากในการผลิตและเมื่อมีการผลิตจะไม่มีการย้อนกลับ (เนื่องจากต้นทุนคงที่แพงที่สุดคือหน้ากาก "] และการพัฒนาของพวกเขา) FPGAs สามารถประมวลผลซ้ำได้หลายครั้งอย่างไรก็ตามเนื่องจากความจริงที่ว่าอาร์เรย์ทั่วไปของประตูเชื่อมต่อเพื่อให้บรรลุเป้าหมายของคุณจึงไม่ได้รับการปรับให้เหมาะสมที่สุดเช่น ASICs นอกจากนี้ FPGA ยังเป็นอุปกรณ์ที่มีการกำเนิดแบบไดนามิกซึ่งหากคุณปิดเครื่องคุณไม่เพียง แต่สูญเสียสถานะปัจจุบัน แต่ยังกำหนดค่าของคุณด้วย ขณะนี้บอร์ดมีอยู่แล้วซึ่งเพิ่มชิป FLASH และ / หรือไมโครคอนโทรลเลอร์เพื่อโหลดการกำหนดค่าเมื่อเริ่มต้นดังนั้นนี่จึงเป็นข้อโต้แย้งที่สำคัญน้อยกว่า ทั้ง ASIC และ FPGA สามารถกำหนดค่าด้วยคำอธิบายฮาร์ดแวร์ภาษา และบางครั้ง FPGA ใช้สำหรับผลิตภัณฑ์สุดท้าย แต่โดยทั่วไปแล้ว ASIC จะเตะเมื่อออกแบบได้รับการแก้ไข

FPGA กับไมโครคอนโทรลเลอร์

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

ตัวอย่างเช่นโดยทั่วไปถ้าคุณเขียนใน pseudocode "ปล่อยให้ C เป็น A XOR B" บน FPGA ที่จะถูกแปลเป็น "สร้างประตู XOR ด้วยอิฐเลโก้ที่มีอยู่ (ตารางการค้นหาและสลัก) และเชื่อมต่อ A / B เป็นอินพุต และ C เป็นเอาต์พุต "ซึ่งจะอัปเดตทุกรอบนาฬิกาไม่ว่าจะใช้ C หรือไม่ก็ตาม ในขณะที่ไมโครคอนโทรลเลอร์ที่จะถูกแปลเป็น "อ่านคำสั่ง - มันเป็น XOR ของตัวแปรที่ที่อยู่ A และที่อยู่ B ของ RAM, ผลการจัดเก็บที่ที่อยู่ C โหลดหน่วยตรรกะคณิตศาสตร์ลงทะเบียนแล้วขอ ALU ทำ XOR แล้ว คัดลอกเอาต์พุตรีจิสเตอร์ที่ address C of RAM " ในด้านของผู้ใช้นั้นทั้งสองคำสั่งนั้นเป็นรหัส 1 บรรทัด ถ้าเราจะทำสิ่งนี้แล้วอย่างอื่นใน HDL เราจะต้องกำหนดสิ่งที่เรียกว่ากระบวนการในการทำลำดับเทียม - แยกจากรหัสขนาน ในขณะที่ไมโครคอนโทรลเลอร์ไม่มีอะไรให้ทำ ในอีกทางหนึ่งเพื่อรับ "parallelism" (จูนเข้าและออกจริง ๆ ) จาก microcontroller คุณจะต้องเล่นปาหี่กับเธรดที่ไม่สำคัญ วิธีการทำงานที่แตกต่างกันวัตถุประสงค์ที่แตกต่าง

สรุป:

ASIC vs FPGA: คงที่, มีราคาแพงกว่าสำหรับผลิตภัณฑ์จำนวนน้อย (ราคาถูกกว่าสำหรับปริมาณมาก) แต่ได้รับการปรับปรุงให้ดีขึ้น

ASIC กับไมโครคอนโทรลเลอร์: แน่นอนว่าเปรียบเทียบเครื่องมือกับค้อน

FPGA กับไมโครคอนโทรลเลอร์: ไม่เหมาะสำหรับการประมวลผลรหัสตามลำดับ แต่สามารถทำงานแบบขนานอย่างแท้จริงได้อย่างง่ายดายเช่นกัน โดยทั่วไปแล้ว FPGA จะถูกตั้งโปรแกรมใน HDL ซึ่งเป็นไมโครคอนโทรลเลอร์ใน C / Assembly

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

การค้นหาอย่างรวดเร็วหลังจากเขียนสิ่งนี้ทำให้ฉัน: ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

FPGA vs Microcontrollers ในฟอรัมนี้


14

FPGA สามารถเป็น "re-wired" ได้โดยการเขียนโปรแกรมใหม่ FPGA โหลดการกำหนดค่าของมันเข้าไปในเซลล์ตรรกะของมันที่กำหนดเมื่อขับเคลื่อน ซึ่งหมายความว่าสามารถตั้งโปรแกรมใหม่โดยไม่มีการเปลี่ยนแปลงฮาร์ดแวร์

ASICs สามารถต่อสายได้อีกครั้งโดยการดัดแปลงมาสก์ photolitographic ที่โรงหล่อซิลิคอน

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


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

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

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


FPGAs มีประโยชน์ในบางแอปพลิเคชันเนื่องจากสามารถใช้โครงสร้างตรรกะในลักษณะที่ MCUs ไม่สามารถทำได้ ตัวอย่างเช่นหากคุณต้องการเพิ่ม X1 + Y1, X2 + Y2, X3 + Y3 และ X4 + Y4 MCU จะต้องดำเนินการแต่ละอย่างตามลำดับ * FPGA สามารถแยก ALU ได้ 4 ตัวในเวลาเดียวกันดังนั้นมันสามารถทำงานแบบเดียวกันได้ภายในหนึ่งในสี่ของเวลา (สมมติว่าอุปกรณ์ทั้งสองนั้นมีสัญญาณนาฬิกาในอัตราเดียวกัน)

นี่คือที่ FPGAs (หรือ ASICs ที่ออกแบบมาสำหรับงานเดียวกัน) สามารถส่องแสงจริงๆในความจริงที่ว่าคุณสามารถทำหลายสิ่งหลายอย่างพร้อมกันซึ่งกระบวนการเดียวสามารถทำตามลำดับเท่านั้น

* (หมายเหตุ: ฉันไม่สนใจบางสิ่งเช่น SIMD ที่นี่)


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

ขอขอบคุณ. ใกล้จะกลายเป็นคำตอบแล้ว ... แม้ว่า 10 เดือนต่อมา +1 เพื่อสร้างกระสุน
user58446

6

นี่เป็นคำถามที่ดี

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

คุณอาจคิดว่าตัวควบคุมขนาดเล็กสามารถทำสิ่งต่าง ๆ ได้หลายอย่าง แต่ทั้งหมดนี้ทำได้โดยการรันโปรแกรมที่แตกต่างกัน - ในทางเทคนิคซอฟต์แวร์ แต่บางครั้งเรียกว่าเฟิร์มแวร์ - ฮาร์ดแวร์เองไม่ได้เปลี่ยนเป็นหลัก ลำดับที่แตกต่างกับอินพุตที่แตกต่างกัน

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

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

ทั้ง ASICs และ FPGAs สามารถมีไมโครคอนโทรลเลอร์และถ้าคุณสามารถเขียนโปรแกรมสำหรับพวกเขาเช่นเดียวกับไมโครคอนโทรลเลอร์สแตนด์อะโลนตัวอย่างของสิ่งนี้คือโปรเซสเซอร์ NIOS II ฝังตัวของ Altera

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

ยิปซี


3

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

ASIC หลุดออกจากสายการผลิตที่กำหนดค่าไว้แล้ว

ข้อผิดพลาด FPGA สามารถแก้ไขได้ด้วยการอัพเกรดเฟิร์มแวร์ข้อผิดพลาด ASIC ไม่สามารถซ่อมแซมได้อย่างประหยัด


2

แม้จะมีชื่อ FGPA ก็รู้สึกว่าเป็น "applcation-specific มาก" เนื่องจากต้องทำการเดินสายใหม่เพื่อทำงานใหม่และแตกต่างกัน

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

ถึงแม้ว่าในกรณีของการเดินสายไฟใหม่ FPGA ควรมีฮาร์ดแวร์ที่จำเป็นทั้งหมด

ไม่แน่ใจว่าสิ่งนี้หมายถึงอะไร มักจะมีส่วนต่อประสานซอฟต์แวร์สำหรับการเขียนโปรแกรม FPGA ซ้ำอีกครั้ง มันเป็น ASIC ที่ต้องใช้ [หน่วยสกุลเงิน] ของฮาร์ดแวร์

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

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

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