โดยพื้นฐานแล้วไม่มีไมโครคอนโทรลเลอร์แม้แต่ราสเบอร์รี่ปี่ก็เร็วพอ ราสเบอร์รี่ pi มี GPU ออนบอร์ดที่สร้างเอาต์พุต HDMI และนอกเหนือจากนั้นความสามารถของ I / O ของราสเบอร์รี่ pi นั้นมี จำกัด อย่างไม่น่าเชื่อ - อินเตอร์เฟสแบนด์วิธที่สูงที่สุดนอกเหนือจาก HDMI คือ USB โครงการแปลง HDMI หลายโครงการเกี่ยวข้องกับการรับสตรีมวิดีโออื่นในรูปแบบแปลก ๆ และการทำงานซ้ำซึ่งเป็นสิ่งที่สามารถส่งไปยัง HDTV มาตรฐานผ่าน HDMI ต้องใช้ตรรกะการเชื่อมต่อแบบกำหนดเองเพื่ออ่านในสัญญาณวิดีโอประมวลสัญญาณสัญญาณเพื่อทำการฟอร์แมทตรรกะการเข้ารหัส HDMI TMDS จากนั้นตัวเรียงลำดับความเร็วสูงเพื่อขับเคลื่อนพอร์ต HDMI
การทำงานกับสตรีมมิ่งวิดีโอที่ไม่มีการบีบอัดและมีความคมชัดสูงนั้นต้องการการประมวลผลข้อมูลจำนวนมากซึ่งเป็นสิ่งที่ไม่สามารถทำได้บน CPU ที่ใช้งานทั่วไป สัญญาณวิดีโอ 1080p ที่ 30 เฟรมต่อวินาทีมีประมาณ 62 ล้านพิกเซลต่อวินาที ราสเบอร์รี่ pi ทำงานที่ 700 MHz ดังนั้นคุณมี 11 คำแนะนำต่อพิกเซล และนั่นคือ 11 คำแนะนำในการอ่านในรูปแบบวิดีโอคี่บอลแบบเรียลไทม์, ขายต่อเป็นต้น ระยะเวลา
ใน FPGA เป็นไปได้ที่จะสร้างขั้นตอนการประมวลผลที่ยาวซึ่งสามารถประมวลผลหนึ่งพิกเซลหรือมากกว่าต่อรอบสัญญาณนาฬิกาและทำได้ในลักษณะที่กำหนดไว้สูง (ไม่มีการขัดจังหวะหรือการสลับงาน!) เพื่อให้ข้อมูลพิกเซลพร้อมสำหรับการส่งผ่าน HDMI ในเวลาที่เหมาะสม หากคุณทำงานอย่างกว้างขวางกับซีพียูที่ใช้งานทั่วไปที่ใช้ระบบปฏิบัติการใด ๆ คุณจะรู้ว่าการกำหนดเวลาที่แม่นยำในระดับ milisecond นั้นทำได้ไม่มากก็น้อย แต่ในระดับไมโครวินาทีนั้นเป็นไปไม่ได้เลยทีเดียว สำหรับ HDMI คุณต้องมีความแม่นยำระดับนาโนวินาที ไม่สามารถทำได้บน CPU วัตถุประสงค์ทั่วไป นอกจากนี้ให้ดูที่โครงการเสียง / วิดีโอ HDMI สำหรับ neo geo อันนี้ไม่เพียง แต่จะ rescale วิดีโอมันยังต้อง resample เสียงและใส่ลงในสตรีมวิดีโอ HDMI
และสิ่งนี้ยังไม่ได้พิจารณาถึงตรรกะที่กำหนดเองที่จำเป็นในการอ่านในรูปแบบข้อมูลอินพุตใด ๆ ที่คุณมี คุณจะต้องใช้ฮาร์ดแวร์ที่กำหนดเองเพื่อตีความสิ่งนี้ ซอฟต์แวร์ไม่เร็วพอหรือไม่เพียงพอ คุณอาจจะสามารถจัดรูปแบบใหม่ให้เป็นสตรีมแบบ USB ได้ แต่จะต้องใช้ตรรกะดิจิทัลแบบกำหนดเองอยู่แล้วดังนั้นคุณก็แค่ส่งสัญญาณออก HDMI โดยตรง
ในการดำเนินการทั้งหมดนี้ตรรกะดิจิทัลเป็นทางออกที่เป็นไปได้เท่านั้น และถ้าคุณกำลังทำตรรกะดิจิตอล FPGAs เป็นทางออกที่เป็นไปได้เพียงอย่างเดียวเนื่องจากมันเร็วเกินไปและซับซ้อนเกินไปสำหรับตรรกะ 7400 ที่ไม่ต่อเนื่องและ ASIC นั้นดีคำสั่งขนาดใหญ่หลายคำมีราคาแพงกว่า
ส่วนประกอบที่จำเป็นอีกอย่างหนึ่งคือตัวเรียงลำดับความเร็วสูงที่เกิดขึ้นจริงและไดร์เวอร์ที่แตกต่างกันเพื่อสร้างสตรีมข้อมูลอนุกรมแบบขนาน เป็นไปไม่ได้ที่จะส่งข้อมูลแบบบิตบิตในลำดับกิกะบิตต่อวินาทีจาก CPU ที่ใช้งานทั่วไปสิ่งนี้ต้องใช้ฮาร์ดแวร์เฉพาะ ราสเบอร์รี่ pi มี GPU ออนบอร์ดที่ทำสิ่งนี้ แต่มีข้อ จำกัด ในแง่ของความสามารถของ GPU ไม่ต้องพูดถึงสิ่งที่บันทึกไว้ FPGA ส่วนใหญ่จะมีไดร์เวอร์ดิฟเฟอเรนเชียลที่จำเป็นและฟลิปฟล็อป DDR ที่เพียงพอที่จะรองรับวิดีโอความละเอียดต่ำและมี FPGAs ไม่กี่ตัวที่มีซีเรียลไลเซอร์ที่จำเป็น (เช่น Xilinx OSERDES block) อย่าลืมว่าสตรีมอนุกรมไม่ใช่ 'เบสแบนด์' เหมือนพอร์ตอนุกรมปกติที่ข้อมูลจริงถูกส่งด้วยคำต่อคำมีข้อมูลกรอบบางส่วน แต่ข้อมูลนั้นถูกเข้ารหัสด้วย TMDS (การส่งสัญญาณที่แตกต่างกันลดทรานส์) เพื่อให้สัญญาณคุณสมบัติทางไฟฟ้าบางอย่าง ต้องใช้ตรรกะเล็กน้อยในการดำเนินการนี้นอกเหนือจาก serializers ความเร็วสูงที่เกิดขึ้นจริง ทั้งหมดนี้ค่อนข้างง่ายที่จะทำในลอจิกดิจิตอลบริสุทธิ์ (เช่นกันการเข้ารหัสต่อไป - serialzers เป็นอะนาล็อกเนื้อหาหรือสัญญาณผสมอย่างน้อย) ทั้ง ASIC หรือ FPGA
จริงๆแล้วมันเป็นส่วนสำคัญของกระบวนการออกแบบระบบดิจิตอล / ฝังตัวโดยรวมเพื่อให้ทราบว่าส่วนใดของระบบที่สามารถนำไปใช้ในซอฟต์แวร์และสิ่งใดที่ต้องใช้ฮาร์ดแวร์ไม่ว่าจะเป็นในรูปแบบของชิปพิเศษ FPGAs แบบกำหนดเอง ASICs, IP ที่แข็งหรืออ่อน (HDL, netlists, GDSII) ฯลฯ ในกรณีนี้มันชัดเจน: การสร้างสัญญาณวิดีโอต้องใช้ฮาร์ดแวร์พิเศษไม่ว่าจะเป็น GPU ที่จับคู่กับ CPU ที่ใช้งานทั่วไป, FPGA ที่มีฮาร์ดหรือ soft CPU core หรือจับคู่กับ CPU ภายนอกหรือบางสิ่งที่พิเศษกว่า
แก้ไข: ฉันเพิ่งรู้ว่าเว็บไซต์ fpga4fun และโครงการวิดีโอ neo geo ทำงานที่ 640x480 แทนที่จะเป็น full HD อย่างไรก็ตามนี่ไม่ได้ทำให้สิ่งนี้เกิดขึ้นจริงในขณะที่การทำงานง่ายขึ้นมาก นาฬิกาพิกเซลขั้นต่ำคือ 25 MHz, ด้วยนาฬิกา bit 250 MHz ซึ่งหมายความว่า FPGA จริง ๆ แล้วไม่ต้องการ serializers ในการส่ง HDMI เพียง flip flops DDR แม้ว่าจะยังไม่สามารถบรรเทาปัญหาการอ่านข้อมูลวิดีโอได้ หากคุณต้องการทำเช่นนั้นบนราสเบอร์รี่ pi โดยไม่มีความช่วยเหลือด้านฮาร์ดแวร์คุณจะต้องอ่านจาก GPIO อย่างต่อเนื่องที่ 25 MHz ซึ่งเป็นหนึ่งอ่านทุก 175 คำแนะนำ การเข้าสู่ขอบเขตของความเป็นไปได้ แต่วิธีเดียวที่คุณจะทำให้งานนั้นอยู่บนโลหะเปลือย (ไม่มี Linux) ด้วยชุดประกอบที่เขียนด้วยมือ