مرجع
آخر الزيارات

في إتش دي إل

1٬461 كلمة•0 مشاهدة•🗒️ منذ 16 يوماً
باختصار: في إتش دي أل أو لغة توصيف العتاد للدارات المتكاملة ذات السرعات المرتفعة جداً هي لغة برمجة قياسية صممت من قبل وزارة دفاع الولايات المتحدة حيث تستعمل في وصف، وتصميم، ومحاكاة دارات الدوائر الإلكترونية عالية السرعة. في هذه المقالة 32 قسماً: «end struk_mux1b4X1;»، «شرح بسيط للبوابات المنطقية تقنية رقمية» و«المغلاق» وغيرها.
المحتويات
  1. end struk_mux1b4X1;
  2. شرح بسيط للبوابات المنطقية تقنية رقمية
  3. المغلاق
  4. end process;
  5. Q <= D when rising_edge(CLK);
  6. end process;
  7. تحديد أسماء المنافذ ports names
  8. مناسب لعمليات التركيب synthesis
  9. elsif rising_edge(CLK) then
  10. العداد
  11. end process;
  12. end RTL;
  13. Kor:o_4or
  14. -- simple D-type flip-flop
  15. if RESET = '1' then
  16. end process;
  17. وهو أساس من اجل كل المنطق المتواقت
  18. end process;
  19. '0' when R = '1' else Q;
  20. البداية
  21. begin
  22. end process;
  23. البنية الأساسية
  24. begin
  25. end process;
  26. سلسلة فيبوناسي
  27. Q <= '0';
  28. Q <= cnt;
  29. begin
  30. Clock : in std_logic;
  31. begin
  32. Next_Fib <= Current + Previous;
في إتش دي إل

قبل الخوض في التفاصيل، في إتش دي أل أو لغة توصيف العتاد للدارات المتكاملة ذات السرعات المرتفعة جداً هي لغة برمجة قياسية صممت من قبل وزارة دفاع الولايات المتحدة حيث تستعمل في وصف، وتصميم، ومحاكاة دارات الدوائر الإلكترونية عالية السرعة. أصبحت منذ عام 1987 إحدى مقايس جمعية مهندسي الكهرباء والإلكترونيات وتمت مراجعتها في سنة 1997. ونتناول فيما يلي مزيدًا من التفاصيل.

كذلك، وتسمح VHDL بإدخال المصفوفات في اتجاهين تصاعدي وتنازلي لأن كلا الا صطلاحين يستعمل في الـ HardWare ،والنسخة المعدلة الأولى من الـ VHDL تتضمن مجال واسع من أنواع البيانات كالنوع العددي(الصحيح والحقيقي)والمنطقي(البولياني والبتي)والنوع الحرفي والوقت ومصفوفة من النوع البتي التي تسمى الشعاع البتي والمصفوفة من نوع المحارف التي تسمى الشعاع السلسلة.

من جهة ثانية، وعندما يترجم نموذج VHDL إلى بوابات وأسلاك التي تكون منظمة على جهاز منطقي قابل للبرمجة مثل مصفوفة البوابات المنطقية القابلة للبرمجة أو CPLD والعتاد الفعلي يحدد من شيفرة VHDL المنفذة كما في بعض أشكال شريحة المعالج.

كذلك، تتيح هذه اللغة توصيف التوازي والترابط بالإضافة للتعبير المفصل والمباشر للزمن وتسمح كذلك بتوصيف الدارات التماثلية لكنها غالبا ما تستعمل في تصميم دارات مصفوفة البوابات المنطقية القابلة للبرمجة.

ومن ناحية أخرى، لغة VHDL هي لغة متعددة وعامة تماماً وعلى الرغم من أنها تتطلب برنامج محاكاة لتشغيل كود البرنامج فإنه يمكنها أن تقرأ وتكتب ملفات على كمبيوتر مضيف، إن VHDL تسمح بتوصيف النظام المتزامن (الأجزاء المقدمة بواسطة سلوك عملها مع بعضها البعض بنفس الوقت)وهي غير محببة كثيراً من لغات أخرى كلغة الـ Basic، pascal، c أو لغات التجميع التي تسمع على مستوى شيفرة الآلة بشكل متعاقب تعليمة واحدة كل مرة لكل بنيان.

وعلى صعيد آخر، VHDL مقتبسة من لغة Ada في المفهوم العام كالرموز والمصفوفات أحادية البعد وتركيب العبارات وبناءها وهي غير حساسة لحالة الأحرف وهناك الكثير من الميزات غير موجودة في لغة Ada كمجموعة من التعليمات البوليانية التي تتضمن NAND,NOR مثلا وتمثيل العمليات الشائعة في البنية التعاودية مباشرة.

end struk_mux1b4X1;

في هذا الإطار، أما الشيفرة المصدرية التالية فهي تصف البنية السابقة نفسها عن طريق التوصيف السلوكي.

  • entity mux1b4X1 is
  • port(in1,in2,in3,in4,c1,c2:in Bit;out1:out Bit);
  • end mux1b4X1;
  • architecture sprav_mux1b4X1 of mux1b4X1 is

ومن ناحية أخرى، الصورة في الأعلى تبين بنية مضمم 4×1 وبالمقبال نشاهد الشيفرة المصدرية التي يصف هذه البنية ويستعمل طريقة التوصيف البنيوي حيث نلحظ في القسم التصريحي تعداد الأجزاء التي يتكون منها المضمم (Multiplexer) وفي القسم الإيعازي كيفية ارتباط تلك الأجزاء ببعضها.

شرح بسيط للبوابات المنطقية تقنية رقمية

  • تبدو كالتالي في الـ VHDL:
  • -- (this is a VHDL comment)
  • -- import std_logic from the IEEE library
  • library IEEE;
  • use IEEE.std_logic_1164.all;
  • -- this is the entity
  • entity ANDGATE is
  • port (
  • IN1 : in std_logic;
  • IN2 : in std_logic;
  • OUT1: out std_logic);
  • end ANDGATE;
  • architecture RTL of ANDGATE is
  • begin
  • OUT1 <= IN1 and IN2;

المغلاق

  • -- latch template 1:
  • Q <= D when Enable = '1' else Q;
  • -- latch template 2:
  • process(D,Enable)
  • begin
  • if Enable = '1' then
  • Q <= D;
  • end if;

end process;

  • -- BAD VHDL: this does NOT make the flip-flop a DFF without a reset!!
  • process(CLK, RESET)
  • begin

Q <= D when rising_edge(CLK);

process(CLK)

-- recommended DFF template:

end process;

  • -- alternative DFF template:
  • process
  • begin
  • wait until rising_edge(CLK);
  • Q <= D;

تحديد أسماء المنافذ ports names

وفي هذا الصدد، تصريحي (declarative) يظهر اولا في جملة المعمارية وقبل جملة begin يتم فيها التعريف عن المتغيرات الداخلية

  • تحديد احجام المنافذ من حيث عدد البتات في كل منفذ
  • تحديد اتجاه المنفذ (كونه مدخل input أو مخرج output)
  • تحديد نوع المنفذ (يحمل قيمة صفر وواحد فقط أو يحمل قيم أخرى مثل high impedance)
  • architecture (البنيان)، يحدد وظيفة الكيان ويتالف من قسمين
  • إيعازي (command)يتم فيها شرح كيفية ترابط المنافذ الداخلة لتكوين المنافذ الخارجة
  • طرق توصيف البنيان
  • توصيف بنيوي structure
  • التوصيف على مستويات عليا
  • يستعمل بشكل أساسي لدى المحاكاة
  • توصيف سلوكي behavior

مناسب لعمليات التركيب synthesis

  • المصمم يتحكم ببنية تصميمه.
  • أمثلة
  • بوابة AND

elsif rising_edge(CLK) then

  • if Enable = '1' then -- or '0' if Enable is active low...
  • Q <= D;
  • end if;
  • end if;

العداد

  • المثال التالي عبارة عن عداد مع إعادة وضع غير متزامن...
  • يوضح كيفية كتابة الرنامج في الــ vhdl (كما ذكرنا سابقاً).
  • library IEEE;
  • use IEEE.std_logic_1164.all;
  • use IEEE.numeric_std.all; -- for the unsigned type
  • entity counter_example is
  • generic (WIDTH : integer = 32);
  • port (
  • CLK, RESET, LOAD : in std_logic;
  • DATA : in unsigned(WIDTH-1 downto 0);
  • Q : out unsigned(WIDTH-1 downto 0));
  • end entity counter_example;
  • architecture counter_example_a of counter_example is
  • signal cnt : unsigned(WIDTH-1 downto 0);
  • begin

end process;

في هذا الإطار، وخطأ المبتدئين الشائع أننا نملك دخل وضع وإعادة الوضع ولكن لا نستعملها.

إضافةً إلى ذلك، والمثالين التاليين غير متساويين... الأول عبارة عن القلاب D.. والثاني عبارة عن القلاب D مع تغذية عكسية بالناخب.

end RTL;

  • الناخب
  • entity mux1b4X1 is
  • port(in1,in2,in3,in4,c1,c2:in Bit;out1:out Bit);
  • end mux1b4X1;
  • architecture struk_mux1b4X1 of mux1b4X1 is
  • signal c1_n,c2_n,intk11,intk12,intk13,intk14:Bit;
  • component o_not
  • port(in1:in Bit ;out1:out Bit);
  • end component ;
  • component o_3and is
  • port(in1,in2,in3:in Bit; out1:out Bit);
  • end component ;
  • component o_4or is
  • port(in1,in2,in3,in4:in Bit; out1:out Bit);
  • end component ;
  • begin
  • KNc1:o_not
  • port map(in1=>c1,out1=>c1_n);
  • KNc2:o_not
  • port map(in1=>c2,out1=>c2_n);
  • Kand11:o_3and
  • port map(in1=>in1,in2=>c1_n,in3=>c2_n,out1=>intk11);
  • Kand12:o_3and
  • port map(in1=>in2,in2=>c1,in3=>c2_n,out1=>intk12);
  • Kand13:o_3and
  • port map(in1=>in3,in2=>c1_n,in3=>c2,out1=>intk13);
  • Kand14:o_3and
  • port map(in1=>in4,in2=>c1,in3=>c2,out1=>intk14);

من جهة ثانية، في الأمثلة التالية سنرى كيف أن كود VHDL يكتب بشكل مدمج لكن المصممين عادة يتجنبون النماذج المدمجة ويستعملون أسلوب تشفير ممل أكثر من أجل أن يكون قابل للقراءة والفائدة الأخرى لاستخدام هذا الأسلوب في التشفير هي برمجة الأدوات القابلة للبرمجة مثلCPLD.

ومن ناحية أخرى، بينما الأمثلة في الأسفل تبدو مملة لمبتدئي VHDL فأجزاء كثيرة يمكن أن تبدو لنا اختيارية أو يمكن أن تكتب مرة واحدة فقط، إلى جانب استخدام عناصر std_logic الذي يمكن استبداله بالنوع Bit ونتجنب استيراد المكتبة في البداية، لكن استخدام 9 valued logic(U,X,0,1,Z,W,L) بدلاً من (0,1) يقدم محاكاة قوية جداً وأدوات تصحيح أخطاء غير موجودة في لغات HDL الأخرى.

Kor:o_4or

كذلك، port map(in1=>intk11,in2=>intk12,in3=>intk13,in4=>intk14,out1=>out1);

-- simple D-type flip-flop

  • process(CLK)
  • begin
  • if rising_edge(CLK) then
  • Q <= D;
  • end if;

if RESET = '1' then

  • -- do nothing. Q is not set here...
  • elsif rising_edge(CLK) then
  • Q <= D;
  • end if;
  • end process;

end process;

  • -- template for synchronous reset with clock enable:
  • process(CLK)
  • begin
  • if rising_edge(CLK) then
  • if RESET = '1' then

وهو أساس من اجل كل المنطق المتواقت

-- simplest DFF template (not recommended)

end process;

  • -- This one is a RS-latch (i.e. reset dominates)
  • process(S,R)
  • begin
  • if R = '1' then
  • Q <= '0';
  • elsif S = '1' then
  • Q <= '1';
  • end if;
  • end process;
  • قلاب المعطيات D-type flip-flops

في هذا الإطار، والقالب المنطقي 2 يملك ضمنياً (else Q <= Q;) التي نستطيع اضافتها بصراحة إذا أردنا.

'0' when R = '1' else Q;

  • -- SR-latch template 2:
  • process(S,R)
  • begin
  • if S = '1' then
  • Q <= '1';
  • elsif R = '1' then
  • Q <= '0';
  • end if;

البداية

في هذا الإطار، في لغة VHDL كما في أي لغة برمجة عتادية أو برمجية كي تكون خبيراً فإن ذلك يتطلب دراسة وتمرين، وإذا كان المستعمل يرغب بتعلم تشفيرRTL كتصميم دارات عتادية عن طريق VHDL فإن حزم التصميم والتركيب الموجودة كافية للتعلم.إن معرض البوابات التخطيطية يظهر للمستعمل تصاميم مركبة كالمخططات القابلة للانقياد، والكثير من حزم التصميم FPGA تقدم طرق إدخال تصاميم بديلة مثل النسخ المؤقت لمخطط الحالة والرسوم التخطيطية.وهذه الحزم تزودنا بقالب بدء مفيد لتشفير الأنواع الأساسية من التعليمات التكرارية والدروس التي يتضمنها مفيدة ومساعدة.

ومن ناحية أخرى، إلى جانب أن أغلب التصاميم المستوردة نماذج من المكتبات وبعض التصاميم التي تتضمن عدة

وعلى صعيد آخر، على وجه التقريب جميع نسخ المحاكاة وتصميم FPGA تدعم كلا Verilog وVHDL تسمح للمستعمل بتعلم كلا اللغتين.

Architecture.

begin

  • -- use falling_edge(CLK) to sample at the falling edge instead
  • if rising_edge(CLK) then
  • Q <= D;
  • end if;

end process;

  • وبعض القلابات كذلك تملك إشارات تمكين... وإشارات توضع وتصفير غير متزامنة.
  • -- template for asynchronous reset with clock enable:
  • process(CLK, RESET)

البنية الأساسية

تحديد اسم معين للكيان المراد صنعه

وفي هذا السياق، entity (كيان)، يحدد واجهة الترابط (المداخل والمخارج) فقط من دون تحديد الوظيفة. وتتضمن

begin

if RESET = '1' then -- or '0' if RESET is active low...

Q <= '0';

end process;

  • والمغلاق SR يستعمل إشارات التوضع والتصفير :
  • -- SR-latch template 1:
  • Q <= '1' when S = '1' else

سلسلة فيبوناسي

  • المثال التالي أكثر تعقيداً:
  • -- Fib.vhd
  • --
  • -- Fibonacci number sequence generator
  • library IEEE;
  • use IEEE.std_logic_1164.all;
  • use IEEE.numeric_std.all;
  • entity Fibonacci is
  • port (
  • Reset : in std_logic;

Q <= '0';

  • elsif Enable = '1' then -- or '0' if Enable is active low...
  • Q <= D;
  • end if;
  • end if;

Q <= cnt;

  • process(RESET, CLK)
  • begin
  • if RESET = '1' then
  • cnt <= (others => '0');
  • elsif rising_edge(CLK) then
  • if LOAD = '1' then
  • cnt <= DATA;
  • else
  • cnt <= cnt + 1;
  • end if;
  • end if;
  • end process;
  • end architecture counter_example_a;

begin

Adder:

Clock : in std_logic;

  • Number : out unsigned(31 downto 0)
  • );
  • end entity Fibonacci;
  • architecture Rcingham of Fibonacci is
  • signal Previous : natural;
  • signal Current : natural;
  • signal Next_Fib : natural;

begin

  • process(in1,in2,in3,in4,c1,c2)
  • begin
  • if c1='0' and c2='0' then
  • out1<=in1;
  • elsif c1='1' and c2='0' then
  • out1<=in2;
  • elsif c1='0' and c2='1' then
  • out1<=in3;
  • elsif c1='1' and c2='1' then
  • out1<=in4;
  • end if;
  • end process;
  • end sprav_mux1b4X1;

Next_Fib <= Current + Previous;

  • Registers:
  • process (Clock, Reset) is
  • begin
  • if Reset = '1' then
  • Previous <= 1;
  • Current <= 1;
  • elsif rising_edge(Clock) then
  • Previous <= Current;
  • Current <= Next_Fib;
  • end if;
  • end process Registers;
  • Number <= to_unsigned(Previous, 32);
  • end architecture Rcingham;
  • مراجع

ما رأيك في هذه المقالة؟

📝 هل في هذه المقالة خطأ؟

إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.