تبلیغات
باران الکترونیک - قسمت دوم: برنامه شمارنده به زبان ‏VHDL
دوشنبه 20 آبان 1392  10: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 ،
نظرات()   
   
zahra
جمعه 27 فروردین 1395 01:54 ب.ظ
slm mer30 babate matalebe xubetun fght ye moshkeli: chera file pdf dl nemishe???
پاسخ امیرحسین رستمی : با تشکر از شما
لینک جدید اضافه شد.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر
آخرین پست ها