เมื่อใดจึงควรใช้ STD_LOGIC ผ่าน BIT ใน VHDL


10

อะไรคือความแตกต่างระหว่างการใช้:

ENTITY MyDemo is 
    PORT(X: IN STD_LOGIC; F: OUT STD_LOGIC );
END MyDemo; 

และ

ENTITY MyDemo is 
    PORT(X: IN BIT; F: OUT BIT );
END MyDemo; 

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


คำตอบ:


10

Bitเป็นประเภทที่กำหนดไว้ล่วงหน้าและสามารถมีเพียงค่าหรือ0 ประเภทเป็นค่าที่เงียบสงบ1Bit

type Bit is ('0', '1');

std_logicเป็นส่วนหนึ่งของstd_logic_1164แพ็คเกจและให้การสร้างแบบจำลองสัญญาณที่สมจริงยิ่งขึ้นภายในระบบดิจิตอล มันมีความสามารถในการมีเก้าค่าที่แตกต่างกัน โดยปกติภายในรหัสของคุณคุณจะใช้0, 1และZ(High-Z) แต่U(Uninitialized) และX(ไม่ทราบ) ก็มีประโยชน์มากเช่นกันเมื่อสร้างแบบจำลองระบบใน testbench

    -------------------------------------------------------------------    
    -- logic state system  (unresolved)
    -------------------------------------------------------------------    
    TYPE std_ulogic IS ( 'U',  -- Uninitialized
                         'X',  -- Forcing  Unknown
                         '0',  -- Forcing  0
                         '1',  -- Forcing  1
                         'Z',  -- High Impedance   
                         'W',  -- Weak     Unknown
                         'L',  -- Weak     0       
                         'H',  -- Weak     1       
                         '-'   -- Don't care
                       );

--    attribute ENUM_ENCODING of std_ulogic : type is "U D 0 1 Z D 0 1 D";

    -------------------------------------------------------------------    
    -- *** industry standard logic type ***
    -------------------------------------------------------------------    
    SUBTYPE std_logic IS resolved std_ulogic;

std_logic_1164แพคเกจนอกจากนี้ยังมีฟังก์ชั่นแปลงการแปลงไปstd_logicBit


6

std_logicคนส่วนใหญ่ใช้ ที่ช่วยให้u(ไม่ได้กำหนด), x(ไม่ทราบ) และz(ความต้านทานสูง) ซึ่งบิตไม่ได้ ในขณะที่คุณไม่อาจทำการ tristate ในชิปดังนั้นจึงไม่จำเป็นzแต่uมีประโยชน์สำหรับการค้นหาการรีเซ็ตที่หายไป xมีประโยชน์สำหรับการค้นหาไดรเวอร์หลายตัว


7
ฉันคิดว่ามันตลกที่คุณพูดถึงประโยชน์ของXการค้นหาไดรเวอร์หลายตัว std_logicแน่นอนว่าเป็นประเภทมาตรฐานอุตสาหกรรมสำหรับ VHDL แต่มันก็เป็นคุณสมบัติที่ใช้ในทางที่ผิดมากที่สุดของ VHDL std_logicเป็นสัญญาณที่ได้รับการแก้ไขซึ่งหมายความว่ามีการใช้ฟังก์ชั่นเพื่อแก้ไขค่าของสัญญาณในกรณีที่มีไดรเวอร์หลายตัว แต่ในกรณีส่วนใหญ่หลายไดรเวอร์มีข้อผิดพลาด โดยใช้ชนิดที่ไม่ได้แก้ไขเช่นstd_ulogicนี้จะถูกทำเครื่องหมายโดยคอมไพเลอร์เป็นข้อผิดพลาด
trondd

@trondd: std_ulogicจุดดีเกี่ยวกับ แต่โปรดจำไว้ว่าหลายแกนจะถูกเขียนด้วยstd_logicดังนั้นคุณอาจจะเห็นบางส่วนของมัน
Brian Carlton

1
std_logicเป็นประเภทที่พบได้บ่อยที่สุด ฉันแค่เถียงว่ามันใช้ไม่ได้ตามความตั้งใจเดิม: การสร้างแบบจำลองของสัญญาณหลายรัฐ สำหรับการออกแบบภายในเรามักจะพิจารณา1หรือ0และไดรเวอร์เดียว ดูelectronics.stackexchange.com/questions/17524/…สำหรับการอภิปรายอย่างละเอียดเกี่ยวกับหัวข้อ
trondd

5

std_logic มีฟังก์ชั่นความละเอียด

ไม่เพียง แต่จะstd_logicมีสถานะที่มีประโยชน์มากกว่าเท่านั้น1และ0ยังมีฟังก์ชั่นการแก้ปัญหาที่กำหนดไว้ด้วย

ฟังก์ชั่นการแก้ไขเป็นแนวคิดภาษา VHDL มันเป็นฟังก์ชั่นที่เกี่ยวข้องกับประเภทและกำหนดว่าจะเกิดอะไรขึ้นเมื่อมีการใช้ค่าหลายประเภทกับสัญญาณเดียว ไวยากรณ์คือ:

SUBTYPE std_logic IS resolved std_ulogic;

โดยที่std_ulogicรุ่นที่ยังไม่ได้แก้ไข (และมีประโยชน์น้อยกว่า) std_logicคือ

โดยเฉพาะอย่างยิ่งนี่หมายถึงสิ่งที่ดีเช่น0และ1นำไปสู่X:

library ieee;
use ieee.std_logic_1164.all;

entity std_logic_tb is
end std_logic_tb;

architecture behav of std_logic_tb is
    signal s0 : std_logic;
begin
    s0 <= '0';
    s0 <= '1';
    process
    begin
        wait for 1 ns;
        assert s0 = 'X';
        wait;
    end process;
end behav;

สิ่งนี้ทำให้เข้าใจได้ง่ายเนื่องจากเราเข้าใจXว่าเป็นสถานะที่ใช้ค่าที่ไม่เข้ากันหลายค่ากับสายเดี่ยว

std_logic ยังรู้วิธีแก้ไขสัญญาณอินพุทคู่อื่น ๆ ที่เป็นไปได้ตามตารางที่มีอยู่บน LRM

bit ในทางกลับกันไม่มีฟังก์ชั่นการแก้ปัญหาและถ้าเราใช้มันในตัวอย่างข้างต้นมันจะนำไปสู่ข้อผิดพลาดในการจำลองใน GHDL 0.34

ค่าที่เป็นไปได้ของstd_logicตัวเลือกที่ดีเนื่องจากเป็นมาตรฐานโดยIEEE 1164และจัดการกับกรณีการใช้งานทั่วไปจำนวนมาก


0

std_logicสมบูรณ์ยิ่งขึ้นกว่าบิตและโดยทั่วไปควรใช้เวลาส่วนใหญ่

นอกจากนี้ยังมีประเภทบูลีนซึ่งเช่นบิตมีสองค่า เป็นประเภทผลลัพธ์ของการเปรียบเทียบประเภทที่คาดไว้หลังจาก IF [bool]หรือ WHEN [bool]มักใช้สำหรับค่าคงที่ที่เลือก:constant ENABLE_DEBUG_INTERFACE : boolean := true;

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

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

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

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