กระบวนการเวลาใน FPGA


10

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

หากฉันมีสองโมดูลซึ่งเอาต์พุตของหนึ่งไหลไปยังอินพุตของถัดไปอาจมีสถานการณ์ที่อินพุตของโมดูลของฉัน (เอาต์พุตของโมดูลก่อนหน้า) เปลี่ยนไปพร้อมกันเมื่อถูกจับ

ภาพหน้าจอของ ISim

เครื่องหมายที่ 205ns แสดงสิ่งที่ฉันกำลังพูดถึง op และ data_write เป็นอินพุตของฉัน ทุกอย่างดูเหมือนจะ "ทำงานได้" ในกรณีทดสอบนี้ แต่ในการจำลองสถานการณ์ไม่ชัดเจนว่าจะถูกจับเมื่อใด data_write = "0001 ... " ถูกบันทึกไว้ที่ 205ns หรือ (205ns + 1 รอบนาฬิกา) หรือไม่ มีวิธีรับรูปคลื่นโดยละเอียดใน ISim ที่แสดงการตั้งค่าและกดค้างไว้หรือไม่?

ขอบคุณ

คำตอบ:


12

มักจะมีความล่าช้าในการแพร่กระจายผ่านทางฟลิปฟล็อป มันมักจะเรียกว่าความล่าช้า "clock-to-Q"

นั่นหมายความว่าอินพุตของคุณถูกจับที่ขอบและเอาต์พุตของคุณจะเปลี่ยนไปที่ขอบเดียวกัน แต่เพียงไม่กี่นาโนวินาทีในภายหลัง การหน่วงเวลาของ nanosecond สองสามนี้เพียงพอ (หาก flip-flop ของคุณได้รับการออกแบบด้วย "zero hold time" เนื่องจากอยู่ใน FPGA ส่วนใหญ่) ว่าการเปลี่ยนแปลงจะไม่มีผลต่อ flip-flop ดาวน์สตรีมใด ๆ จนกว่าจะถึงขอบนาฬิกาถัดไป

ในการจำลองการทำงานหรือ RTL (ซึ่งอาจเป็นสิ่งที่คุณกำลังทำเพื่อสร้างผลลัพธ์ของคุณ) ความล่าช้าจะไม่ถูกจำลองเป็นนาโนวินาทีที่ยั่งยืน ใน VHDL มันจะเป็นวงจรเดลต้าเดี่ยวของนาฬิกาจำลองซึ่งเป็นเทคนิคที่ไม่มีเวลาเลย สิ่งนี้ทำให้เป็นไปไม่ได้ที่จะเห็นความล่าช้าในเอาท์พุทตัวจำลอง อย่างไรก็ตามสำหรับ flip-flop แบบจำลองตามความเหมาะสมก็เพียงพอแล้วที่การเปลี่ยนแปลงเอาต์พุตจะไม่มีผลกับ flip-flop ดาวน์สตรีม

หากคุณทำการจำลองสถานการณ์หลังและเส้นทางมันควรจะสามารถรวมความล่าช้าที่เหมาะสมเพื่อให้คุณเห็นผลกระทบเหล่านี้อย่างชัดเจนในราคาที่เพิ่มความพยายามจำลอง


1
ในการจำลอง VHDL RTL การหน่วงเวลาเป็นวงจรเดลต้าเดี่ยว การดำเนินการนี้ใช้เวลาอย่างแม่นยำเป็นศูนย์ แต่ช่วยให้การจำลองดำเนินต่อไปอย่างเป็นระเบียบเนื่องจากการอัปเดตทั้งหมดในวัฏจักรเดลต้าปัจจุบันเสร็จสมบูรณ์ก่อนที่วัฏจักรเดลต้าถัดไปจะเริ่มต้นขึ้น เมื่อไม่มีการกำหนดเดลต้ารอบแล้วเวลาสามารถไปต่อ
Martin Thompson

1

ที่ขอบนาฬิกาที่ต้องการ (เพิ่มขึ้นหรือลดลง) อินพุตที่ D ปรากฏที่เอาต์พุต Q ใช้เวลาจำนวน จำกัด (เลื่อนไปที่ Q / Q) และสมมติว่าไม่มีการละเมิดเวลา D จะผ่านหนึ่ง FF ในแต่ละครั้ง (เช่นถ้ามีอินพุต FFs อื่นเชื่อมต่อกับ Q, FF ที่สองจะผ่านค่า FF1 Q ก่อนที่จะเปลี่ยน

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


1

นี่คือความหมายเพิ่มเติมจากคำตอบก่อนหน้านี้จาก whcih ฉันเชื่อว่าคุณได้รับความคิด

เรื่องเหล่านี้อาจเป็นเรื่องยากในการเริ่มต้นเมื่อการจำลองการออกแบบ RTL เนื่องจากพบว่ามันยากที่จะเห็นว่าอะไรคือสาเหตุและสิ่งที่เป็นผลในการจำลองอุดมคติ / การทำงาน / RTL (= ไม่มีความล่าช้าการแพร่กระจาย)

ด้วยเครื่องมือจำลองที่ถูกต้องความล่าช้าของเดลต้าสามารถมองเห็นได้จริง ISim ไม่ได้ทำ แต่ใน ei ModelSim คุณสามารถเปิดใช้งานการขยายเดลต้ารอบขอบนาฬิกา ด้านล่างนี้เป็นตัวอย่างภาพหน้าจอจาก IP ของบุคคลที่สามที่ฉันติดขัด

การขยายตัวล่าช้าเดลต้าใน ModelSim

cคือสัญญาณนาฬิกาและ+1อื่น ๆ คือรอบเดลต้าซึ่งมองเห็นเป็นเวลา

หากการออกแบบถูกจำลองทั้งที่การจำลองและการออกแบบนั้นเหมาะอย่างแท้จริงและซิงโครนัสโดยไม่มีการจำลองล่าช้าคุณสามารถดูการเปลี่ยนแปลงสัญญาณทั้งหมดบนปีกนาฬิกาที่เฉพาะเจาะจงได้โดยหลักการแล้วเกิดขึ้นเล็กน้อยหลังจากปีกนาฬิกานั้น ในตัวอย่างของคุณดังนั้นที่ 205 ns data_write= 0000...คือสิ่งที่ถูกจับ บางตรรกะอื่น ๆ ในหน่วยแรกที่มีการเปลี่ยนแปลงสัญญาณdata_writeไป0001...บนปีกเดียวกันและสัญญาณที่ปรากฏบนdata_writeเล็กน้อยหลังจากที่ปีกนาฬิกา "เล็กน้อยหลังจาก" นี้จะเป็นหนึ่งหรือหลายเดลต้าจำลองในการจำลองในอุดมคติ (ตัวอย่างของคุณ) (ไม่ปรากฏใน ISim แต่ในตัวอย่างเช่น ModelSim พร้อมการขยายเดลต้า) หรือบาง ps / ns ในโลกแห่งความเป็นจริง

ข้อสังเกตด้านข้าง: สิ่งสำคัญอย่างหนึ่งที่มีการออกแบบ RTL คือการตรวจสอบให้แน่ใจว่าอินพุตถูกสุ่มตัวอย่างบนปีกนาฬิกาเสมอ- แม้แต่วงจรเดลต้าหนึ่งรอบในภายหลังก็สายเกินไป อินพุตอาจไม่ถูกต้องหนึ่งเดลต้าในภายหลัง หรือพูดอีกอย่างก็คือ: "อย่ายุ่งกับเส้นทางนาฬิกา"

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