std_logic หรือ std_ulogic?


24

ดูเหมือนว่าโลกได้ตัดสินใจแล้วว่าstd_logic(และstd_logic_vector) เป็นวิธีเริ่มต้นในการเป็นตัวแทนบิตใน VHDL ทางเลือกจะเป็นstd_ulogicซึ่งไม่ได้รับการแก้ไข

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

คำถาม: นี่เป็นเพียงวัฒนธรรม / ประวัติศาสตร์หรือมีเหตุผลทางเทคนิคที่จะใช้ std_logic หรือไม่


3
"โลก" ผิดไป วิศวกรที่ชาญฉลาดใช้ std_ulogic เนื่องจากมีความหมายที่ถูกต้อง
wjl

@wjl ฉันจะตีความว่าเป็น "มันเป็นเรื่องของวัฒนธรรม / ประวัติศาสตร์" คำตอบของคุณด้านล่างมีประโยชน์มากกว่าความคิดเห็นที่นี่
ฟิลิปป์

ฉันเขียนความคิดเห็นก่อนจากนั้นคิดว่ามันจะเหมาะสมกว่าที่จะตอบคำถามเฉพาะเจาะจงมากขึ้น ขออภัยฉันเดาว่ามันจะฟังดูคล่องแคล่วเล็กน้อย แต่ความคิดเห็นของฉันเป็นตัวอักษรที่คนส่วนใหญ่เริ่มใช้ std_logic เพราะพวกเขาเรียนรู้แบบนั้นหลังจากนั้นไม่นานพวกเขาเริ่มสงสัยเกี่ยวกับ std_ulogic พวกเขาค้นหามันตระหนักถึงความหมายของมันแล้วแปลงเป็น =)
wjl

คำตอบ:


16

Std_logic เป็นชนิดย่อยของ std_ulogic และมีตรงหนึ่งคุณสมบัติพิเศษ: มันแก้ไขได้ถ้ามีไดรเวอร์หลาย

ไม่คำนึงถึงการปฏิบัติทั่วไป std_ulogic เป็นประเภทที่ถูกต้องที่จะใช้สำหรับสัญญาณที่ไม่ได้รับการแก้ไขที่ต้องใช้ตรรกะ 9 ค่า (บ่อยครั้งการใช้ "บิต" นั้นถูกต้องมากขึ้นเช่นใน FPGA บางสถาปัตยกรรมที่ไม่มีสิ่งใดเช่น 'X' หรือ 'U')

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


8
สถาปัตยกรรมอาจไม่มี 'U' แต่มักจะมีประโยชน์ในการจำลองราวกับว่ามันทำตามที่คุณสามารถหาการเริ่มต้นที่ไม่ถูกต้อง +1 สำหรับ "สิ่งที่ดีที่สุดที่ต้องทำคือใช้ประเภทที่ถูกต้องสำหรับงาน" แต่เรามักจะเรียนรู้เมื่อเราดำเนินการต่อเกี่ยวกับสิ่งที่ "ดีที่สุด" :)
Martin Thompson

8

ประวัติของฉันคือ:

ฉันเริ่มต้น (ประมาณปี 1999 IIRC) ใช้std_ulogic*ตลอดเวลา - เป็นสิ่งที่ถูกต้องที่จะทำด้วยเหตุผลที่คุณอธิบาย

จากนั้นฉันก็ต้องติดต่อกับตัวช่วยสร้างเครือข่าย IP ของผู้ขายซึ่งทั้งหมดมีstd_logicอยู่ในส่วนต่อประสาน ซึ่งหมายความว่าการแปลงในพอร์ตแมป (สำหรับ_vectorองค์ประกอบ) std_logic*และผมได้ขี้เกียจและย้ายไปใช้

อย่างไรก็ตามฉันดูเหมือนจะทำผิดพลาด "double-driver" เพียงเล็กน้อยดังนั้นฉันจึงไม่พลาดเลยstd_ulogicอย่างที่คิด และdriversคำสั่งของ Modelsim ทำให้ง่ายต่อการค้นหา "ใครกำลังขับรถอะไร" เมื่อฉันต้อง ...


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

คุณไม่ต้องแปลงระหว่าง std_logic และ std_ulogic บนพอร์ต คุณหมายถึงคุณต้องแปลงระหว่าง std_logic_vector และ std_ulogic_vector ใช่ไหม
wjl

@wjl: ขอโทษใช่นั่นคือสิ่งที่ฉันหมายถึง ฉันจะอัปเดตโพสต์
Martin Thompson

AFAIK, std_logic และ std_ulogic นั้นเข้ากันได้กับการมอบหมายเนื่องจากมันมีประเภทฐานเดียวกัน ดังนั้นไม่จำเป็นต้องมีการแปลงด้วยตนเอง
Val

@Val: นั่นคือสิ่งที่ wjl พูด (และฉันเห็นด้วยกับ) - แต่*vectorส่วนของพอร์ตยังต้องการการแปลง
Martin Thompson

4

IIRC แนะนำวิธีการใช้ซ้ำที่มีชื่อเสียงแนะนำstd_logic(_vector)ดังนั้นอาจมีกลุ่มวิธีการใน บริษัท อื่น ๆ แพร่กระจายไปในรูปแบบของคำแนะนำการเข้ารหัส (จำเป็น) ส่วนตัว +1 สำหรับใช้std_ulogicเมื่อเป็นไปได้


2

ฉันรู้ว่ามันเป็นสไลด์โชว์ ppt สีน่ากลัว แต่มันอธิบายความแตกต่างที่ดีงาม:

http://web.archive.org/web/20151026150828/http://www.cs.auckland.ac.nz/~jmor159/reconfig/ppt/ResolutionFunctions.ppt


1
ลิงก์เสียเก็บถาวรที่นี่: web.archive.org/web/20151026150828/http://www.cs.auckland.ac.nz/…
LuisF
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.