खोज…


परिचय

VHDL प्रकार अनसुलझे या हल किए जा सकते हैं। bit प्रकार द्वारा घोषित std.standard पैकेज, उदाहरण के लिए, जबकि समाधान नहीं हुआ है std_logic प्रकार द्वारा घोषित ieee.std_logic_1164 पैकेज हल हो गई है।

एक संकेत जो कि टाइप किया हुआ है, एक VHDL प्रक्रिया से अधिक नहीं चलाया जा सकता है (असाइन किया गया है), जबकि एक सिग्नल जो टाइप किया जाता है हल किया जा सकता है।

टिप्पणियों

हल किए गए प्रकारों का उपयोग उन स्थितियों के लिए आरक्षित किया जाना चाहिए, जहां वास्तव में एक हार्डवेयर तार (या तारों के सेट) को किसी अन्य हार्डवेयर सर्किट से अधिक संचालित करने का इरादा है। एक विशिष्ट मामला जहां इसकी आवश्यकता होती है, मेमोरी की द्वि-दिशात्मक डेटा बस है: जब मेमोरी लिखी जाती है तो यह लेखन उपकरण होता है जो बस को ड्राइव करता है जब मेमोरी पढ़ी जाती है तो यह बस को चलाने वाली मेमोरी होती है।

अन्य स्थितियों में हल किए गए प्रकारों का उपयोग करना, जबकि अक्सर सामना किए जाने वाले अभ्यास, एक बुरा विचार है क्योंकि यह बहुत उपयोगी संकलन त्रुटियों को दबा देता है जब अवांछित कई ड्राइव स्थितियों को गलती से बनाया जाता है।

ieee.numeric_std पैकेज signed और unsigned वेक्टर प्रकार की घोषणा करता है और उन पर अंकगणितीय ऑपरेटरों को अधिभारित करता है। इन प्रकारों का अक्सर उपयोग किया जाता है जब एक ही डेटा पर अंकगणित और बिट-वार संचालन की आवश्यकता होती है। signed और unsigned प्रकार हल signed हैं। पूर्व VHDL2008, ieee.numeric_std और उसके प्रकारों का उपयोग करके इस प्रकार निहित है कि आकस्मिक कई ड्राइव स्थितियों संकलन त्रुटियों को नहीं बढ़ाएगा। VHDL2008 के नए प्रकार घोषणाओं कहते हैं ieee.numeric_std : unresolved_signed और unresolved_unsigned (उपनाम u_signed और u_unsigned )। इन नए प्रकारों को उन सभी मामलों में पसंद किया जाना चाहिए जहां कई ड्राइव स्थितियां वांछित नहीं हैं।

दो प्रक्रियाएं 'बिट' के समान सिग्नल को चलाती हैं

निम्नलिखित VHDL मॉडल दो अलग-अलग प्रक्रियाओं से सिग्नल s ड्राइव करता है। जैसा कि s का प्रकार bit , एक अनसुलझे प्रकार है, यह अनुमति नहीं है।

-- File md.vhd
entity md is
end entity md;

architecture arc of md is

  signal s: bit;

begin

  p1: process
  begin
    s <= '0';
    wait;
  end process p1;

  p2: process
  begin
    s <= '0';
    wait;
  end process p2;

end architecture arc;

जीडीएलएल के साथ संकलन, विस्तार और अनुकरण करने की कोशिश करना, एक त्रुटि उठाना:

ghdl -a md.vhd
ghdl -e md
./md
for signal: .md(arc).s
./md:error: several sources for unresolved signal
./md:error: error during elaboration

ध्यान दें कि त्रुटि तब भी उठाई जाती है, जैसे कि हमारे उदाहरण में, सभी ड्राइवर ड्राइविंग मान पर सहमत होते हैं।

संकल्प कार्य

एक संकेत जो प्रकार को हल किया जाता है में एक संबंधित रिज़ॉल्यूशन फ़ंक्शन होता है । इसे एक से अधिक VHDL प्रक्रिया द्वारा संचालित किया जा सकता है। रिज़ॉल्यूशन फ़ंक्शन को परिणामी मान की गणना करने के लिए कहा जाता है जब भी कोई ड्राइवर एक नया मान प्रदान करता है।

रिज़ॉल्यूशन फ़ंक्शन एक शुद्ध फ़ंक्शन है जो एक पैरामीटर लेता है और हल करने के लिए प्रकार का मान लौटाता है। पैरामीटर हल करने के लिए प्रकार के तत्वों का एक-आयामी, असंवैधानिक सरणी है। उदाहरण के लिए टाइप bit के लिए, पैरामीटर टाइप bit_vector का हो सकता है। सिमुलेशन के दौरान रिज़ॉल्यूशन फ़ंक्शन को बुलाया जाता है, जब परिणामी मूल्य को एक बहु-संचालित सिग्नल पर लागू करने के लिए गणना करने की आवश्यकता होती है। यह सभी स्रोतों द्वारा संचालित सभी मूल्यों की एक सरणी पारित किया जाता है और परिणामी मूल्य लौटाता है।

निम्न कोड टाइप bit लिए रिज़ॉल्यूशन फ़ंक्शन की घोषणा दर्शाता है जो वायर्ड and तरह व्यवहार करता है। यह यह भी दिखाता है कि टाइप bit एक हल किए गए उपप्रकार को कैसे घोषित किया जाए और इसका उपयोग कैसे किया जा सकता है।

-- File md.vhd
entity md is
end entity md;

architecture arc of md is

  function and_resolve_bit(d: bit_vector) return bit is
    variable r: bit := '1';
  begin
    for i in d'range loop
      if d(i) = '0' then
        r := '0';
      end if;
    end loop;
    return r;
  end function and_resolve_bit;

  subtype res_bit is and_resolve_bit bit;

  signal s: res_bit;

begin

  p1: process
  begin
    s <= '0', '1' after 1 ns, '0' after 2 ns, '1' after 3 ns;
    wait;
  end process p1;

  p2: process
  begin
    s <= '0', '1' after 2 ns;
    wait;
  end process p2;

  p3: process(s)
  begin
    report bit'image(s); -- show value changes
  end process p3;

end architecture arc;

GHDL के साथ संकलित, विस्तृत और अनुकरण, एक त्रुटि नहीं उठाता है:

ghdl -a md.vhd
ghdl -e md
./md
md.vhd:39:5:@0ms:(report note): '0'
md.vhd:39:5:@3ns:(report note): '1'

एक-बिट संचार प्रोटोकॉल

कुछ बहुत ही सरल और कम लागत वाले हार्डवेयर डिवाइस, जैसे सेंसर, एक-बिट संचार प्रोटोकॉल का उपयोग करते हैं। एक एकल द्वि-दिशात्मक डेटा लाइन एक प्रकार के सूक्ष्म नियंत्रक से डिवाइस को जोड़ती है। यह अक्सर पुल-अप रोकनेवाला द्वारा खींच लिया जाता है। संचार उपकरण दूसरे को सूचना भेजने के लिए पूर्व-परिभाषित अवधि के लिए लाइन कम चलाते हैं। नीचे दी गई आकृति यह दर्शाती है:

एक-बिट संचार प्रोटोकॉल

इस उदाहरण से पता चलता है कि इसका उपयोग कैसे करें। इसका उपयोग ieee.std_logic_1164.std_logic हल प्रकार से करें।

-- File md.vhd
library ieee;
use ieee.std_logic_1164.all;

entity one_bit_protocol is
end entity one_bit_protocol;

architecture arc of one_bit_protocol is

  component uc is
    port(
      data_in: in  std_ulogic;
      set_low: out std_ulogic
    );
  end component uc;

  component sensor is
    port(
      data_in: in  std_ulogic;
      set_low: out std_ulogic
    );
  end component sensor;

  signal data:           std_logic;  -- The bi-directional data line
  signal set_low_uc:     std_ulogic;
  signal set_low_sensor: std_ulogic;

begin

  -- Micro-controller
  uc0: uc port map(
    data_in => data,
    set_low => set_low_uc
  );

  -- Sensor
  sensor0: sensor port map(
    data_in => data,
    set_low => set_low_sensor
  );

  data <= 'H'; -- Pull-up resistor

  -- Micro-controller 3-states buffer
  data <= '0' when set_low_uc = '1' else 'Z';

  -- Sensor 3-states buffer
  data <= '0' when set_low_sensor = '1' else 'Z';

end architecture arc;


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow