ฉันเป็นวิศวกรไฟฟ้าคนใหม่ ฉันได้ยินวิศวกรคนอื่น ๆ ที่ฉันทำงานด้วยพูดคุยเกี่ยวกับสภาพการแข่งขันที่มีอยู่ในวงจรหนึ่งของเรา
นั่นหมายความว่าอย่างไร?
ฉันเป็นวิศวกรไฟฟ้าคนใหม่ ฉันได้ยินวิศวกรคนอื่น ๆ ที่ฉันทำงานด้วยพูดคุยเกี่ยวกับสภาพการแข่งขันที่มีอยู่ในวงจรหนึ่งของเรา
นั่นหมายความว่าอย่างไร?
คำตอบ:
มันหมายถึงว่าเพียงสองสิ่งในเวลาเดียวกัน "การแข่งขัน" สำหรับผลลัพธ์
ตัวอย่างคือวงจรที่มีขาตั้งค่าและขาตั้งหากคุณทริกเกอร์การรีเซ็ตเอาต์พุตกลายเป็น 0 หากคุณทริกเกอร์ตั้งค่าเอาต์พุตจะกลายเป็น 1 หากคุณทริกเกอร์ชุดแรกและจากนั้นรีเซ็ตอย่างรวดเร็วหลังจากนั้นให้รีเซ็ต จะเห็นดังนั้นผลลัพธ์คือ 0
แต่ถ้าทั้งคู่ถูกกระตุ้นในเวลาเดียวกันจะเกิดอะไรขึ้น
หากผู้ออกแบบวงจรให้ความสนใจควรมีคำตอบถ้าสิ่งนั้นสำคัญต่อฟังก์ชั่น หากไม่มีคำตอบสำหรับคำถามนั้นวงจรจะมีสภาพการแข่งขันที่สัญญาณจากชุดและการรีเซ็ต "การแข่งขัน" ซึ่งกันและกันเพื่อดูว่าใครชนะเพื่อกำหนดเอาท์พุท
เส้นทางที่มีการหน่วงเวลาน้อยที่สุดจะเป็นผู้ชนะ แต่จากนั้นคุณจะเห็นสภาพการแข่งขันเป็นทริกเกอร์ที่แน่นอนซึ่งเส้นทางที่ล่าช้าที่สุดจะถูกเรียกใช้ให้มากก่อนเส้นทางที่เร็วกว่า
วงจรจำนวนมากรวมถึงหน่วยการสร้างลอจิกภายในไอซีมีสภาพการแข่งขันบางอย่าง แต่โดยปกติวงจรเหล่านี้จะเป็นเช่นนั้นเมื่อคุณใช้วงจรตามที่ตั้งใจไว้คุณจะไม่สังเกตเห็น บ่อยครั้งเมื่อวิศวกรพูดว่า "สภาพการแข่งขัน" ออกมาดัง ๆ สองสามครั้งจริง ๆ แล้วพวกเขาหมายความว่ามันเป็นสิ่งที่เกิดขึ้นในการใช้งานปกติซึ่งจะเป็นปัญหาเพราะในสภาพการทำงานปกติของสภาพการแข่งขันไม่สามารถทำนายได้
ในซอฟต์แวร์ยังใช้คำนี้ แต่บ่อยครั้งเพื่อระบุปัญหาเรื่องเวลาหรือล็อคอัพ มันเป็นหลักการที่คล้ายกันแม้ว่า บ่อยครั้งเมื่อคุณมีสองกระบวนการในคอมพิวเตอร์ที่ทำงานอย่างอิสระ แต่การใช้หน่วยความจำเดียวกันคุณจะป้องกันหน่วยความจำนั้นไม่ให้ถูกเขียนโดยหนึ่งในขณะที่อีกกระบวนการหนึ่งกำลังใช้งานอยู่ หากพวกเขาไม่เรียกว่าสภาพการแข่งขันที่เป็นไปได้: กระบวนการหนึ่งอาจอ่านค่าที่เพิ่งจะได้รับการปรับปรุงหรือทั้งสองอย่างสามารถเขียนถึงมันในเวลาเดียวกันและจากนั้นคุณไม่รู้ว่าอะไรจะเกิดขึ้น เกิดขึ้น
fopen()
ข้อมูลเขียนไปfclose()
มันแล้วchmod()
มันเพื่อความปลอดภัย หน้าต่างสั้น ๆ นั้นระหว่างfopen()
และchmod()
เปิดสภาวะการแย่งชิงที่เป็นไปได้ซึ่งโหมดไฟล์เริ่มต้นอาจอนุญาตให้บุคคลภายนอกที่ไม่ต้องการทำงานกับไฟล์ในวิธีที่ถูกปฏิเสธหลังจากการchmod()
โทร ทางออกคือการสร้างไฟล์ด้วยopen()
แทนซึ่งช่วยให้การตั้งค่าโหมดเป็นส่วนหนึ่งของการดำเนินการสร้างไฟล์
คำว่า "สภาพการแข่งขัน" บ่งบอกว่า (1) สัญญาณสองสัญญาณหรือมากกว่านั้นอาจมาถึงในลำดับใดก็ได้ใกล้กันโดยพลการและ (2) เป็นไปไม่ได้ที่จะแสดงการวิเคราะห์ว่ามีความน่าจะเป็นศูนย์ใด ๆ เวลาวางตัวปัญหา
จากมุมมองของฟลิปฟล็อปเดี่ยวซึ่งข้อมูลป้อนเข้าอาจเปลี่ยนแปลงได้ทุกเวลาที่เกี่ยวกับนาฬิกาการเปลี่ยนใกล้นาฬิกาพร้อมกันและการป้อนข้อมูลอาจทำให้เกิดสภาพการแข่งขัน จากมุมมองของพฤติกรรมวงจรโดยรวมอย่างไรก็ตามพวกเขาจะไม่ก่อให้เกิดสภาพการแข่งขันหากพวกเขาสามารถเกิดขึ้นได้ในบางครั้งเมื่อไม่มีกระแสดาวน์สตรีมเท่านั้นที่จะดูแลเกี่ยวกับสิ่งที่สลักไว้และไม่มีวงจรกระแสไฟฟ้า จนกระทั่งหลังจากการมาถึงของพัลส์นาฬิกาซึ่งไม่สามารถอยู่ใกล้กับการเปลี่ยนแปลงใด ๆ ในอินพุตข้อมูล
เพิ่มเติมเนื่องจากบ่อยครั้งที่ไม่สามารถกำจัดการกำหนดเวลาที่เป็นปัญหาได้อย่างสมบูรณ์การวิเคราะห์สภาพการแข่งขันหลายอย่างจะบอกว่าถ้าเอาท์พุทของการลงทะเบียนครั้งเดียวถูกป้อนเข้าอีกที่ควบคุมด้วยนาฬิกาเดียวกันการลงทะเบียนครั้งที่สองจะสลัก "สะอาด" สูงหรือต่ำ "สะอาด" แม้ว่าอินพุตเข้าสู่การลงทะเบียนครั้งแรกทำให้เกิดการบันทึกระดับอินพุตที่ถูกต้องที่จุดเปลี่ยน ในทางทฤษฎีมันจะเป็นไปได้สำหรับสลักแรกที่จะจับระดับที่สูงกว่าหรือต่ำกว่าขีด จำกัด การสลับที่แน่นอนว่าระดับเอาท์พุทจะเปลี่ยนอย่างแม่นยำเมื่อชีพจรนาฬิกาถัดไปมาถึง
เป็นผลให้ถ้ามีคนเช่นจะใช้อินพุทและส่งมันเป็นลำดับของสาม flip flops และมีวงจรที่เอาท์พุทสูงเมื่อใดก็ตามที่ flop ที่สองสูง แต่อันที่สามต่ำแล้วขอบที่เพิ่มขึ้นใด ๆ ที่เกิดขึ้น การป้อนข้อมูลซึ่งนำหน้าด้วยช่วงเวลาเต็มของนาฬิกาที่มีค่าเวลาต่ำและตามด้วยช่วงเวลาเต็มเวลาที่มีเวลาสูงจะได้รับการรับประกันเป็นหลักในการทำให้วงจรเอาท์พุทของวงจรจะสูงในช่วงเวลาหนึ่งนาฬิกา
จำลองวงจรนี้ - แผนผังที่สร้างโดยใช้CircuitLab
ในแผนผังนี้สัญญาณที่มีช่วงเวลาค่อนข้างผิดปกติถูกปรับให้เป็นสัญญาณนาฬิกาในสามวิธีในรูปแบบดังกล่าวเพื่อสร้างเอาต์พุตที่สูงสำหรับหนึ่งรอบนาฬิกาหลังจากแต่ละขอบที่เพิ่มขึ้น ความพยายามครั้งแรกในการทำให้สัญญาณเป็นปกติจะสร้างเอาต์พุตที่ดูน่ารังเกียจและมีสภาพการแข่งขันที่ชัดเจนหากอินพุตและนาฬิกาเปลี่ยนไปพร้อมกัน วิธีที่สองนั้นดีกว่ามาก แต่ก็ยังมีสภาพการแข่งขัน (ซึ่งเครื่องจำลองไม่สามารถกระตุ้นได้) หากเวลาของนาฬิกาและข้อมูลทำให้การลงทะเบียนครั้งแรกเพื่อจับค่ากลาง วิธีที่สามแสดงถึงการปฏิบัติทั่วไปและโดยทั่วไปจะถือว่าปลอดภัยเนื่องจากแม้ว่าการลงทะเบียนครั้งแรกล้มเหลวในการจับสูงหรือต่ำสะอาด ไม่น่าเป็นไปได้มากที่ผลลัพธ์จากการลงทะเบียนครั้งแรกจะมีพฤติกรรมที่ถูกต้องที่จะทำให้การลงทะเบียนครั้งที่สองไม่คว้าอย่างหมดจด หากข้อมูลมีการเปลี่ยนแปลงใกล้กับนาฬิกาข้อมูลนั้นอาจถูกจับในรอบปัจจุบันหรือไม่ถูกจับจนกว่าจะถึงเวลาต่อไป แต่หากสถานการณ์ใดสถานการณ์หนึ่งเป็นที่ยอมรับก็ไม่มีสภาพการแข่งขัน
กล่าวโดยย่อก็หมายความว่าผลลัพธ์ของกระบวนการจะได้รับผลกระทบจากลำดับการมาถึงของอินพุตทั้งสองและลำดับนั้นไม่แน่นอน (ไม่สามารถรับประกันได้)