مائی ایچ ڈی ایل (انگریزی: MyHDL) [1] ایک پائیتھن پر مبنی ہارڈویئر ڈسکرپشن لینگویج ہے۔

اس زبان کی کچھ خصوصیات یہ ہیں:

  • اس سے وی ایچ ڈی ایل اور ویری لاگ دونوں زبانوں میں کوڈ تیار کیا جا سکتا ہے۔[2]
  • اس سے ٹیسٹ بینچ بھی تیار کیے جا سکتے ہیں [3] جس میں ٹیسٹ ویکٹر وی ایچ ڈی ایل اور ویری لاگ میں ہو سکتے ہیں۔
  • سگنلوں کی ایک فہرست کو یہ منتقل کر سکتی ہے۔[4]
  • آؤٹ پُٹ جانچ کو بھی باز تشکیل (کنورٹ) کر سکتی ہے۔ [5]
  • یہ ویری لاگ کے ساتھ اس جیسا ماحول پیدا کر سکتی ہے۔[6]
  • اس میں ایک ترقی یافتہ ڈیٹاٹائپ نظام ہے جو روایتی ڈیٹا کی اقسام سے الگ ہے۔ مائی ایچ ڈی ایل کا مترجم آلہ از خود تبدیلی کے لیے درکار عملی احکام لکھ دیتا ہے، اگر مقصدزبان کو اس کی ضرورت درکار ہو۔

مائی ایچ ڈی ایل کو جان ڈے کالووے نے تیار کیا۔ [7]

تبدیلی کی مثالیں ترمیم

یہاں پر آپ کچھ مثالیں دیکھ سکتے ہیں کہ کیسے مائی ایچ ڈی ایل ڈیزائنوں سے وی ایچ ڈیل یا ویری منتقلی ممکن ہے۔[8]

ایک چھوٹا جوڑنے والا ڈیزائن

یہ مثال ایک چھوٹے جوڑنے والے ڈیزائن (small combinatorial design) کی ہے، جو بطور خاص تثنیہ (binary) سے خاکستری کوڈ (Gray code) تبدیلی کا کام کرتا ہے:
def bin2gray(B, G, width):

    """ Gray encoder.

    B -- input intbv signal, binary encoded
    G -- output intbv signal, gray encoded
    width -- bit width

    """

    @always_comb
    def logic():
        Bext = intbv(0)[width+1:]
        Bext[:] = B
        for i in range(width):
            G.next[i] = Bext[i+1] ^ Bext[i]

    return logic


آپ کے صورت حال (instance) بنا سکتے ہیں اور ویری لاگ اور وی ایچ ڈی ایل میں اس طرح تبدیل کر سکتے ہیں:

width = 8

B = Signal(intbv(0)[width:])
G = Signal(intbv(0)[width:])

bin2gray_inst = toVerilog(bin2gray, B, G, width)
bin2gray_inst = toVHDL(bin2gray, B, G, width)

دستیاب ہونے والا ویری لاگ کوڈ اس طرح دکھے گا:

module bin2gray (
    B,
    G
);

input [7:0] B;
output [7:0] G;
reg [7:0] G;

always @(B) begin: BIN2GRAY_LOGIC
    integer i;
    reg [9-1:0] Bext;
    Bext = 9'h0;
    Bext = B;
    for (i=0; i<8; i=i+1) begin
        G[i] <= (Bext[(i + 1)] ^ Bext[i]);
    end
end

endmodule

دستیاب ہونے والا وی ایچ ڈی ایل کوڈ اس طرح دکھے گا:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use std.textio.all;

use work.pck_myhdl_06.all;

entity bin2gray is
    port (
        B: in unsigned(7 downto 0);
        G: out unsigned(7 downto 0)
    );
end entity bin2gray;

architecture MyHDL of bin2gray is

begin

BIN2GRAY_LOGIC: process (B) is
    variable Bext: unsigned(8 downto 0);
begin
    Bext := to_unsigned(0, 9);
    Bext := resize(B, 9);
    for i in 0 to 8-1 loop
        G(i) <= (Bext((i + 1)) xor Bext(i));
    end loop;
end process BIN2GRAY_LOGIC;

end architecture MyHDL;

مزید دیکھیے ترمیم

حوالہ جات ترمیم

  1. http://www.myhdl.org
  2. "Archived copy"۔ 19 اگست 2013 میں اصل سے آرکائیو شدہ۔ اخذ شدہ بتاریخ 23 مئی 2013 
  3. "آرکائیو کاپی"۔ 16 اگست 2013 میں اصل سے آرکائیو شدہ۔ اخذ شدہ بتاریخ 23 دسمبر 2018 
  4. "آرکائیو کاپی"۔ 16 اگست 2013 میں اصل سے آرکائیو شدہ۔ اخذ شدہ بتاریخ 23 دسمبر 2018 
  5. "آرکائیو کاپی"۔ 16 اگست 2013 میں اصل سے آرکائیو شدہ۔ اخذ شدہ بتاریخ 23 دسمبر 2018 
  6. "Archived copy"۔ 17 اگست 2013 میں اصل سے آرکائیو شدہ۔ اخذ شدہ بتاریخ 23 مئی 2013 
  7. http://www.linuxjournal.com/article/7542
  8. "Archived copy"۔ 17 اگست 2013 میں اصل سے آرکائیو شدہ۔ اخذ شدہ بتاریخ 23 مئی 2013