تبلیغات
" /> باران الکترونیک - مطالب ابر vhdl
سه شنبه 28 مهر 1394  11:21 ب.ظ
نوع مطلب: (FPGA ،Xilinx ،Altera ،VHDL ،) توسط: امیرحسین رستمی

هدف

در این مقاله سعی شده است نحوه یاد گرفتن FPGA قدم به قدم توضیح داده شود. نظراتی که در این مقاله آمده است شخصی بوده و ممکن است شخص دیگری نظری پی رادیان مخالف داشته باشد (که نشان دهده سواد کم­تر او می­ باشد پس نگران نباشد و ادامه به خواندن این مطلب دهید.)

مغز


نظرات()       

حافظه FIFO (First In Last Out) در کاربردهایی که با یک جریانی از سیگنال مواجه هستیم مورد استفاده قرار می­گیرد. برای مثال، یک حسگر تصویر یا یک مبدل آنالوگ به دیجیتال که داده­های ورودی به صورت پیوسته وارد سیستم می­شود نیاز به یک حافظه FIFO برای ذخیره داده­ها و سپس پردازش آن­ها می­باشیم.

برای استفاده از FIFO در  باید از IP Core Xilinx، FIFO Generator استفاده می­کنیم. برای ایجاد این IP Core می­توان به دو روش زیر عمل کرد:

الف) به صورت مستقل از پروژه

از منوی start مسیری که در شکل نشان داده شده است را دنبال کنید تا نرم­افزار Core Generator باز شود.

ب) در داخل نرم­افزار ISE

از قسمت Project، New Source را انتخاب کنید. گزینه اول را انتخاب کنید و بعد از وارد کردن اسم فایل روی Next کلیک کنید.

در هر دو حالت به پنجره زیر می­رسید. در قسمت Search IP Catalog کلمه fifo را وارد کنید. FIFO Generator را انتخاب کنید و Next را بزنید.

در این مرحله پنجره FIFO Generator نمایش داده می­شود. روی Next کلیک کنید تا وارد صفحه 2 شوید. روی Next کلیک کنید.

در این صفحه نوع حافظه مورد استفاده برای ساختن FIFO را انتخاب کنید. همچنین می­توانید در این صفحه مشخص کنید که فرکانس نوشتن داده­ها با فرکانس خواندن داده­ها یکسان باشند یا متفاوت باشند.

Read Mode

·         Standard FIFO

یک فیفوی استاندارد بدون وجود هرگونه رجیستر برای خروجی ایجاد می­کند.

·         First-Word Fall-Through FIFO (FWFT)

یک فیفو با خروجی­هایی که به صورت رجیستر هستند ایجاد می­کند. با انتخاب این گزینه می­توان به بدون انجام عملیات خواندن به داده بعدی که در فیفو وجود دارد دسترسی پیدا کرد. همچنین وقتی که داده در فیفو قرار بگیرد بلافاصله در خروجی قرار می­گیرد.

Optional Flags, Handshaking, and Initialization

Optional Flags

·         Almost Full Flag

یک پورت خروجی تولید می­کند که نشان دهنده این است که فقط یک داده دیگر می­تواند داخل فیفو وارد شود.

·         Almost Empty Flag

یک پورت خروجی تولید می­کند که نشان دهنده این است که فقط یک داده دیگر می­تواند از فیفو خوانده شود.

Handshaking Options

·         Write Port Handshaking

o       Write Acknowledge

این سیگنال بیانگر این است که عملیات خواندن با موفقیت انجام شده است. می­تواند active high یا active low باشد.

o       Overflow (Write Error)

این فلگ بیانگر این است که عملیات خواندن قبلی موفقیت آمیز نبوده است.

·         Read Port Handshaking

o       Valid (Read Acknowledge)

این فلگ مشخص می­کند که چه زمانی داده­ای که در باس خروجی قرار می­گیرد، معتبر می­باشد.

o       Underflow (Read Error)

این فلگ مشخص می­کند که عملیات خواندن قبلی موفق آمیز نبوده است.

Initialization and Programmable Flags

·         Reset Pin

با فعال شدن پین ریست، تمام شمارنده­ها، رجیسترهای خروجی و حافظه­ها ریست می­شود.

Programmable Flags

·         Programmable Full Type

می­توانید انتخاب کنید که با رسیدن داده­های داخل فیفو به تعداد مشخص توسط پین prog_full به شما خبر داده شود.

·         Programmable Empty Type

می­توانید انتخاب کنید که با کم شدن داده­های داخل فیفو از یک تعداد مشخص توسط پین prog_empty به شما خبر داده شود.

Data Count

·         Write Data Count (Synchronized with Write Clk)

تعداد داده­های نوشته شده در فیفو را مشخص می­کند.                  

·         Read Data Count (Synchronized with Read Clk)

بیانگر تعداد داده­های خوانده شده از فیفو می­باشد.             

Summary

در این پنجره خلاصه­ای از تنظیمات فیفو نشان داده می­شود.

بلوک فیفو در صفحه شماتیک در شکل زیر نشان داده شده است.

دانلود فایل PDF

منبع

LogiCORE IP FIFO Generator, Product Guide, PG057 December 18, 2012


نظرات()   
   
جمعه 1 آذر 1392  12:36 ق.ظ
نوع مطلب: (FPGA ،VHDL ،Xilinx ،Altera ،) توسط: امیرحسین رستمی

می­خواهیم برنامه­ای بنویسیم که در آن رابطه بین ورودی و خروجی به صورت زیر باشد:

یعنی فرکانس کلاک خروجی برابر با تقسیم دلخواهی از فرکانس ورودی می­باشد. برای این منظور باید یک شمارنده تعریف کنیم که با آمدن پالس­های بالارونده ورودی یک واحد زیاد می­شود. سه حالت مختلف به وجود می­آید.

الف) m توانی از 2 باشد:

فرض کنید  باشد. n=3 یعنی فرکانس پالس خروجی  1/8 فرکانس پالس ورودی می­باشد. یک شمارنده 3 بیتی تعریف می­کنیم. شمارنده از 0 تا 7 می­شمارد. با توجه به شکل اگر با ارزش­ترین بیت MSB شمارنده را به خروجی بدهیم، به هدف خود رسیده­ایم.

برنامه تقسیم کننده فرکانس در ادامه آمده است:

به ادامه مطلب مراجعه کنید.
دانلود فایل PDF در ادامه مطلب


نظرات()       
دوشنبه 20 آبان 1392  09:43 ب.ظ
نوع مطلب: (FPGA ،Xilinx ،Altera ،VHDL ،) توسط: امیرحسین رستمی

برای نوشتن برنامه شمارنده نیاز به یک جمع کننده ‏داریم که عدد ورودی را یک واحد افزایش دهد. برای این ‏که جمع کننده با کلاک سنکرون باشد نیاز به یک ‏D‏ فلیپ فلاپ داریم. شماتیک برنامه شمارنده در شکل ‏زیر نشان داده شده است.‏

برای این که شمارنده از یک تا نه بشمارد، وقتی که عدد نه در خروجی نمایش داده شد در کلاک بعدی باید عدد صفر وارد جمع کننده شود. برنامه کامل VHDL در ادامه نشان داده شده است.

entity counter0to9 is

   generic(

      N: integer := 4;    -- number of bits

      M: integer := 9     -- mod-M

  );

   port(

      clk, reset: in std_logic;

      q: out std_logic_vector(N-1 downto 0)

   );

end counter0to9 ;

------------------------------------------

architecture arch of mod_m_counter is

   signal r_reg: unsigned(N-1 downto 0);

   signal r_next: unsigned(N-1 downto 0);

begin

   -- register

   process(clk,reset)

   begin

      if (reset='1') then

         r_reg <= (others=>'0');

      elsif (clk'event and clk='1') then

         r_reg <= r_next;

      end if;

   end process;

   -- next-state logic

   r_next <= (others=>'0') when r_reg=(M-1) else

             r_reg + 1;

   -- output logic

   q <= std_logic_vector(r_reg);

end arch;

 

برای دیدن مدار ساخته شده در برنامه ISE مطابق شکل زیر از منوی Design، قسمت Synthesize را گسترش دهید (روی + کلیک کنید) و روی گزینه View RTL Schematic دوبار کلیک کنید.
بلوک زیر نمایش داده می­شود:

روی بلوک ‏mod_m_counter‏ دوبار کلیک کنید تا مدار ساخته شده مطابق شکل زیر نمایش داده شود.‏

برنامه test bench برای شبیه سازی مدار:


library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity mod_m_counter is

   generic(

      N: integer := 4;     -- number of bits

      M: integer := 9     -- mod-M

  );

   port(

      clk, reset: in std_logic;

      q: out std_logic_vector(N-1 downto 0)

   );

end mod_m_counter;

 

architecture arch of mod_m_counter is

   signal r_reg: unsigned(N-1 downto 0);

   signal r_next: unsigned(N-1 downto 0);

begin

   -- register

   process(clk,reset)

   begin

      if (reset='1') then

         r_reg <= (others=>'0');

      elsif (clk'event and clk='1') then

         r_reg <= r_next;

      end if;

   end process;

   -- next-state logic

   r_next <= (others=>'0') when r_reg=(M-1) else

             r_reg + 1;

   -- output logic

   q <= std_logic_vector(r_reg);

end arch;

نتیجه شبیه سازی در شکل زیر نشان داده شده است:


دانلود فایل PDFلینک 1

دانلود فایل لینک 2


  • آخرین ویرایش:یکشنبه 29 فروردین 1395
  • برچسب ها:vhdl ،fpga ،counter ،
نظرات()   
   
آخرین پست ها