มัลติเพล็กเซอร์ขนาดใหญ่ / ตัวเลือกข้อมูล


10

ฉันกำลังมองหา multiplexer IC ที่มีอินพุต 128: 1 ขึ้นไป (256 จะค่อนข้างดี) ฉันจะคิดว่าอุปกรณ์ดังกล่าวจะค่อนข้างบ่อย แต่ฉันมีเวลายากหามัน อาจเป็นได้ว่าฉันกำลังดูสถานที่ที่ผิด แต่อย่างใดฉันคิดว่าฉันหายไปบางอย่าง - บางทีมัลติเพล็กเซอร์อินพุตขนาดใหญ่ไม่ได้ใช้บ่อย ถ้าเป็นเช่นนั้นทางเลือกคืออะไร?

ค่าสูงสุด ฉันสามารถค้นหาได้คือ ol ที่เชื่อถือได้ '74150 ที่มีอินพุต 16 อินพุต

ฉันเข้าใจว่าฉันสามารถสร้างมัลติเพล็กเซอร์ขนาดใหญ่ได้โดยการรวมอินพุต mux หลาย ๆ 16 ค่าเข้าด้วยกัน แต่ฉันก็หวังว่าจะมีวิธีการแก้ปัญหาแบบรวมมากขึ้น


ฉันกำลังออกแบบวงจรที่สามารถทดสอบวงจรเปิดและสั้นในชุดสายไฟรถยนต์ สายรัดทั่วไปสามารถมีสายไฟ 200 เส้นหรือมากกว่านั้น ปัจจุบันวงจรใช้ 16 มัลติเพล็กเซอร์เพื่อจัดการสาย 128

มัลติเพล็กเซอร์เชื่อมต่อกับมัลติเพล็กเซอร์ 16 อินพุตเดี่ยวและในทางกลับกันจะเชื่อมต่อกับ uC ในทำนองเดียวกันอีกด้านหนึ่งมีอุปกรณ์แยกประเภท 16 เครื่อง อุปกรณ์แยกส่งสัญญาณจะสลับสายไปยังแรงดันไฟฟ้า ในเวลาเดียวกันสายนี้จะถูกสลับไปยังหนึ่งในอินพุต uC ผ่าน mux

หากลวดตกลงยูซีซีควรเห็นค่าสูงที่อินพุต จากนั้น uC จะตรวจสอบสายอื่นทั้งหมด หากหนึ่งในนั้นมีค่าสูงแสดงว่ามีสายสั้นระหว่างสายทั้งสอง

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

นี่คือไดอะแกรมบล็อกคร่าวๆที่ฉันสร้างขึ้นอย่างรวดเร็วสำหรับโพสต์นี้ ฉันหวังว่านี่จะทำให้ปัญหาชัดเจนขึ้นเนื่องจากภาษาอังกฤษไม่ใช่ภาษาแรกของฉันและฉันมีปัญหาในการอธิบายสิ่งต่าง ๆ ผ่านทางข้อความ แม้ว่าแผนภาพจะไม่ดีมากฉันหวังว่ามันจะทำให้ดีขึ้น บรรทัดที่ไปทางด้านข้างใน demux และ mux จาก MCU คือบรรทัดที่อยู่

โปรดทราบว่าหนึ่งในสายถูกแบ่งออกเป็น 3 ฉันทำสิ่งนี้โดยเจตนาเพื่อแสดงให้เห็นว่าการเชื่อมต่อบางอย่างเป็นแบบหนึ่งต่อหลายและไม่ใช่แค่แบบหนึ่งต่อหนึ่ง สิ่งที่ซับซ้อนที่สุดที่ฉันเคยเห็นคือลวดแบ่งออกเป็น 60 ทางแยก นี่คือเหตุผลที่ demux และ mux มีบรรทัดที่อยู่แยกกัน demux อาจเป็นหมายเลขอินพุต 20 ในขณะที่ mux สามารถสลับระหว่าง 20,21,22 เป็นต้นตรวจสอบทุกบรรทัดที่ถูกแยกจากบรรทัด 20

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณรู้สึกว่ามีวิธีที่ดีกว่าในการออกแบบโปรดแจ้งให้เราทราบ


คุณกำลังมองหา 128: 1 หรือ 128 ครั้ง 2: 1 หรือไม่?
Majenko

128: 1 ขอโทษที่ฉันลืมพูดถึง ฉันขอโทษ.
Saad

@ Saad ประสบการณ์ของฉันแสดงให้เห็นว่าเกือบทุกครั้งที่มีคนถามถึงสิ่งนั้นมันเป็นเพราะพวกเขากำลังทำสิ่งผิดปกติ ฉันขอแนะนำให้ระบุว่าคุณพยายามทำอะไรให้สำเร็จมากกว่าที่คุณคิดว่าทางออกคืออะไร ด้วยวิธีนี้เราอาจจะสามารถให้ทางออกที่ดีกว่าการลดหลั่นจำนวน 16: 1 muxes

@ David Kessner โปรดดูการแก้ไข ฉันได้สอบถามเกี่ยวกับการออกแบบบนเว็บไซต์นี้เมื่อไม่กี่สัปดาห์ที่ผ่านมา แต่ได้รับคำตอบเล็กน้อย จะขอบคุณรูปแบบใด ๆ ในการป้อนข้อมูล
ซาด

1
ขึ้นอยู่กับความเร็วว่าบ่อยแค่ไหนและด้วยการแจ้งให้ทราบว่าจะเปลี่ยนอินพุตให้มากน้อยเพียงใดการใช้มัลติเพล็กเซอร์แบบเรียงซ้อน แทนที่จะต้องส่งสัญญาณ 256 จุดไปยังจุดเดียวบนบอร์ดเราสามารถส่งสัญญาณ 16 สัญญาณไปยังแต่ละจุด 16 กำหนดเส้นทางสัญญาณหนึ่งสัญญาณจากแต่ละจุดเหล่านั้นไปยังชิป 16-input และกำหนดเส้นทางสี่สัญญาณที่ใช้ร่วมกันทั้งหมด multiplexers ใช้ชิปในทางทฤษฎีจะให้หนึ่งในการได้รับการใด ๆ ของสัญญาณ 256 จากการป้อนข้อมูลการส่งออกมีเพียงหนึ่งเดียว "ประตูล่าช้า" สอดคล้องกับทรานซิสเตอร์สองในซีรีส์ (N-ประเภทสำหรับล้มขอบ; P สำหรับเพิ่มขึ้น) แต่ ...
supercat

คำตอบ:


12

ในขณะที่ mux / demux ขนาดใหญ่จะทำงานได้อย่างแน่นอน แต่การเชื่อมต่อกับกลุ่ม muxes ขนาด 16: 1 นั้นเป็นงานจำนวนมากและมีข้อ จำกัด บางประการที่อาจจะมีหรือไม่มีปัญหาก็ได้ วิธีการทั่วไปมากขึ้นคือการใช้การลงทะเบียนกะ ใช้การลงทะเบียนแบบอนุกรม / เข้าขนานออกสำหรับจุดสิ้นสุด "การขับรถ" และการต่อแบบขนานเข้า / ออกแบบขนานสำหรับจุดสิ้นสุดการรับ สิ่งที่ดีเกี่ยวกับการลงทะเบียนกะคือพวกเขาสามารถผูกมัดเดซี่ได้อย่างง่ายดายเพื่อให้ลงทะเบียนกะอีกต่อไป การลงทะเบียน shift แบบ 256 บิตหรือแม้แต่ 1024 บิตไม่ใช่ปัญหาเลย ด้วยการบัฟเฟอร์บางครั้งสตรีมอนุกรมสามารถส่งผ่านสายเคเบิลไปยัง PCB อื่นได้ (หากนั่นทำให้คุณทำสิ่งต่าง ๆ ได้ง่ายขึ้น)

มีหลายแบบ 8 บิตกะทะเบียนชิปเช่น 74xx597 มี แต่ CPLD เป็นมากดีกว่าสำหรับการนี้ แต่คุณไม่ต้องการ CPLD ขนาด 256+ พิน แต่คุณสามารถใช้ CPLD ที่เล็กกว่าและเชื่อมโยงเข้าด้วยกัน แม้ว่าฉันจะยังไม่ได้ทำคณิตศาสตร์ แต่ฉันค่อนข้างแน่ใจว่าการใช้ CPLD ขนาดเล็กถึงขนาดกลางจะถูกกว่า CPLD ขนาดใหญ่หนึ่ง - และคุณไม่ต้องกังวลกับ BGA

CPLD นี้น่าจะเป็น Flip-Flop ค่อนข้างมาก สิ่งนี้หมายความว่าสถาปัตยกรรม CPLD ปกติ (เหมือนกับที่ Xilinx ใช้) ไม่ดีเท่า FPGA-ish มากกว่า Altera และ Lattice ต่างก็มี CPLD พร้อมกับ Flip-Flop ต่อดอลลาร์มากกว่าที่ Xilinx มี

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

นอกจากนี้ข้อดีของการใช้ shift register แทน mux นั้นไม่ใช่เรื่องง่ายที่จะเห็นในตอนแรก ส่วนใหญ่คุณจะได้รับความยืดหยุ่นมากมายในวิธีที่คุณขับรถและสัมผัสกับสายไฟ คุณอาจจะทำการทดสอบสายรัดหลายอันในคราวเดียว (ถ้าคุณมีการลงทะเบียนกะมากพอ) ทุกสิ่งที่คุณสามารถทดสอบด้วย mux สามารถทำได้ด้วย shift register แต่ shift register สามารถทำได้มากกว่า ข้อเสียด้านหนึ่งของการเลื่อนการลงทะเบียนคือช้ากว่าแม้ว่าคุณจะยังเร็วกว่าสิ่งที่คุณต้องการ (IE คนที่กำลังเชื่อมต่อและถอดสายไฟจะช้ากว่าเวลาที่ใช้ทดสอบการลงทะเบียนกะ)

ฉันควรจะบอกด้วยว่าแม้ว่าคุณจะใช้ CPLD ของการลงทะเบียนกะก็ยังง่ายกว่า mux สิ่งสำคัญคือพวกเขามีขนาดเล็กลง - แม้ว่าจะเห็นข้อดี / ข้อเสียจริงที่คุณจะต้องทำในการออกแบบทั้งสองและดูขนาด CPLD ที่คุณต้องการ สิ่งนี้จะค่อนข้างขึ้นอยู่กับประเภทของสถาปัตยกรรม CPLD ที่ใช้ดังนั้นการสรุปทั่วไปใด ๆ ที่ทำด้วย Xilinx จะไม่ใช้กับ Altera

แก้ไข: ด้านล่างเป็นรายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับวิธีการทดสอบจริงโดยใช้ shift register ...

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

ข้อมูลที่คุณขับด้วยเรียกว่า "การทดสอบเวกเตอร์" ข้อมูลที่คุณคาดว่าจะอ่านเป็นส่วนหนึ่งของเวกเตอร์ทดสอบ หากสายเคเบิลนั้นต่อสายแบบสัมพันธ์ 1: 1 คุณจะคาดหวังว่าข้อมูลการขับขี่และข้อมูลการรับจะเหมือนกับสิ่งที่คุณขับ หากสายเคเบิลไม่ได้เป็น 1: 1 ก็จะแตกต่างกันอย่างเห็นได้ชัด

หากคุณใช้วิธีทดสอบแบบ MUX คุณยังคงใช้เวกเตอร์ทดสอบ แต่คุณไม่สามารถควบคุมเวกเตอร์ทดสอบได้ ด้วย Muxes รูปแบบนี้เรียกว่า "Walking Ones" หรือ "Walking Zeros" สมมติว่าคุณมีสายเคเบิล 4 พิน ด้วยการเดินคุณจะขับรถตามรูปแบบต่อไปนี้: 0001, 0010, 0100, 1,000 ศูนย์การเดินเหมือนกัน แต่กลับด้าน

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

วิธีการขั้นสุดท้ายของการสร้างเวกเตอร์ทดสอบนั้นใช้สำหรับการทดสอบ JTAG JTAG หรือที่เรียกว่าขอบเขตการสแกนเป็นโครงร่างที่คล้ายกันสำหรับการทดสอบการเชื่อมต่อระหว่างชิปบน PCB (และระหว่าง PCB) ชิป BGA ส่วนใหญ่ใช้ JTAG JTAG มีการลงทะเบียนกะในชิปแต่ละตัวที่สามารถใช้ในการขับเคลื่อน / อ่านแต่ละขา ซอฟต์แวร์ที่ซับซ้อนและมีราคาแพงดูที่ netlist สำหรับ PCB และจะสร้างเวกเตอร์ทดสอบ เครื่องมือทดสอบสายเคเบิลที่ซับซ้อนสามารถทำสิ่งเดียวกัน - แต่นั่นจะเป็นงานจำนวนมาก

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

จนถึงตอนนี้จะจัดการกรณีที่หมุดหนึ่งที่ปลายขับรถไปยังขามากกว่าหนึ่งจุดที่ปลายรับได้อย่างง่ายดาย แต่ไม่ได้จัดการกับกรณีอื่นที่หมุดหลายอันบนปลายขับรถเชื่อมต่อกัน สำหรับสิ่งที่คุณต้องการสิ่งพิเศษเพื่อป้องกันความเสียหายจากการต่อสู้ของรถบัสและหมุดลงทะเบียนของคุณทั้งหมดควรเป็นแบบสองทิศทาง (IE, ฟังก์ชั่นเป็นทั้งไดรเวอร์และตัวรับสัญญาณ) นี่คือสิ่งที่คุณทำ:

  1. ใส่ตัวต้านทานแบบดึงลงที่ขาแต่ละข้าง บางสิ่งบางอย่างประมาณ 20K ถึง 50k โอห์มน่าจะดี

  2. ใส่ตัวต้านทานอนุกรมระหว่าง CPLD และสายเคเบิล ประมาณ 100 โอห์ม นี่คือเพื่อช่วยป้องกันความเสียหายจาก ESD และสิ่งต่าง ๆ ฝา 2700 pF ต่อกราวด์ (ที่ด้านข้าง CPLD พินของตัวต้านทาน 100 โอห์ม) จะช่วยด้วย ESD

  3. ตั้งโปรแกรม CPLD เพื่อให้สัญญาณสูงเท่านั้นไม่ขับต่ำ หากข้อมูลที่ส่งออกของคุณเป็น '0' CPLD จะไตรสถานะนั้นพินและอนุญาตให้ตัวต้านทานแบบดึงลงนำสายต่ำ ด้วยวิธีนี้หากหมุด CPLD หลายเส้นกำลังขับสายไฟเดียวกันบนสายเคเบิลสูงจะไม่มีความเสียหายเกิดขึ้น (เพราะ CPLD จะไม่ขับสายลวดต่ำเช่นเดียวกัน)

  4. ทุกพินเป็นได้ทั้งไดรเวอร์และตัวรับสัญญาณ ดังนั้นหากคุณมีสายเคเบิล 256 พินดังนั้นการลงทะเบียนกะของคุณจะเป็น 512 บิตสำหรับไดรเวอร์และ 512 บิตสำหรับเครื่องรับ การขับรถและการรับสามารถทำได้ใน CPLD เดียวกันดังนั้นความซับซ้อนของ PCB จึงไม่เปลี่ยนแปลงเนื่องจากสิ่งนี้ คุณจะมีฟลิปฟล็อป 3 หรือ 4 ต่อพินสายเคเบิลใน CPLD นี้ดังนั้นควรวางแผนด้วย

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


ขอบคุณมาก. ฉันจะเริ่มอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ทันที
Saad

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

คิดเพิ่มเติมเกี่ยวกับสายเหล่านี้ - สมมติว่าเรามีสายอินพุต 4 เส้นและหนึ่งในนั้น (ที่ 4) แยกออกเป็น 2 สาย เรามี 5 สายตรงปลาย rx สมมติว่าเราเลื่อนบิต 0101 ออกไปถ้าเราได้รับกลับ 01011 จากนั้นเราทุกสายก็โอเค แต่สมมติว่าบิตที่ 3 นั้นสูง (01111) จากนั้นเรารู้ว่าลวดที่ 3 นั้นลัดวงจร แต่สิ่งนี้จะไม่บอกเราว่าสายใดลัดวงจรกับ บางทีวิธีที่ดีกว่าก็คือปล่อยให้ "1" กระเพื่อมผ่านรีจิสเตอร์ ดังนั้นในตอนแรกเรามี 1,000 คนและเราจะรับรู้ 10,000. จากนั้น 1 ระลอกผ่าน, และเราได้ 0100 และ 01000. จนกระทั่งเราถึงบิตสุดท้าย, 0001.
ซาด

สำหรับกรณีนี้เรารู้ว่าเราควรได้รับ 00011 เนื่องจากคนสุดท้ายถูกแยกเป็นสองคน หากมีสายสั้นที่ 4 และเราส่ง 0010 เราจะ rx 00111 ซึ่งเรารู้ว่าไม่ถูกต้องและเราสามารถแสดงข้อผิดพลาดที่ระบุว่าไฟฟ้าลัดวงจรอยู่ที่ไหน วิธีนี้ฟังดูดีหรือไม่?
ซาด

@ Saad ฉันได้อัปเดตคำตอบของฉันพร้อมรายละเอียดมากขึ้นเพื่อให้ครอบคลุมความคิดเห็นของคุณ

7

ฉันไม่คิดว่าจะมีโซลูชั่นชิปตัวเดียวอยู่ พวกเขาจะมีราคาแพงเนื่องจาก I / O จำนวนมากและอาจเป็นเพราะความต้องการต่ำ การออกแบบส่วนใหญ่จะซ้อนกัน 8 หรือ 16 มัลติเพล็กเซอร์

หากคุณต้องการการแก้ปัญหาแบบบูรณาการขึ้นจริงๆคุณจะต้องมองหาCPLD มี CPLD ที่มีมากกว่า 256 I / O เช่น Xilinx CoolRunner XC2C512ซึ่งมีในรุ่น BGA ที่มี I / O ผู้ใช้ 270 คน โปรดทราบว่าสำหรับมัลติเพล็กเซอร์อินพุท 256 ตัวคุณจำเป็นต้องมีอินพุตเพิ่มอีก 8 อินพุทสำหรับสัญญาณที่เลือกออกแน่นอนและอาจเปิดใช้งานได้ดังนั้น 270 I / O จะไม่มากเกินไป

นอกจากนี้คุณยังจะต้องเก็บไว้ในใจว่าบรรจุภัณฑ์ของคุณมักจะเป็นBGA ; ไม่แน่ใจว่าคุณจะชอบมัน ฉันไม่ได้เห็น QFP ที่มีหมุดประมาณ 300 ตัวยังไงก็ตาม ...


2
ขอบคุณ ฉันรู้สึกว่ามันจะเป็นอย่างนั้น ฉันคิดว่าฉันจะทำ mux ที่ใหญ่กว่าจากอินพุต 16 อัน
ซาด

@ saad - ดูเหมือนว่าจะเป็นทางออกที่ดีที่สุดของคุณเว้นแต่ว่าคุณจะคว้าจำนวนมาก (นับจำนวนไม่ใช่เกต / บล็อกลอจิก) PLD ตามที่แนะนำ (ข้อได้เปรียบมีประสิทธิภาพมากกว่า / ขนาดจริง ๆ แล้วไม่ค่อยมีประสบการณ์กับพวกเขา แพคเกจแน่นอนจะเป็นความเจ็บปวด? - คณะกรรมการ dev)
Oli ตับ

จริง ๆ แล้วฉันมีประสบการณ์บางอย่างกับ HDL และ FPGAs (Handel-C - ซึ่งไม่น่าทำงานด้วย) ผ่านโรงเรียน ฉันไม่เคยทำงานกับ CPLD มาก่อน แต่ฉันไม่เคยยุ่งกับแพ็คเกจ BGA จริงๆและมันดูเหมือนจะเจ็บปวดจริงๆ แก้ไข: XC2C512 ยังมีอยู่ใน PQFP - แม้ว่าตอนนี้ฉันสงสัยว่าใครบางคนที่มีประสบการณ์น้อยเหมือนของฉันใน HDL และ FPGAs สามารถทำงานกับอุปกรณ์ดังกล่าวได้ นอกจากนี้ยังมีราคาค่อนข้างสูง - มีค่าใช้จ่าย£ 60 มากกว่าที่ Farnell UK
ซาด

@saad - PQFP มี I / O ผู้ใช้ 173 คนเท่านั้น เพื่อนร่วมงานของฉันตั้งโปรแกรม CPLD ของเขา (แอปพลิเคชันง่าย: ตัวถอดรหัสที่อยู่) ในAbelซึ่งดูเหมือนว่าจะง่ายกว่า VHDL หรือ Verilog มาก อาจไม่มีประสิทธิภาพเท่ากับ VHDL / Verilog แต่นั่นไม่ควรเป็นปัญหาสำหรับแอปพลิเคชันของคุณ
stevenvh

@stevenvh: Abel ค่อนข้างน่าเกลียดในบางวิธี แต่การระบุพฤติกรรมของพินในแง่ของนาฬิกาและสมการบางครั้งอาจดูเป็นธรรมชาติมากกว่าการเขียนสิ่งต่าง ๆ ใน VHDL หรือ Verilog ฉันสงสัยว่าทำไมเครื่องมือไม่สนับสนุนภาษาที่ใช้สมการที่ดีกว่า
supercat

3

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


คุณหมายถึงว่าฉันควรใช้ shift register ในบล็อก 16 บิตบน CLPD หรือไม่ ฉันมักจะไม่ใช้ CPLD ขนาดใหญ่เพื่อทำงานทั้งหมด ฉันต้องการหลีกเลี่ยงแพ็คเกจ BGA และอาจจะติดกับ CLPD ที่เล็กกว่า ในขณะนี้สำหรับทุกชุดสายไฟใหม่ที่จำเป็นต้องมี "บอร์ดเชื่อมต่อ" ใหม่ได้รับการพัฒนาและสิ่งนี้มีการเชื่อมต่อทั้งหมดที่ติดตั้งอยู่ ตัวเชื่อมต่อเหล่านี้จะเชื่อมต่อกับวงจรที่ฉันอธิบายไว้ในคำถามข้างต้น ในระบบใหม่เราจะเก็บกลไกนี้ไว้ - ฉันจะพบปัญหาแบบใดหากฉันเชื่อมต่อ IOs จำนวนมากบนชิปตัวเดียว
ซาด

1

การใช้ shift register เพื่ออ่านอินพุตจำนวนมากเป็นรูปแบบที่ดี อย่างไรก็ตามตั้งแต่ David Kessner แนะนำให้ใช้ CPLD ฉันจะแนะนำรูปแบบอื่น สมมติว่าคุณต้องการให้แต่ละ CPLD จัดการ 32 อินพุต ให้สัญญาณนาฬิกาที่ใช้ร่วมกันของ CPLD แต่ละรายการอินพุตเปิดใช้งานส่วนบุคคลเอาต์พุตเปิดใช้งาน (ซึ่งสัมพันธ์กับอินพุตเปิดใช้งานชิปถัดไป) และเอาต์พุตข้อมูลที่แชร์ ชิปแต่ละตัวมีตัวนับห้าบิตและตัวบ่งชี้การล้น เมื่ออินพุตการอนุญาตถูกปิดใช้งานให้ล้างตัวบ่งชี้ตัวนับและโอเวอร์โฟลว์ เมื่อเปิดใช้งานอินพุตถูกยืนยัน แต่ไม่ได้ตั้งค่าตัวบ่งชี้โอเวอร์โฟลว์เอาท์พุทสถานะของบิตอินพุตที่ระบุโดยตัวนับ เมื่อได้รับพัลส์นาฬิกาและชิปถูกเปิดใช้งานและตัวนับไม่ล้นให้ชนตัวนับ บิตโอเวอร์โฟลว์จะป้อนเอาต์พุต "เปิดใช้งาน" ผลสุทธิของตรรกะทั้งหมดนี้คือเราสามารถทำได้โดยต้องการเพียง 8 macrocells เพื่อจัดการกับอินพุต 32 ตัว หนึ่งอาจจะสามารถพอดีกับฟังก์ชั่นอื่น ๆ ของ CPLD ซึ่งมีการคำนวณมากหรือลงทะเบียนมาก แต่ไม่ต้องการ I / O มาก

หากมี CPLD ที่มีวงจร pin-keeper เราอาจใช้วิธีที่คล้ายกันสำหรับเอาต์พุตโดยเฉพาะอย่างยิ่งหากมีวิธีการส่งออกจาก macrocell หนึ่งไปยังหลายพิน (โดยไม่ต้องใช้ macrocell สำหรับแต่ละพิน) ชิปจะมีนาฬิกาและอินพุตข้อมูลที่แชร์อินพุตเปิดใช้งานและเอาต์พุตเปิดใช้งาน ภายในจะต้องใช้ตัวนับห้าบิตสำเนาพิเศษของตัวนับด้านล่างที่สลักบนขอบนาฬิกาตรงข้ามจากห้าตัวแรกบิตล้นและสัญญาณข้อมูลที่แชร์ซึ่งจะดึงพินทั้งหมด เจ็ด macrocells รวมทั้งมีความจำเป็นมากในการคัดลอกสัญญาณข้อมูลเข้าสู่พินทั้งหมด

หนึ่งคุณลักษณะที่สวยงามของวิธีการนี้ (ซึ่ง btw ใช้บ่อยในไดรเวอร์ LCD) คือสามารถมีสายข้อมูลหลายเส้นที่เคลื่อนย้ายข้อมูลแบบขนานและยังต้องการเพียงสายเดซี่โซ่เดียวระหว่างชิป นอกจากนี้ยังช่วยให้หนึ่งเพื่อกำจัดวงจร latching จากแต่ละอินพุตหรือเอาต์พุต


1

เสียงนี้มีความคิดอย่างไรโดยสมมติว่ากลุ่มหมุดที่ใหญ่ที่สุดที่ควรจะเชื่อมต่อนั้นเป็นเช่น 20 พิน: ใช้พวงของชิพเซ็ต open-collector shift-register LED-driver ชิพ (หนึ่งเอาต์พุตต่อขา) แต่ละอันสามารถ จมอย่างน้อย 2mA; เชื่อมต่อตัวต้านทาน 1K จากแต่ละขาไปยังจุดร่วมกันและใช้วงจรที่แหล่งหนึ่งโวลต์ที่ 20.1mA (มันก็ดีถ้าแรงดันไฟฟ้าสูงกว่าเมื่อกระแสต่ำกว่าถ้าเป็นโวลต์ที่ 20.1mA) และระบุว่าความพยายาม กำลังทำการวาดมากกว่าจำนวนเงินนั้น สำหรับการกำหนดค่าสายเคเบิลบางอย่างคุณอาจจำเป็นต้องมีหมุด "สำรอง" จำนวนเล็กน้อยซึ่งมีตัวต้านทาน 1K แต่ไม่ได้เชื่อมต่อกับสายเคเบิล อาจเป็นที่พึงปรารถนาที่จะมีพินสำรองที่มีตัวต้านทาน 1K ตัวหนึ่งมีตัวต้านทาน 500 โอห์ม (หรือ 2K ขนานกันสองตัว) หนึ่งตัวที่มีตัวต้านทาน 250 โอห์ม (1K สี่ตัว '

ในการทดสอบสายเคเบิลให้กำหนดสถานการณ์ซึ่งควรส่งผลให้มีการดึงหมุดยี่สิบเส้นและสถานการณ์ที่ควรทำให้เกิดการดึงยี่สิบขา (ขาสำรองอาจมีประโยชน์สำหรับสิ่งนี้) และยืนยันว่าสถานการณ์ยี่สิบขานั้น ไม่ได้รายงานว่าใช้มากกว่า 20.5mA แต่มีสถานการณ์แบบ 21-pin

ตัวอย่างเช่นสมมติว่ามีสายรัดสายเคเบิลซึ่งควรเชื่อมต่อ 1-2, 3-4, 5-6 และอื่น ๆ ได้มากถึง 39-40 ตรวจสอบกางเกงขาสั้นด้วยการเลือกชุดพินสิบคู่ที่หลากหลายและขับคู่ต่ำแต่ละคู่ คุณจะขับต่ำ 20 พินและไม่มีหมุดควรจะต่ำยกเว้นที่คุณขับรถดังนั้นกระแสควรต่ำกว่า 20mA เสมอ หากผ่านไปก็มีบางอย่างขาดหายไป หากมีใครสามารถค้นหาการรวมกันของสิบคู่ที่ไม่ได้อ่านมากกว่าปัจจุบันแล้วทีละคนปิดคู่ที่ใช้งานและเปิดคู่อื่นจนกว่าจะมีอะไรบางอย่างมากกว่าปัจจุบัน; คู่สุดท้ายที่เปิดอยู่นั้นย่อมาจากสิ่งที่ไม่ควรเป็น

ตรวจสอบการเปิดโดยการผลักเข็มหมุดต่ำแล้วเลือกชุดต่าง ๆ สิบคู่ขับหนึ่งพินจากแต่ละคู่ (บางครั้งก็เป็นคู่คี่และบางครั้งก็เป็นคู่) หากมีการเปิดใด ๆ การกระทำดังกล่าวจะส่งผลให้น้อยกว่า 21 พินถูกขับเคลื่อนต่ำและทำให้อ่านภายใต้ปัจจุบัน หากเป็นเช่นนั้นให้ทำทีละครั้งใช้แต่ละคู่ที่ขับเคลื่อนด้วยสายเส้นเดียวและขับทั้งคู่แทน ถ้ามันผลักดันการอ่านปัจจุบันมากกว่า 20.1mA คู่นั้นจะเปิด

หนึ่งสามารถใช้ CPLD สำหรับแอปพลิเคชันนี้ แต่ระบบเช่นฉันอธิบายอาจจะดีกว่า มันสามารถปรับปรุงเพิ่มเติมได้โดยการเพิ่มวงจรเพื่อวัดกระแสไฟฟ้าจริง ๆ (แทนที่จะสร้างตัวบ่งชี้ที่สูง / ต่ำ) การวัดดังกล่าวจะอนุญาตให้หนึ่งตั้งค่าความอดทนสำหรับความต้านทาน


1

นี่คือสิ่งที่คุณกำลังมองหา?

Maxwell 81840 - ตัวคูณช่องสัญญาณ 128 ช่อง


อาจจะไม่. นี่คือมัลติเพล็กเซอร์แบบอะนาล็อกถึงแม้ว่าคุณอาจจะสามารถส่งสัญญาณดิจิตอลแบบมัลติเพล็กซ์ได้เช่นกันหากคุณจับตาดูความเร็วของอุปกรณ์ นอกจากนี้ยังเป็นอุปกรณ์ Rad-hard จะมีราคาแพง
stevenvh

ยินดีต้อนรับ! Steven นั้นถูกต้องมันอาจไม่ใช่ทางเลือกที่เหมาะสม แต่น่าจับตา! อาจเพิ่มคำอธิบายส่วนประกอบด้านล่างลิงก์
clabacchio

ขอบคุณ clabacchio ฉันไม่แน่ใจว่ารายละเอียดเพิ่มเติมฉันสามารถอธิบายองค์ประกอบ ฉันยังไม่เคยใช้มาก่อนหรือไม่มีประสบการณ์เพียงพอ
แดเนียล

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