เหตุใดฉันจึงเห็น“ รอย” แปลก ๆ บนสายข้อมูลสำหรับตรรกะ 1


15

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

ต้นแบบปัจจุบันนั้นง่ายมาก ฉันใช้คริสตัล 4 MHz ที่ขับเคลื่อนโดย Pierce oscillator 74HCT04 เป็นนาฬิการะบบสองตัว 74HCT573 latches ในโหมดโปร่งใส ( LEสูง) เป็นบัฟเฟอร์สำหรับบัสแอดเดรส 16 บิตอีกสอง 74HCT573 ในทิศทางตรงกันข้ามที่ควบคุมโดยRDและNOT RDเป็นข้อมูลแบบสองทิศทาง บัฟเฟอร์บัส ฉันแนบEEPROM AT28C256 EEPROM 100 ns (ถอดรหัส 16-KiB เท่านั้น) และชิป SRAM ชิพ SRAM 150 ns 8-KiB สองตัวเข้ากับบัสระบบ ฉันใช้ 74HCT42 เพื่อสร้างCSสัญญาณและเดินสายOEEEPROM ไปหาต่ำWEถึงสูงเหลือสัญญาณ CS เพียงอันเดียวเพื่อควบคุม EEPROM

ทุกอย่างบนเขียงขนมปังมีเสียงดัง แต่ระบบดูเหมือนว่าจะทำงานได้อย่างสมบูรณ์หลังจากที่ฉันทำทุกขั้นตอนเสร็จแล้ว ตอนนี้มันสามารถดึงข้อมูลคำแนะนำจาก EEPROM อ่านและเขียนข้อมูลจาก / ไปยัง SRAM และมันมีพอร์ตอนุกรมที่ทำจากอีกสลัก 74HCT573, D0เชื่อมต่อกับD0, LEเป็น(NOT (IOREQ NAND WR))เอาท์พุทออกมาจากQ1ในคำอื่น ๆ เพียงพอร์ตออกหนึ่ง ไม่มีตรรกะถอดรหัสที่อยู่ ฉันได้เขียนโปรแกรมเปรียบเทียบมาตรฐาน CPU / RAM และคอมพิวเตอร์ของฉันสามารถแสดงผลลัพธ์ที่คาดหวังได้ Memdumps ยังแสดงให้เห็นว่า Z80 สามารถอ่านไบต์ทั้งหมดจาก EEPROM อย่างถูกต้องดังนั้นทุกอย่างทำงานได้ดี

แต่เมื่อฉันพยายามตรวจสอบD0พินบัสข้อมูลฉันก็เห็น "รอยหยัก" แปลก ๆ สำหรับเอาต์พุต 1 ลอจิกที่เห็นได้ชัด

ตัวอย่างของ Weird Notches บน D0

และดูเหมือนว่าพวกมันจะปรากฏขึ้นสำหรับ 1s แบบลอจิคัลบางครั้งไม่นานหลังจากที่CSสัญญาณของ EEPROM เริ่มทำงานตัวอย่างเช่นนี่คือการจับภาพของรอยหยักแปลก ๆ ทับบนสัญญาณ EEPROM CS สีน้ำเงิน

Weird Notch ซ้อนทับบนสัญญาณ CS

ฉันพยายามแยกปัญหาออกดังนั้นฉันจึงเดินสายหมุด CS ทั้งหมดของ SRAM ไปเป็น HIGH ลบมันออกจากระบบอย่างมีประสิทธิภาพและฉันได้เขียนโปรแกรมทดสอบอย่างง่ายที่ไม่มีการเข้าถึงหน่วยความจำ

.org 0x00
    di

    xor a
loop:
    out (0x00), a
    inc a

    jp loop

แต่ปัญหาคือไม่เปลี่ยนแปลง, แปลก "รอยหยัก" ยังคงเสมอปรากฏสำหรับบาง 1s ตรรกะหลังMEMRQและ / หรือ (ตั้งแต่มันเป็นหลักหนึ่งชิปตอนนี้) CS(สีฟ้า) ไปต่ำ

หมุด CS ทั้งหมดของ SRAM นั้นสูงดังนั้นระบบจึงค่อนข้างจะมีชิป E28 AT28C256 เป็นหน่วยความจำและสลักเป็นพอร์ตเอาท์พุท ระบบยังมีโปรแกรมเมอร์ในระบบที่ทำจาก Atmega328p เพื่อทำซ้ำ EEPROM on-the-fly ในระหว่างการร้องขอ DMA แต่ฉันไม่คิดว่ามันเป็นผู้ร้ายตั้งแต่ฉันทำข้อมูลและที่อยู่ทั้งหมดของโปรแกรมเมอร์และ ฉันเคยเห็นรอยหยักก่อนที่ฉันจะเพิ่มโปรแกรมเมอร์

อีกตัวอย่างของ "รอยหยัก"

ดังนั้นจึงต้องสร้าง "รอยหยัก" ในระหว่างรอบการเรียก opcode พวกเขาคืออะไร

ฉันมีสมมติฐานไม่กี่:

  1. ไม่มีอะไรผิดปกติมันเกิดจากความสมบูรณ์ของสัญญาณที่ไม่ดีของเขียงหั่นขนมและมันจะหายไปโดยอัตโนมัติใน PCB ที่ออกแบบมาอย่างดีและแยกตัวได้ดี เขียงหั่นขนมมีปัญหาเรื่องความสมบูรณ์ของสัญญาณทุกประเภท: ไม่ตรงกันความต้านทาน, การสะท้อน, ความจุของกาฝาก, crosstalk, EMI / RFI สายบัสยาวที่วิ่งผ่านแผงวงจรมีแนวโน้มที่จะทำให้ปัญหาแย่ลงในระดับหนึ่ง

    หากเป็นจริงคุณสามารถอธิบายลักษณะของ "รอยหยัก" ได้หรือไม่? ปรากฏการณ์นี้มีชื่อใน EE หรือไม่? ฉันเคยเห็น overshoots และ ringings มาก่อน แต่ไม่เคยเห็น "รอยหยัก" และทำไมฉันฉันเห็นมันเพียง แต่สำหรับบางระดับตรรกะ?

  2. การจับเวลา เป็นไปได้หรือไม่ที่ "การกำหนดเวลา" สั้น ๆ ของเอาท์พุท EEPROM หรือวงจรลอจิกอื่น ๆ ทำให้เกิดผลแปลก ๆ บนบัส?

  3. พัดลมออก บางทีบัสยาวดึงกระแสจำนวนมากและมีความจุสูงดังนั้นเอาท์พุท EEPROM ก็มีเวลาขับรถบัสยาก? และบางทีโพรบ oscilloscope กำลังโหลดบัสด้วยหรือไม่

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

อัปเดต: ฉันใช้ตัวแยกและตัวเก็บประจุกรองบนบอร์ดตั้งแต่ต้นแล้ว ฉันใช้ตัวเก็บประจุแยกส่วน 0.1 uF ค่อนข้างทั่วทั้งบอร์ดและ CPU ยังมีทั้งตัวเก็บประจุ 0.1 uF และ 0.01 uF สำหรับการแยกตัว ระบบปัจจุบันมี 8 บอร์ดแต่ละ breadboard มีตัวเก็บประจุอลูมิเนียม 4.7 uF สองตัวบนรางทั้งสองสำหรับการกรองภายใน นอกจากนี้พลังที่ได้จาก devboard ยังมีตัวเก็บประจุแทนทาลัม 200 ยูเอฟ แต่อย่างที่ฉันพูดปัญหาอยู่ที่นี่

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

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

ขอบคุณ

Update2: ในใจของฉันฉันเชื่อว่าความคิดเห็นของ Bruce Abbott ได้ให้คำตอบที่ถูกต้องและปัญหาได้รับการแก้ไขแล้ว! แม้ว่าฉันจะไม่สามารถทดสอบได้จนถึงวันพรุ่งนี้ ผู้ร้ายคือการรีเฟรช DRAM ของ Z80 ดูคำตอบของฉันเองสำหรับรายละเอียด ขณะนี้ไม่จำเป็นต้องมีคำตอบใหม่และฉันจะยอมรับคำตอบของฉันเองเมื่อฉันยืนยันวิธีแก้ปัญหา หากไม่ได้ผลฉันจะอัปเดตคำถาม ขอบคุณสำหรับความช่วยเหลือของทุกคน


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

6
วิธีหนึ่งที่จะช่วยแยกปัญหา EMI / พลังงานออกจากปัญหาเกี่ยวกับนาฬิกา / ตรรกะคือลองใช้นาฬิกาความถี่ที่ช้ากว่าเช่น 0.5MHz หรือ 1MHz หากความผิดพลาดแปลก ๆ เปลี่ยนจาก 250ns เป็น 1us จะขึ้นอยู่กับการทำงานของโปรเซสเซอร์ หากยังคงอยู่ประมาณ 250ns แสดงว่าอาจเป็นปัญหา EMI / พลังงาน คุณมีตัวต้านทานแบบดึงขึ้น / ลงบนบัสหรือไม่ (นี่อาจเป็นการตอบสนองแบบสามสถานะ)?
W5VO

1
ดูและดูว่าแผ่นข้อมูลตัวประมวลผลแนะนำ / แนะนำตัวดึงหรือตัวต้านทานแบบดึงลงบนดาต้าบัสหรือไม่ ซึ่งจะช่วยลดโอกาสเกิดข้อผิดพลาดจากการทำงานสามสถานะ หากคุณเพิ่มคำสั่ง "inc a" ลงในโปรแกรมของคุณคุณอาจจะเข้าใจได้ว่าคำสั่งใดที่ทำให้เกิดความผิดพลาด
W5VO

1
"... อีกสอง 74HCT573 ในทิศทางตรงกันข้ามที่ควบคุมโดย RD และ NOT RD เป็นบัฟเฟอร์บัสข้อมูลสองทิศทาง" - บางทีนี่สิ กรุณาจัดหาวงจรไดอะแกรมที่แสดงสัญญาณควบคุม
Bruce Abbott

5
ฉันสงสัยว่ามันเกิดจากการรีเฟรชเมื่อสิ้นสุดรอบ M1 (opcode fetch) แต่ละรอบ ต้องการดูว่าคุณสร้าง CS และ data bus buffer ได้อย่างไร
Bruce Abbott

คำตอบ:


13

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

... อีก 74HCT573 สองทิศทางในทิศทางตรงกันข้ามที่ควบคุมโดย RD และ NOT RD เป็นบัฟเฟอร์บัสข้อมูลแบบสองทิศทาง "- อาจเป็นเช่นนี้ได้โปรดจัดหาแผนภาพวงจรที่แสดงสัญญาณควบคุม

ฉันสงสัยว่ามันเกิดจากการรีเฟรชเมื่อสิ้นสุดรอบ M1 (opcode fetch) แต่ละรอบ ต้องการดูว่าคุณสร้าง CS และ data bus buffer ได้อย่างไร

- บรูซแอ๊บบอต

บัฟเฟอร์ข้อมูลแบบสองทิศทางถูกควบคุมโดยRDและNOT RDหากRDแอ็คทีฟต่ำบัฟเฟอร์จะส่งข้อมูลไปยัง CPU มิฉะนั้นถ้าRDสูงหมายถึงการเขียน / ส่งออกบัฟเฟอร์จะขับบัส

บัฟเฟอร์ข้อมูลแบบสองทิศทาง

อย่างไรก็ตาม Z80 ทำการอ่านหน่วยความจำสำหรับการรีเฟรช DRAM ทันทีหลังจาก opcode ดึงข้อมูล ในครั้งRDนี้HIGHแม้จะเป็นการดำเนินการอ่านทำให้บัฟเฟอร์พลิกทิศทางและขับรถบัสผลลัพธ์ก็คือความขัดแย้งของบัส "รอยหยัก" แปลก ๆ จะปรากฏขึ้นเสมอในระหว่างรอบการรีเฟรช DRAM แต่จะไม่อ่าน / เขียนหรือ I / O หน่วยความจำทั่วไป นี่อธิบายได้ว่าทำไม "บาก" จะปรากฏขึ้นเสมอ แต่สำหรับบางคนเท่านั้นและไม่ใช่ 1s แบบลอจิคัลทั้งหมด

Z80 opcode เรียกไดอะแกรมไทม์มิ่ง

นอกจากนี้ SRAM ไม่จำเป็นต้องรีเฟรชดังนั้นการรีเฟรช DRAM นั้นไร้ประโยชน์อย่างสมบูรณ์ในระบบของฉันและการแข่งขันในบัสนี้จะไม่ทำให้คำแนะนำหรือข้อมูลใด ๆ เสียหายทำให้ระบบดูเหมือนว่าจะทำงานได้อย่างสมบูรณ์

วิธีการแก้ปัญหา: การดำเนินการและ(RD AND REFRESH) (NOT (RD AND REFRESH)ในการแก้ไขครั้งต่อไปฉันควรทดสอบด้วยBUSACKเพื่อให้แน่ใจว่าบัฟเฟอร์ข้อมูลไม่ได้ขับรถบัสในระหว่างการดำเนินการ DMA เช่นกัน

อัปเดต: ฉันสามารถยืนยันปัญหาและแนวทางแก้ไขได้ การใช้WRและNOT WRแก้ไขปัญหาดังที่แสดงไว้ในแผนผังใหม่( อย่าทำสิ่งนี้ผิดเช่นกันดูอัปเดต 2 )

แผนผังใหม่ (ผิด)

รูปคลื่นดูปกติแล้ว!

รูปคลื่นใหม่ที่แสดงว่าปัญหาได้รับการแก้ไขแล้ว

Update2: แผนงานข้างต้นแตกเช่นกันหากคุณเป็นผู้อ่านคำตอบนี้อย่าใช้! ถ้าสมมติว่าบัสอยู่WRเมื่อRDสัญญาณไม่ได้ใช้งานจะไม่ดีพอสมมติว่าบัสนั้นRDเมื่อWRไม่ได้ใช้งานจะยิ่งแย่ลง ฉันใช้โปรแกรมก่อนหน้าสำหรับการทดสอบครั้งแรกดังนั้นระบบจึงใช้งานได้ แต่ไม่พบปัญหาร้ายแรง

ในระหว่างรอบการเขียนหน่วยความจำซีพียู Z80 จะเริ่มขับรถบัสก่อนที่ WRจะใช้งานต่ำในเวลานี้บัฟเฟอร์ข้อมูลยังคงขับข้อมูลไปยัง CPU, โอ๊ะโอสร้างการแข่งขันรถบัส

ไดอะแกรมกำหนดเวลาการอ่าน / เขียน Z80 หน่วยความจำ

Bruce Abbott ถูกต้อง: ควรใช้RDและWRส่งสัญญาณอย่างอิสระเพื่อควบคุมบัฟเฟอร์แต่ละครั้งแทนที่จะดีกว่าการสลับอันเดียว

ตัวอย่างเช่น,

แผนผังใหม่ (คงที่ แต่ไม่รองรับ DMA คุณควรจัดการกับปัญหานั้น

มันทำงานได้อย่างสมบูรณ์แบบในขณะนี้

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


6
คุณอาจพิจารณาใช้ / WR แทน inverted / RD เพื่อเปิดใช้งานบัฟเฟอร์ด้านบน วิธีนี้บัสข้อมูลจะไม่ทำงานเว้นแต่จะมีการอ่านหรือเขียนจริง
Bruce Abbott

8

ตรวจสอบให้แน่ใจว่าคุณมีตัวเก็บประจุแยกตัวเพียงพอในทุกไอซีของคุณ เซรามิกขนาด 100nF จากพลังงานถึงดินบน IC แต่ละตัวจะรักษาตัวนำที่สั้นที่สุดเท่าที่จะเป็นไปได้และอิเล็กโทรไลต์ ESR ที่ต่ำจะบอกว่า 100uF บนเขียงหั่นขนมบนรางไฟฟ้า


ดูเหมือนว่าจะเป็นวิธีการแก้ปัญหาความไม่แน่นอนสำหรับไอซีดิจิตอลจำนวนมาก :)
23946

4
@ KingDuken อย่างแน่นอนและเป็นหัวข้อร้อนแรงสำหรับฉันเพื่อนของฉันถูกไล่ออกหนึ่งครั้งเมื่อขาดหายไปหนึ่งครั้ง เกิดความไม่มั่นคงอย่างมากในเครื่องจัดการเงินสด
RoyC

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

4

ฉันเห็นความเป็นไปได้สองอย่างที่นี่:

1) D0 ถูก tristated

อะไรก็ตามที่กำลังขับ D0 จะไปสู่ ​​tristate (โหมดความต้านทานสูง) จากนั้นแรงดึงลงที่ใดที่หนึ่งใน D0 net จะทำให้แรงดันไฟฟ้าลดลงอย่างช้าๆ (ค่าคงที่เวลาที่กำหนดโดยความต้านทานแบบดึงลง ลักษณะเลขชี้กำลังของรูปคลื่นเป็นสัญญาณบ่งชี้ว่าเส้นไม่ได้ถูกผลักดันโดยบางสิ่งที่แข็งแกร่ง แต่เป็นสัญญาณที่ค่อนข้างอ่อน

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

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

2) การแข่งขัน

สมมติฐานของคุณ # 4 นอกจากนี้ยังเป็นไปได้ที่ D0 ย่อไปยังสายตรรกะอื่น ฉันพบว่าสิ่งนี้ไม่น่าเป็นไปได้เพราะในกรณีนี้คุณจะไม่เห็นรูปคลื่นของเอ็กซ์โพเนนเชียลที่มีค่าคงที่เวลาค่อนข้างนานอย่างที่คุณเห็นตอนนี้ คุณสามารถตรวจสอบอวนอื่น ๆ ในวงจรของคุณเพื่อค้นหารูปคลื่นที่เหมือนกันซึ่งบ่งบอกว่าคุณมีช่วงเวลาสั้น ๆ

โชคดี!

ป.ล. - นี่ไม่ใช่ปัญหาความสมบูรณ์ของสัญญาณความกว้างพัลส์นั้นยาวเกินไป

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