مائی ایچ ڈی ایل

مائی ایچ ڈی ایل   ایک پائیتھن پر مبنی ہارڈویئر ڈسکرپشن لینگویج ہے۔ 

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

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

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

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

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

یہ مثال ایک چھوٹے جوڑنے والے ڈیزائن (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;

مزید دیکھیے 
 مفت ای ڈی اے سافٹ ویئر کا موازنہ
 ای ڈی اے سافٹ ویئر کا موازنہ
 الیکٹرانک ڈیزائن آٹومیشن (ای ڈی اے)

حوالہ جات