Presentation is loading. Please wait.

Presentation is loading. Please wait.

مدار های ترکیبی دیکدر لامپ های هفت قسمتی یکی از دیکدر هایی که اغلب به کار برده می شود،دیکدر 4 به 7 برای تبدیل کد bcd به کد هفت بیتی برای لامپ های seven.

Similar presentations


Presentation on theme: "مدار های ترکیبی دیکدر لامپ های هفت قسمتی یکی از دیکدر هایی که اغلب به کار برده می شود،دیکدر 4 به 7 برای تبدیل کد bcd به کد هفت بیتی برای لامپ های seven."— Presentation transcript:

1 به نام خدا نمونه هایی از برنامه های VHDL استاد دکتر فاتح تهیه کنندگان محمد امین زاده بردیا دل آگاه

2 مدار های ترکیبی دیکدر لامپ های هفت قسمتی یکی از دیکدر هایی که اغلب به کار برده می شود،دیکدر 4 به 7 برای تبدیل کد bcd به کد هفت بیتی برای لامپ های seven segment می باشد.

3 مثال:برنامه ای بنویسید که به کمک دیکدر تمامی شماره های یک seven segment را نمایش دهد.
library IEEE; use IEEE.std_logic_1164.all; entity seveseg is port ( D: in STD_LOGIC_VECTOR (3 downto 0); S: out STD_LOGIC_VECTOR (6 downto 0) ); end seveseg; --S=abcdefg architecture seveseg_arch of seveseg is begin with D select

4 S <= " " when "0000",-- Display 0 " " when "0001",-- Display 1 " " when "0010",-- Display 2 " " when "0011",-- Display 3 " " when "0100",-- Display 4 " " when "0101",-- Display 5 " " when "0110",-- Display 6 " " when "0111",-- Display 7 " " when "1000",-- Display 8 " " when "1001",-- Display 9 " " when others;-- Blank for non decimal end seveseg_arch;

5 سیمولیت

6 فلیپ فلاپ ها برای ذخیره یک بیت اطلاعات است که مهم ترین آن ها فلیپ فلاپ D و T می باشد.

7 مثال : برنامه ای برای فلیپ فلاپ D بنویسید که اگر ورودی CLR برابر صفر شود خروجی q-out فلیپ فلاپ برابر صفر شود، در غیر این صورت اگر لبه بالا رونده پالس ساعت رخ دهد، اطلاعات وردی D به خروجی q منتقل شود ibrary IEEE; use IEEE.std_logic_1164.all; entity flipd is port ( d: in STD_LOGIC; clk: in STD_LOGIC; clr: in STD_LOGIC; q_out: out STD_LOGIC ); end flipd; architecture flipd_arch of flipd is

8 begin process (clk,clr) if clr='0' then q_out <='0'; elsif (clk'event and clk='1') then q_out <=d; end if; end process; end flipd_arch;

9 سیمولیت

10 مثال : برنامه ای برای فلیپ فلاپ T بنویسید که در لبه بالارونده پالس ساعت CLK ،اگر وردی T برابر یک باشد خروجی Q مکمل شود در غیر این صورت Q تغییر نکند. library IEEE; use IEEE.std_logic_1164.all; entity flipt is port ( t,clk: in STD_LOGIC; q: buffer STD_LOGIC ); end flipt; architecture flipt_arch of flipt is begin

11 process (clk) begin if (clk'event and clk='1') then if t='1' then q<=not(q); else q<=q; end if; end process; end flipt_arch;

12 سیمولیت

13 ثبات ها ثبات ها برای ذخیره اطلاعت از تعدادی فلیپ فلاپ تشکیل شده است

14 مثال : برنامه ای برای یک ثبات هشت بیتی با فلیپ فلاپ D بنویسید که در لبه پایین رونده پالس ساعت، اطلاعات وردی D را به خروجی ثبات Q انتقال دهد. library IEEE; use IEEE.std_logic_1164.all; entity registd is port ( d: in STD_LOGIC_VECTOR (7 downto 0); clk: in STD_LOGIC; q: out STD_LOGIC_VECTOR (7 downto 0)); end registd; architecture registd_arch of registd is begin

15 process (clk) begin if (clk'event and clk='0') then q<=d; end if; end process; end registd_arch;

16 مثال : برنامه ای برای یک ثبات هشت بیتی با فلیپ فلاپ D بنویسید که اگر ورودی ریست برابر یک شود خروجی ثبات Q برابر با صفر شود در غیر این صورت در لبه بالارونده پالس ساعت اگر Initial برابر یک گردد خروجی ثبات Q برابر با شود در غیر این صورت وردی D به خروجی Q منتقل شود. library IEEE; use IEEE.std_logic_1164.all; entity registdr is port ( D : in std_logic_vector(0 to 7); Clk,reset,Initial : in std_logic; Q : out std_logic_vector(o to 7) ); End registdr; Architecture registdr_arc of registdr is Begin

17 Process(clk,reset) Begin If (reset = ‘1’) then Q <= b” ”; Elsif (clk’event and clk=‘1’) then if (initial = ‘1’) then q <= b” ”; else q <= d; end if; End if; End process; End registdr_arch;

18 ثبات شیفت دهنده ثبات شیفت دهنده ثباتی است که در لبه پالس ساعت اطلاعات آن یک بیت به راست و چپ شیفت داده می شود.

19 مثال : برنامه ای بنویسید که در لبه بالا رونده پالس ساعت محتویات یک ثبات هشت بیتی را یک بیت به طرف راست شیفت دهد library IEEE; use IEEE.std_logic_1164.all; entity shift1 is port ( clk: in STD_LOGIC; seri_rig: in STD_LOGIC; qout: buffer STD_LOGIC_VECTOR (7 downto 0) ); end shift1; architecture shift1_arch of shift1 is begin process(clk)

20 begin if (clk'event and clk='1') then qout(6 downto 0)<=qout(7 downto 1); qout(7)<=seri_rig; end if; end process; end shift1_arch;

21 برنامه ای بنویسید که اگر load برابر یک شود اطلاعات هشت بیتی data_in در ثبات هشت بیتی qout بار شود یعنی qout = data_in شود، در غیر این صورت در لبه بالاروند پالس ساعت محتویات ثبات qout یک بیت به طرف راست شیفت داده شود. library IEEE; use IEEE.std_logic_1164.all; entity shift2 is port ( clk,load,seri_rig: in STD_LOGIC; data_in: in STD_LOGIC_VECTOR (7 downto 0); qout: buffer STD_LOGIC_VECTOR (7 downto 0)); end shift2; architecture shift2_arch of shift2 is begin

22 process(clk,load) begin if load='1' then qout<=data_in; elsif(clk'event and clk='1') then qout<=seri_rig & qout(7 downto 1); end if; end process; end shift2_arch;

23 شمارنده ها شمارنده ها مدار هایی هستند که به ازای هر پالس ساعت یک شمار می اندازد.شمارنده ها می توانند دارای ورودی reset برای صفر کردن ، وردی load جهت بار کردن با یک مقدار اولیه ویا... باشد.

24 شمارنده هشت بیتی طراحی کنید که در لبه بالا رونده پالس ساعت یک شمار بیاندازد
library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; // دستور العمل ریاضی Entity counter2 is port( Clk : std_logic; Count : buffer std_logic_vector(7 downto 0)); End counter2; Architecture counter2_arch of counter2 is Begin

25 Process(clk) Begin If (clk’event and clk = ‘1’) then Count <= unsigned(count+1); End if; End process; End counter2_arch;

26 مثال برنامه ی vhdl برای یک شمارنده هشت بیتی که دارای : الف ) وردی پالس ساعت clk ب ) ورودی reset ج )ورودی set برای یک کردن تمامی بیت ها د )ورودی enable برای فعال کردن شمارنده ه)ورودی load برای بار کردن اطلاعات ورودی در لبه بالارونده پالس ساعت و)ورودی هشت بیتی data برای بار کردن شمارنده در حالت اولیه ز)خروجی cnt شمارنده باشد را طراحی نماید

27 library IEEE; use IEEE. std_logic_1164. all; use ieee
library IEEE; use IEEE.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity counter1 is port ( clk: in STD_LOGIC; set,reset: in STD_LOGIC; enable: in STD_LOGIC; load: in STD_LOGIC; data: in STD_LOGIC_VECTOR (7 downto 0); cnt: inout STD_LOGIC_VECTOR (7 downto 0) ); end counter1; architecture counter1_arch of counter1 is begin count: process(clk,set,reset)

28 begin if reset='1' then cnt<=(others=>'0'); elsif set='1' then cnt<=(others=>'1'); elsif (clk'event and clk='1') then if load='1' then cnt<=data; elsif enable='1' then cnt<=cnt+1; end if; end if; end process count ; end counter1_arch;

29 حافظه ها حافظه کامپیوتر شامل RAM و ROM می باشد که در زیر نمونه های از برنامه vhdl هر یک را بررسی می کنیم.

30 مثال :برنامه ای بنویسید که یک ram دارای 16 خانه حافظه 4 بیتی با وردی di و خروجی do باشد به طوری که در لبه بالارونده پالس ساعت اگر سیگنال we برابر یک شود اطلاعات ورودی در آدرس حافظه s نوشته شود.در غیر این صورت محتوای آدرس a حافظه خوانده شود. LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; USE IEEE.std_logic_unsigned.ALL; entity RAM is port (clk : in std_logic; we : in std_logic; a : in std_logic_vector(3 downto 0); di : in std_logic_vector(3 downto 0); do : out std_logic_vector(3 downto 0)); end RAM;

31 architecture syn of RAM is type ram_type is array (15 downto 0) of std_logic_vector (3 downto 0); signal RAM : ram_type; begin process (clk) begin if (clk'event and clk = '1') then if (we = '1') then RAM(conv_integer(a)) <= di; do <= (OTHERS => 'Z'); else do <= RAM(conv_integer(a)); end if; end if; end process; end syn;

32 سیمولیت

33 برنامه vhdl یک حافظه rom که دارای 32 خانه حافظه 4 بیتی با خروجی do باشد را بنویسید به طوری که در هر لحظه ای که وردی آدرس 5 بیتی در ورودی قرار گرفت محتوای خانه حافظه rom به آدرس مذکور در خروجی do قرار گیرد. library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ROM is port( adr : in std_logic_vector(4 downto 0); do : out std_logic_vector(3 downto 0) ); end ROM;

34 architecture dataflow of ROM is
architecture dataflow of ROM is type rom is array (0 to 31) of std_logic_vector(3 downto 0); constant mem : rom :=( Content -- Address "0011", "1100", "0010", "1000", "1010", "0010", "1101", "1100", "1101", "1110", "0010", "0100", "1000", "1010", "1101",

35 "1100", "1110", "0000", "0010", "0100", "0110", "0110", "1000", "1010", "1100", "1110", "0000", "0010", "0100", "0110", "1000", "1010" ); begin do <= mem(conv_integer(adr)); end dataflow;

36 سیمولیت

37 طراحی دستگاه محاسبه و منطقی ALU

38 مثال : دستگاه ALU طراحی کنید دارای دو وردی A و B چهار بیتی،کنترل OP سه بیتی و خروجی ALU_OUT چهار بیتی باشد و عملیات AND و OR و NAND و NOR و XNOR و NOT را انجام دهد. library ieee; use ieee.std_logic_1164.all; entity logical_alu is port ( a,b : in std_logic_vector(3 downto 0); op : in std_logic_vector(2 downto 0); alu_out: out std_logic_vector(3 downto 0)); end logical_alu; architecture behav of logical_alu is begin alu_out <= (a and b) when op="000" else (a or b) when op="001" else (a nand b) when op="010" else (a nor b) when op="011" else (a xor b) when op="100" else (not a) when op="110" else b; end behav;

39 مثال : دستگاه ALU طراحی کنید که دارای دو رودی A و B و وردی کنترل SEL دوبیتی و خروجی RES دوبیتی باشد و عملیات جمع و تفریق و AND و OR را انجام دهد. library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; Entity alu1 is port( A : in std_logic_vector(1 downto 0); b : in std_logic_vector(1 downto 0); sel : in std_logic_vector(1 downto 0); res : out std_logic_vector(1 downto 0) )’ End alu1; Architecture behv of alu1 is Begin

40 Process (a,b,sel) Begin Case sel is when “00” => res <= a+b; when “01” => res <= a+(not b) + 1; when “10” => res <= a and b; when “11” => res <= a or b; when others => res <= “xx”; End case; End process; End behv;


Download ppt "مدار های ترکیبی دیکدر لامپ های هفت قسمتی یکی از دیکدر هایی که اغلب به کار برده می شود،دیکدر 4 به 7 برای تبدیل کد bcd به کد هفت بیتی برای لامپ های seven."

Similar presentations


Ads by Google