เหตุใดจึงมีความต้องการการเรียกใช้ขอบมากกว่าการเรียกระดับ


18

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

นอกจากนี้ฉันไม่สามารถเข้าใจสิ่งต่อไปนี้: "ถ้านาฬิกามีความละเอียดอ่อนระดับใหม่สามารถวิ่งผ่านเครือข่ายลอจิกและเปลี่ยนผลลัพธ์ได้เพื่อหลีกเลี่ยงสิ่งนี้เราต้องใช้พัลส์สั้นเพื่อจับสัญญาณเอาท์พุท แต่พัลส์สั้น ๆ นั้นไม่ใช่เรื่องง่ายที่จะสร้างดังนั้นเราจึงไปหาจุดวิกฤติขอบปัญหาข้อเสนอแนะได้รับการแก้ไขเพราะมีเวลาไม่เพียงพอสำหรับผลลัพธ์ใหม่ที่จะแข่งกลับไปที่อินพุตภายในระยะเวลาของขอบที่เพิ่มขึ้นเพียงครั้งเดียว "Qn

ฉันไม่เข้าใจว่าทำไมเอาต์พุตไม่รีบเร่งในระดับที่กระตุ้นและทำไมเราต้องใช้พัลส์สั้นเพื่อเก็บเอาท์พุท

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

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


1
"เมื่อมีการใช้การทริกเกอร์ขอบเอาท์พุทจะถูกส่งผ่านประตูทั้งหมดและอินพุตต่อไปจะถูกพิจารณาเฉพาะที่ขอบนาฬิกาถัดไป" - เป้า !!
Wouter van Ooijen

คำตอบ:


12

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

ปัญหาของการทริกเกอร์ระดับคือในขณะที่ระดับนาฬิกาสูงอินพุตจะเปลี่ยนเอาต์พุต ในวงจรที่มีผลป้อนกลับ (เอาต์พุตเชื่อมต่อกลับไปยังอินพุต) ระดับที่ก่อให้เกิดความโกลาหลเนื่องจากระดับกว้างพอ (ครึ่งรอบนาฬิกา) ที่เอาต์พุตสามารถป้อนกลับไปยังอินพุตภายในช่วงเวลาเดียวกัน

เสื้อเสื้อ+1

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

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

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


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

ตัวอย่างที่ง่ายที่สุดนี้เป็นmaster ทาสปัดพลิก สิ่งนี้ประกอบด้วยรองเท้าแตะ D ที่ถูกทริกเกอร์สองระดับที่เรียงกัน แต่สัญญาณนาฬิกากลับด้านดังนั้นสัญญาณของสัญญาณหนึ่งถูกเปิดใช้งานในขณะที่สัญญาณอื่นถูกปิดใช้งานและในทางกลับกัน นี่เป็นเหมือนประตูล็อคอากาศ โดยรวมแล้วฟล็อบฟล็อปไม่เคยเปิดเพื่อให้สัญญาณสามารถผ่านได้อย่างอิสระ หากเรามีข้อเสนอแนะจากผลลัพธ์ของ flip-flop กลับไปที่อินพุตก็จะไม่มีปัญหาเพราะมันข้ามไปยังเฟสนาฬิกาอื่น ผลลัพธ์สุดท้ายคือฟลิปฟลอร์มาสเตอร์แสดงพฤติกรรมที่ถูกกระตุ้นจากขอบ! มันมีประโยชน์ในการศึกษา flip-flop มาสเตอร์ทาสเพราะมันมีบางอย่างที่จะพูดเกี่ยวกับความสัมพันธ์ระหว่างระดับและการเรียกใช้ขอบ


1
นาฬิกาหลายเฟสที่ไวต่อระดับหลีกเลี่ยงปัญหา "ความโกลาหล" หากไม่มีเอาต์พุตของสลักดึงกลับไปยังอินพุตโดยไม่ต้องผ่านสลักซึ่งจะถูกสุ่มตัวอย่างในเฟสนาฬิกาที่แตกต่างกัน การออกแบบดังกล่าวอาจมีข้อได้เปรียบบางอย่างเมื่อเชื่อมต่อโปรเซสเซอร์กับสิ่งต่าง ๆ เช่นความทรงจำแบบอะซิงโครนัสเนื่องจากเวลาระหว่างขอบชั้นนำของเฟสนาฬิกาหนึ่งและขอบต่อท้ายของถัดไปอาจถูกแบ่งโดยพลการ เวลาของ RAM และเวลาการตั้งค่าสำหรับอินพุตข้อมูลของโปรเซสเซอร์
supercat

2
@supercat เป็นตัวอย่างที่คุ้นเคย master-slave flip-flop อาจถูกพิจารณาว่าเป็นตัวอย่างของการตอกบัตรแบบหลายเฟส เจ้านายและทาสอยู่ในขั้นตอนที่ตรงกันข้ามดังนั้นเงื่อนไขเดียวกันจะเก็บไว้หากมีข้อเสนอแนะ: มันจะไปที่ขั้นตอนที่แตกต่างกัน ฉันควรเพิ่มสิ่งนี้ในคำตอบเพื่อปัดเศษออก
Kaz

2
+1 air lock analogy ฉันไม่เคยได้ยินใครอธิบายอย่างนี้ แต่มันก็สมเหตุสมผลดี
ajs410

@ ajs410: การเปรียบเทียบอื่นที่ฉันชอบคือการหลบหนีเครื่องจักร ลูกตุ้มเชื่อมต่อกับแขนสองข้างซึ่งแต่ละอันสามารถปล่อยให้เฟืองหลบหนีเคลื่อนที่ได้อย่างอิสระหรือปิดกั้นในครั้งต่อไปที่ถึง "เฟส" เพื่อการทำงานที่เหมาะสมต้องปรับแขนเพื่อไม่ให้มีเวลาที่แขนทั้งสองข้างจะหมุนเฟือง กลไกจะหมุนออกจากการควบคุมอย่างดุเดือด
supercat

2

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

ในทางตรงกันข้ามการสร้างวงจรเพื่อนับพัลส์ในอินพุตเดี่ยวโดยไม่ใช้แลตช์แบบทริกเกอร์แบบขอบจะต้องมีการรับประกันที่แน่นอนเกี่ยวกับความเร็วสัมพัทธ์ของบางส่วนของวงจร วิธีการทั่วไปที่ใช้ในการแปลงสัญญาณนาฬิกาที่เข้ามา (ClkIn) เป็นสัญญาณนาฬิกาคู่ที่ไม่ทับซ้อนกัน (พี 1 และพี 2) phi1 เป็นจริงเมื่อ ClkIn สูงและได้รับสูงสำหรับบางเวลารับประกันขั้นต่ำ Phi2 สูงเมื่อ ClkIn ต่ำและต่ำสำหรับการรับประกันขั้นต่ำ. เมื่อ ClkIn เปลี่ยนจากต่ำไปสูง Phi2 จะต่ำลงก่อนที่ Phi1 จะสูง เช่นเดียวกันเมื่อมันสลับจากสูงไปต่ำ เราสามารถสร้างตัวนับได้โดยมีสลักสองชุด (ซึ่งฉันจะเรียกว่า Count1 และ Count2) เมื่อใดก็ตามที่ Phi1 สูง Count1 จะนับ Count2 เมื่อใดก็ตามที่ Phi2 สูงจะมีการนับ Count2 (นับ 1 +1) หากพี 1 และพี 2 ทั้งคู่สูงขึ้นในครั้งเดียวหรือมีเวลาน้อยเกินไประหว่างกันค่าของตัวนับจะไม่แน่นอน แต่หากมีการแยกตัวที่เหมาะสมไว้ตัวนับจะทำงานได้อย่างดี ระบบสองเฟสที่มีโอเวอร์คล็อกมักจะมีการแยกเชิงวิศวกรรมค่อนข้างมาก ให้ทุกอย่างเร็วพอแยกดังกล่าวสามารถหลีกเลี่ยงปัญหากับนาฬิกาเอียง

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

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


2

เพื่อให้เข้าใจว่าเหตุใดจึงเป็นที่ต้องการใช้การเรียกใช้ขอบลองนึกภาพตัวบวก 8 บิตเชื่อมต่อกับรีจิสเตอร์เพิ่มค่า 1 ของค่ารีจิสเตอร์อย่างต่อเนื่อง

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

หากพินการเปิดใช้งานมีความไวต่อขอบแทนเนื้อหาของการลงทะเบียนจะเพิ่มขึ้นอย่างแน่นอนทุกครั้งที่กดปุ่มไม่ว่าจะกดปุ่มนานเท่าใด (สมมติว่าอินพุตนั้นถูก debounce อย่างถูกต้อง) มันจะเป็นไปไม่ได้สำหรับผลลัพธ์ของการลงทะเบียนเพื่อให้กลับไปยัง adder ในเวลาสำหรับพฤติกรรมใด ๆ ที่ไม่ได้กำหนดไว้


1

เช่นเดียวกับคนอื่น ๆ กล่าวว่าขอบเป็นช่วงเวลาที่เฉพาะเจาะจงมากในเวลา เราทุกคนรู้ว่าวงจรดิจิตอลสามารถผ่านจุดบกพร่องที่เอาต์พุตของเกตผิดเนื่องจากมีอินพุตเพียงไม่กี่ตัวเท่านั้นสัญญาณอื่นกำลังมาและใช้เวลานานกว่าเนื่องจากเส้นทางที่ยาวกว่า (ไฟฟ้าเดินทางค่อนข้างเร็ว แต่ยังคง 3x10 ^ 8 m / s ใช้เวลาเล็กน้อยในการเดินสาย) หากเรามีหน่วยระดับที่สูงขึ้นก็จะได้รับผลกระทบจากข้อบกพร่อง ด้วยการทำให้สิ่งต่าง ๆ เกิดขึ้นเรามีหน้าต่างแคบมากในเวลาที่ "สิ่งต่าง ๆ เกิดขึ้น" กล่าวอีกนัยหนึ่งวงจรจะเปลี่ยนสถานะของมัน (ค่าต่าง ๆ ในสายต่าง ๆ ในวงจรรวมทั้งเอาท์พุท) ที่แน่นอนกำหนดไว้ใน เวลา. โปรดทราบวลี "ทันเวลา"

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


1

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

ลองนึกภาพคุณต้องการออกแบบวงจรที่มีข้อเสนอแนะบางอย่าง พูดA = A.B(โดยทั่วไปคือประตู AND พร้อมด้วยข้อเสนอแนะ) หากคุณใช้งานโดยใช้สลักที่ละเอียดอ่อนระดับง่ายซึ่งเก็บค่าของ A วงจรของคุณจะมีลักษณะดังนี้ ป้อนคำอธิบายรูปภาพที่นี่

สิ่งนี้สามารถสร้างปัญหาได้ A and Bเมื่อนาฬิกาสูงสลักกลายเป็นโปร่งใสและประตูและคำนวณค่าใหม่ของ แต่ค่าจะถูกป้อนกลับไปยังสลักและเนื่องจากสลักยังคงโปร่งใส (CLK ยังคงสูง) ค่าใหม่ของการA AND Bคำนวณ นี่คือสิ่งที่เรียกกันโดยทั่วไปว่าเงื่อนไขการแข่งขันซึ่งจะสร้างข้อบกพร่อง (เสียงสูงและต่ำที่ไม่คาดคิดในผลลัพธ์) ที่คุณกล่าวถึง

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

ตัวเลือกที่เป็นไปได้มากกว่าที่สองคือการใช้องค์ประกอบที่มีความละเอียดอ่อน (flip flop ในกรณีนี้) ซึ่งโดยทั่วไปแล้วจะมีสลักสองอันเชื่อมต่ออย่างฉลาด

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

โดยทั่วไปเมื่อCLKสัญญาณสูง latch U1 จะโปร่งใสซึ่งนำค่าตรรกะที่อินพุต A ไปยังเอาต์พุตของ latch U1 เมื่อCLKสัญญาณเป็น LOW latch U2 จะโปร่งใสและค่าใหม่ของการA AND Bคำนวณ แต่ค่านี้จะแพร่กระจายไปยังอินพุตของเกต AND เฉพาะเมื่อสลัก U1 กลายเป็นโปร่งใส (CLK คือสูง) และทำให้สลัก U1 กลายเป็นโปร่งใส (CLK คือ LOW) ซึ่งโดยทั่วไปเทียบเท่ากับบอกว่าตอนนี้วงจรไวต่อขอบ (ค่าเอาต์พุตเปลี่ยนเฉพาะที่ขอบลบของนาฬิกา)

สิ่งนี้จะช่วยหลีกเลี่ยงปัญหาสภาพการแข่งขันที่อธิบายไว้ก่อนหน้านี้และนั่นเป็นเหตุผลว่าทำไมจึงมีความต้องการการกระตุ้นระดับมากกว่าการเรียกใช้ขอบ

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