عکس پیش‌فرض نوشته

VHDL برای اداره سیگنال های دارای چند راه انداز چند روش منحصر به فردی دارد. سیگنال های دارای چند راه انداز برای مدل سازی گذرگاه داده، گذرگاه های دوطرفه و غیره سودمند می باشد. مدل سازی درست این نوع از مدارها در VHDL به مفاهیم راه اندازهای سیگنال نیاز دارد. هر راه انداز VHDL یک مشارکت کننده در مقدار کل یک سیگنال است.

 

learning VHDL

مقادیر تمام راه اندازهای یک سیگنال مقداری را برای یک سیگنال مشخص می کنند. تفکیک تمام مشارکت کننده ها در یک مقدار سیگنال به کمک تابع تفکیک (resolution function) انجام می شود. تابع تفکیک تابعی است که طراح می نویسد و با تغییر مقدار راه انداز یک سیگنال فراخوانی می شود.

 

ایجاد راه انداز

راه اندازهای با دستورات انتساب سیگنال ایجاد می شوند. هر دستور انتساب سیگنال همزمان در یک معماری، برای هر انتساب سیگنال یک راه انداز تولید می کند. بنابراین، انتساب های سیگنال چندگانه، چند راه انداز برای یک سیگنال تولید می کنند. معماری زیر را در نظر بگیرید:

ARCHITECTURE test OF test IS
BEGIN
    a <= b AFTER 10 ns;
    a <= c AFTER 10 ns;
END test;

 

سیگنال a از دو منبع b و c راه اندازی می شود. هر دستور انتساب سیگنال همزمان یک راه انداز برای سیگنال a ایجاد می کند. دستور نخست راه اندازی ایجاد می کند که حاوی سیگنال b با 10 نانوثانیه تاخیر است. دستور دوم راه انداز ایجاد می کند که مقدار سیگنال c را با 10 نانوثانیه تاخیر دارد.

چگونگی تفکیک این دو راه انداز به طراح واگذار می شود. طراحان VHDL نمی خواهند محدودیت های زبان به رفتار سیگنال اضافه شوند. سنتز مثال قبل c و b را یکی می کند.

 

مدل چند راه اندازی بد

مدل زیر در نگاه اول درست به نظر می رسد، اما کار مورد نظر کاربر را انجام نمی دهد. مدل مربوط به یک مالتی پلکسر 4 به 1 است:

USE WORK.std_logic_1164.ALL;
ENTITY mux IS
PORT (i0 , i1 , i2 , i3 , a , b : IN std_logic;
      q : OUT std_logic);
END mux;

ARCHITECTURE bad OF mux IS
BEGIN
     q <= i0 WHEN a = ‘0’ AND b = ‘0’ ELSE ’0’;
     q <= i1 WHEN a = ‘1’ AND b = ‘0’ ELSE ’0’;
     q <= i2 WHEN a = ‘0’ AND b = ‘1’ ELSE ’0’;
     q <= i3 WHEN a = ‘1’ AND b = ‘1’ ELSE ’0’;
END bad;

 

این مدل هنگامی که a و b هر دو 0 باشند i0 ، و وقتی a=1 و b=0 باشد i1 را به q تخصیص می دهد و به همین ترتیب. در نگاه اول به نظر می رسد که مدل کار مورد نظر را انجام می دهد. با این وجود، هر تخصیص به سیگنال q راه انداز جدیدی برای سیگنال q ایجاد می کند. این مدل چهار راه انداز برای سیگنال q ایجاد می کند.

 

هر یک از راه اندازها مقدار یکی از ورودی های i0 ، i1 ، i2 ، i3 یا ‘0’ را راه اندازی می کند. مقدار راه اندازی شده به ورودی های a و b بستگی دارد. اگر a و b هر دو ‘0’ باشند، نخستین دستور تخصیص، مقدار i0 را در یکی از راه اندازهای q قرار می دهد. شرایط سه دستور دیگر فراهم نمی شود، بنابراین، مقدار ‘0’ را راه اندازی می کنند. توابع تفکیک خروجی مطلوب q را که مقدار i0 است پیش بینی می کنند.

 

روش بهتر برای نوشتن این مدل ایجاد فقط یک راه انداز برای q است، مانند:

 

ARCHITECTURE better OF mau IS
BEGIN
     q <= i0 WHEN a = ’0’ AND b = ’0’ ELSE
          i1 WHEN a = ’1’ AND b = ’0’ ELSE
          i2 WHEN a = ’0’ AND b = ’1’ ELSE
          i3 WHEN a = ’1’ AND b = ’1’ ELSE
          ‘X’;
END better;

 

این آموزش بیش از ۳ سال قبل ارسال شده و اکنون در لیست به‌روزرسانی‌های سایت قرار دارد. اگر پیشنهاد یا انتقادی برای بهبود آموزش دارید، خوشحال می‌شیم به ما اطلاع بدهید.