You are on page 1of 14

‫ﺑﻪ ﻧﺎم ﺧﺪا‬

‫آﻣﻮزش ‪VHDL‬‬

‫) ﻣﻘﺪﻣﻪ (‬
‫‪Very High Speed Integrated Circuit Hardware‬‬
‫‪Description Language‬‬

‫ﻣﻘﺪﻣﻪ اي ﺑﺮ ‪VHDL‬‬
‫زﺑﺎن ﺗﻮﺻﻴﻒ ﺳﺨﺖ اﻓﺰار ﻣﯽ ﺗﻮاﻧﺪ ﻓﻌﺎﻟﻴﺖ ﻋﻤﺪﻩ ﺧﻮد را روﯼ وﺳﺎﯾﻞ ﻣﻨﻄﻘﯽ ﻗﺎﺑﻞ ﺑﺮﻧﺎﻣﻪ رﯾﺰﯼ‬
‫)‪ (Programming Logic Devices: PLDs‬ﯾﺎ ﭘﻴﭽﻴﺪﻩ ﺗﺮ )‪ (CPLDs‬و‬
‫)‪ (Field Programmable Gate Arrays: FPGAs‬داﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬
‫ﭼﻨﺪ ﮔﻮﻧﻪ از اﯾـﻦ زﺑـﺎن وﺟـﻮد دارد ﻣﺎﻧﻨـﺪ ‪ VHDL,Verilog,Abel‬ﮐـﻪ ﻣـﺎ در اﯾـﻦ ﺑﺨـﺶ ﺁﻣﻮزﺷـﯽ ﺑـﻪ ‪VHDL‬‬
‫ﺧﻮاهﻴﻢ ﭘﺮداﺧﺖ‪.‬‬
‫ﻧﺮم اﻓﺰارهﺎﯼ ﺑﺴﻴﺎرﯼ ﺑﺮاﯼ ﻃﺮاﺣﯽ ‪ VHDL‬ﺳﺎﺧﺘﻪ ﺷﺪﻩ ﮐﻪ ﯾﮑﯽ از ﺁﻧﻬﺎ ‪ Active-VHDL‬از ﺳـﻮﯼ ﺷـﺮﮐﺖ‬
‫‪ ALDEC‬ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ ﯾﺎدﮔﻴﺮﯼ ﺁن ﺑﺴﻴﺎر ﺳﺎدﻩ اﺳﺖ‪.‬‬
‫ﮔﺮ ﭼﻪ ‪ VHDL‬ﺗﻮﺳﻂ وزارت دﻓﺎع ﺁﻣﺮﯾﮑﺎ ﺑﻪ ﻣﻨﻈﻮر اهﺪاف ﻧﻈﺎﻣﯽ ﺗﻮﻟﻴﺪ ﺷﺪ وﻟﯽ ﺑﻪ ﺳﺮﻋﺖ ﮔﺴﺘﺮش ﯾﺎﻓﺖ‬
‫و ﺑﺎ ﯾﮏ اﺳﺘﺎﻧﺪارد ﺧـﺎص )‪(the Institute of Electrical and Electronic Engineers: IEEE‬ﻣـﻮرد اﺳـﺘﻔﺎدﻩ‬
‫ﻋﻤﻮم ﻗﺮار ﮔﺮﻓﺖ ﮐﻪ ‪ IEEE‬ﺑﻪ ﻣﺮور از ﺳﺎل ‪ ١٩٨٧‬ﺗﺎ ‪ ١٩٩٨‬ﮐﺎﻣﻞ ﺷﺪ‪.‬‬

‫زﺑﺎن ‪ VHDL‬اﺑﺘﺪا ﺑﻪ ﻣﻨﻈﻮر ﺷﺒﻴﻪ ﺳﺎزﯼ و ﻣﺪل ﺳﺎزﯼ و درﮎ ﺑﻴﺸـﺘﺮ ﻣـﺪارهﺎﯼ ﻣﻨﻄﻘـﯽ ﺑـﻮدﻩ اﺳـﺖ ﮐـﻪ‬
‫ﺗﻮﺳﻂ ﻣﺤﻘﻘﺎن ﻋﻤﻞ ‪ Synthesis‬ﯾﺎ ﺳـﻨﺘﺰ ﺑـﻪ ﻋﻨـﻮان اﺗﻮﻣﺎﺗﻴـﮏ ﮐـﺮدن ﻓﺮاﯾﻨـﺪ ﻃﺮاﺣـﯽ ﺑـﻪ ﺁن اﺿـﺎﻓﻪ ﺷـﺪﻩ‬
‫اﺳﺖ‪.‬‬

‫ﻓﺎﻛﺘﻮرﻫﺎي ﻗﺎﺑﻞ ﻣﻼﺣﻈﻪ در ارزش ‪ VHDL‬ﺑﺮاي ﻳﻚ ﻃﺮاح ‪:‬‬

‫‪ -١‬ﻣﺤﺒﻮﺑﻴﺖ ﺟﻬﺎﻧﯽ زﺑﺎن ‪) HDL‬زﺑﺎن ﺗﻮﺻﻴﻒ ﺳﺨﺖ اﻓﺰار(‬


‫زﺑﺎن ‪ VHDL‬در ﺷﻤﺎل اﻣﺮﯾﮑﺎ و هﻤﭽﻨﻴﻦ اروﭘﺎ ﺗﻮﺳﻂ ‪ ٨٠‬درﺻﺪ ﻣﻬﻨﺪﺳـﻴﻦ ﺳﻴﺴـﺘﻢ اﺳـﺘﻔﺎدﻩ ﻣﻴﺸـﻮد ﮐـﻪ‬
‫اﯾﻦ رﻗﻢ هﻤﭽﻨﺎن در ﺣﺎل رﺷﺪ اﺳﺖ‪.‬‬

‫‪ -٢‬وﺟﻮد اﻧﻮاع ﻣﺨﺘﻠﻒ روﺷﻬﺎﯼ ﺗﻮﺻﻴﻒ در اﯾﻦ زﺑﺎن‬


‫‪ VHDL‬ﺑﺮاﯼ ﮐﺎرﺑﺮ از ﻧﻈﺮ ﯾﮑﺘﺎ ﺑﻮدن ﻧﻮع ﺗﻮﺻﻴﻒ هﻴﭻ ﮔﻮﻧﻪ ﻣﺤﺪودﯾﺘﯽ ﻧﺪارد در واﻗﻊ ﯾﮏ ﺑﺮﻧﺎﻣﻪ را ﻣﯽ ﺗﻮان‬
‫هﻢ ﺑﻪ ﺻﻮرت رﻓﺘﺎرﯼ و هﻢ ﺑﻪ ﺻﻮرت ﻣﺘﻨﯽ ﯾﻌﻨﯽ ذﮐﺮ ﺗﻤﺎم ﮔﻴﺘﻬﺎﯼ ﻣﻮﺟﻮد ﺑﻪ ﮐﺎر ﺑـﺮد هﻤﭽﻨـﻴﻦ از ‪VHDL‬‬
‫ﻣﯽ ﺗﻮان در ﺳﻄﻮح ﻣﺨﺘﻠﻔﯽ از ﭘﻴﭽﻴﺪﮔﯽ اﺳﺘﻔﺎدﻩ ﮐﺮد از ﯾﮏ ﺗﺮاﻧﺰﯾﺴﺘﻮر ﮐﻮﭼـﮏ ﮔﺮﻓﺘـﻪ ﺗـﺎ ﯾـﮏ ﺳﻴﺴـﺘﻢ‬
‫ﮐﺎﻣﻞ را ﻣﯽ ﺗﻮان ﺑﺎ ﺁن ﻃﺮاﺣﯽ ﮐﺮد‪.‬‬

‫‪-٣‬وﺟﻮد ﻧﺮم اﻓﺰارهﺎﯼ ﺷﺒﻴﻪ ﺳﺎز ‪VHDL‬‬


‫ﯾﮑﯽ از دﻻﯾﻞ اﻓﺰاﯾﺶ ﻣﺤﺒﻮﺑﻴﺖ اﯾﻦ زﺑﺎن وﺟﻮد ﺗﻌﺪادﯼ از ﻧﺮم اﻓﺰارهﺎﯼ ﺷﺒﻴﻪ ﺳﺎز ﺑﺎ ﻗﻴﻤﺘﯽ ﻣﻨﺎﺳﺐ‬
‫ﻣﺎﻧﻨﺪ ‪ Active VHDL‬اﺳﺖ ﮐﻪ ﻣﯽ ﺗﻮاﻧﻴﺪ ﺑﺎ ﻣﺮاﺟﻌﻪ ﺑﻪ ﺳﺎﯾﺖ ‪ www.aldec.com‬در ﻣﻮرد ﺁن ﺑﻴﺸﺘﺮ‬
‫اﻃﻼﻋﺎت ﮐﺴﺐ ﮐﻨﻴﺪ‪.‬‬

‫ﺻﻔﺤﻪ ‪ 1‬از ‪2‬‬ ‫آﻣﻮزش ‪ ) VHDL‬ﻣﻘﺪﻣﻪ (‬


‫‪ -۴‬در اﺧﺘﻴﺎر داﺷﺘﻦ ﺳﻨﺘﺰ ﮐﻨﻨﺪﻩ هﺎﯼ ‪VHDL‬‬
‫اﻣﺮوزﻩ ﺑﺴﻴﺎرﯼ از ﻓﺮوﺷﻨﺪﮔﺎن وﺳﺎﯾﻞ ﻗﺎﺑﻞ ﺑﺮﻧﺎﻣﻪ رﯾﺰﯼ )‪ (Programmable Device‬و ﺷﺮﮐﺎﺗﻬﺎﯼ ﺗﻮﻟﻴﺪ‬
‫ﮐﻨﻨﺪﻩ ﻧﺮم اﻓﺰارهﺎﯼ ‪ EDA‬ﺳﻨﺘﺰ ﮐﻨﻨﺪﻩ هﺎﯼ ﮔﻮﻧﺎﮔﻮﻧﯽ را اراﺋﻪ دادﻩ اﻧﺪﻣﺎﻧﻨﺪ ‪ Active-CAD‬ﮐﻪ ﯾﮏ ﺳﻨﺘﺰ‬
‫ﮐﻨﻨﺪﻩ ﯼ ﻣﻨﻄﻘﯽ ﺑﺮاﯼ ﺗﻤﺎم ﻣﺪارات ﻣﺠﺘﻤﻊ ‪ FPGA‬و ‪ CPLD‬ﻣﯽ ﺑﺎﺷﺪ‪.‬‬

‫‪ VHDL-۵‬ﯾﮏ زﺑﺎن ﻣﺪل ﺳﺎزﯼ ﺟﻬﺎﻧﯽ‬


‫ﮔﺮ ﭼﻪ ‪ VHDL‬ﺑﻴﺸﺘﺮ ﻣﺎ را ﻣﺘﻮﺟﻪ اﻟﮑﺘﺮوﻧﻴﮏ ﻣﯽ ﮐﻨﺪ در واﻗﻊ ﺑﻪ ﯾﮏ زﺑﺎن ﻣﺪل ﺳﺎزﯼ ﺟﻬﺎﻧﯽ ﺷﻬﺮت ﯾﺎﻓﺘﻪ‬
‫اﺳﺖ و ﺑﺮاﯼ ﻣﺪل ﺳﺎزﯼ و ﺷﺒﻴﻪ ﺳﺎزﯼ ﺳﻴﺴﺘﻤﻬﺎﯼ اﻟﮑﺘﺮو ﻣﮑﺎﻧﻴﮑﯽ و هﻴﺪروﻟﻴﮑﯽ و ﺷﻴﻤﻴﺎﯾﯽ و ‪...‬‬
‫ﻣﻮرد اﺳﺘﻔﺎدﻩ ﻗﺮار ﻣﯽ ﮔﻴﺮد‪.‬‬

‫ﭼﻨﺪ ﻧﻜﺘﻪ ﻣﻬﻢ در ﻣﻮرد ﻛﺪ ﻧﻮﻳﺴﻲ در ‪VHDL‬‬


‫‪-١‬زﺑﺎن ‪ VHDL‬ﻳﻚ زﺑﺎن ﺣﺴﺎس ﺑﻪ ﺣﺮوف ﻧﻴﺴﺖ ﻳﻌﻨﻲ ﺣﺮوف ﺑﺰرگ و آﻮﭼﻚ را ﺑﺪون ﺗﻔﺎوت در ﻧﻈﺮ ﻣﻴﮕﻴﺮد‬
‫ﻣﺜﻼ آﻠﻤﺎت زﻳﺮ هﻴﭻ ﻓﺮﻗﻲ ﺑﺎ هﻢ ﻧﺪارﻧﺪ‪Architecture , ARCHITECTURE , architecture:‬‬
‫‪-٢‬ﻧﻘﻄﻪ ﺷﺮوع ﺗﺮﺟﻤﻪ ي آﺪهﺎي ﺷﻤﺎ در اول هﺮ ﺧﻂ از دﺳﺘﻮرات ﻣﻲ ﺑﺎﺷﺪ ﻳﺎ ﺑﻪ ﻋﺒﺎرﺗﻲ دﻳﮕﺮ اﺟﺮاي‬
‫دﺳﺘﻮرات در ‪ VHDL‬ﻣﺎﻧﻨﺪ ‪ CPP‬ﺗﺮﺗﻴﺒﻲ ﻧﻴﺴﺖ ﻳﻌﻨﻲ دﺳﺘﻮرات ﻳﻜﺒﺎرﻩ و ﺑﺎ هﻢ اﺟﺮا ﻣﻲ ﺷﻮﻧﺪ‪.‬‬
‫اﮐﻨﻮن ﺑﻪ ﺑﺮﻧﺎﻣﻪ زﯾﺮ ﮐﻪ ﺑﻪ زﺑﺎن ‪ VHDL‬ﻧﻮﺷﺘﻪ ﺷﺪﻩ و دﯾﺎﮔﺮام ﻣﻘﺎﺑﻞ را ﺗﻮﺻﻴﻒ ﻣﯽ ﮐﻨﺪ ﺗﻮﺟﻪ ﮐﻨﻴﺪ ﺷﻤﺎ ﺑﺎﯾﺪ دﯾﺎﮔﺮام و‬
‫ﮐﺪهﺎﯼ ‪ VHDL‬را دﻗﻴﻘﺎ دﻧﺒﺎل ﮐﻨﻴﺪ ﺗﺎ ﯾﮏ دﯾﺪ ﮐﻠﯽ در ﻣﻮرد روش و ﻧﻤﺎﯼ ﺁن ﺑﺪﺳﺖ ﺁورﯾﺪ‪:‬‬

‫;‪Library IEEE‬‬
‫;‪Use IEEE.std_logic_1164.all‬‬
‫‪Entity prime is‬‬
‫; ‪Port (N0, N1, N2, N3: in BIT‬‬
‫;)‪F: out BIT‬‬
‫;‪End prime‬‬
‫‪Architecture prime1_arch of prime is‬‬
‫;‪Signal and1, and2, and3, and4: bit‬‬
‫‪Begin‬‬
‫;‪and1<= (not n3) and n0‬‬
‫;‪and2<= (not n3) and (not n2) and n1‬‬
‫;‪and3<= (not n2) and n1 and n0‬‬
‫;‪and4<= n2 and (not n1) and n0‬‬
‫‪f‬‬ ‫;‪<= and1 or and2 or and3 or and4‬‬
‫;‪End prime1_arch‬‬

‫ﺻﻔﺤﻪ ‪ 2‬از ‪2‬‬ ‫آﻣﻮزش ‪ ) VHDL‬ﻣﻘﺪﻣﻪ (‬


‫) ﻗﺴﻤﺖ اول (‬

‫) ‪( Part 1‬‬
‫ﻧﺤﻮه ﺗﻌﺮﻳﻒ ورودي و ﺧﺮوﺟﻲ‬
‫ﺑﺎ ﯾﺎد و ﻧﺎم ﺧﺪا اوﻟﻴﻦ درس از ‪ VHDL‬را ﺁﻏﺎز ﻣﯽ ﮐﻨﻴﻢ ﻗﺒﻞ از ﺷﺮوع درس ﺗﻮﺟﻪ ﺑﻪ ﻧﮑﺎت زﯾﺮ اﻟﺰاﻣﯽ‬
‫اﺳﺖ‪:‬‬
‫ﺷﻤﺎ ﭼﻪ هﺪﻓﯽ را از ﺁﻣﻮﺧﺘﻦ اﯾﻦ زﺑﺎن دﻧﺒﺎل ﻣﯽ ﮐﻨﻴﺪ؟ ﺁﯾﺎ ﺗﻔﺮﯾﺤﯽ ﺁن را ﯾﺎد ﻣﻴﮕﻴﺮﯾﺪ؟ ﯾﺎ ﻧﻪ ﺷﺎﯾﺪ‬
‫اهﺪاف ﻣﻬﻤﺘﺮﯼ را دﻧﺒﺎل ﻣﯽ ﮐﻨﻴﺪ؟‬
‫ﺑﻪ ﻧﻈﺮ ﻣﻦ اﯾﻦ زﺑﺎن ﺳﺎدﻩ ﺗﺮﯾﻦ زﺑﺎن ﺑﺮاﯼ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ ﺳﺨﺖ اﻓﺰارﯼ ﻣﯽ ﺑﺎﺷﺪ‪.‬ﺑﺎ وﺟﻮد ﺗﮑﻨﻮﻟﻮژﯼ‬
‫ﺟﺪﯾﺪ ‪ FPGA‬ﺷﻤﺎ ﺑﻴﺸﺘﺮ ﺑﻪ اﯾﻦ ﻧﻮع زﺑﺎن اﺣﺘﻴﺎج ﺧﻮاهﻴﺪ داﺷﺖ ‪ FPGA .‬ﭼﻴﺴﺖ؟ ﺗﺮاﺷﻪ هﺎﯾﯽ‬
‫هﺴﺘﻨﺪ ﺷﺒﻴﻪ ﺑﻪ ‪ IC‬ﺑﺎ ﭘﺎﯾﻪ هﺎﯾﯽ ﮐﻪ ﭼﻬﺎر ﻃﺮف ﺁن را ﮔﺮﻓﺘﻪ اﺳﺖ‪.‬ﺷﻤﺎ ﻣﯽ ﺗﻮاﻧﻴﺪ ﺑﺮﻧﺎﻣﻪ هﺎﯼ‬
‫ﭘﻴﭽﻴﺪﻩ اﯼ را روﯼ ‪ FPGA‬ﻗﺮار دادﻩ و ﺣﺪ اﮐﺜﺮ اﺳﺘﻔﺎدﻩ را ﺑﺎ هﺰﯾﻨﻪ اﯼ ﮐﻢ و ﺻﺮف وﻗﺖ ﮐﻢ ﺑﺪﺳﺖ‬
‫ﺁورﯾﺪ‪.‬اﺑﺘﺪا ﺑﺎﯾﺪ زﺑﺎن ‪ VHDL‬را ﺧﻮب ﺑﻴﺎﻣﻮزﯾﻢ ﺗﺎ ﺑﺘﻮاﻧﻴﻢ وارد وادﯼ ‪ FPGA‬ﺷﻮﯾﻢ ﺗﺎ ﺑﻪ ﻧﺤﻮ اﺣﺴﻦ از ﺁن‬
‫ﺳﻮد ﺑﺒﺮﯾﻢ‪).‬ﻧﺎﮔﻔﺘﻪ ﻧﻤﺎﻧﺪ ﮐﻪ زﺑﺎﻧﻬﺎﯼ دﯾﮕﺮﯼ هﻢ ﺑﺮاﯼ ‪ Program‬ﮐﺮدن ﺗﺮاﺷﻪ هﺎﯼ ‪ FPGA‬وﺟﻮد دارد‬
‫ﮐﻪ ﻣﻦ ‪ VHDL‬را ﺑﻬﺘﺮ ﻣﯽ ﭘﺴﻨﺪم!(‬
‫در ﺁﯾﻨﺪﻩ اﯼ ﻧﺰدﯾﮏ ﻗﺼﺪ دارم ﻣﻘﺎﻟﻪ اﯼ ﺗﻮﺻﻴﻔﯽ در ﻣﻮرد ﺗﺮاﺷﻪ هﺎﯼ ﻗﺎﺑﻞ ﺑﺮﻧﺎﻣﻪ رﯾﺰﯼ اراﺋﻪ دهﻢ‪.‬‬
‫ﺑﻪ اﻣﻴﺪ ﺧﺪا‪.‬‬
‫ﺗﻮﺟﻪ‪:‬اﻳﻦ ﺑﺨﺶ ﺁﻣﻮزﺷﻲ ﺑﺮ اﺳﺎس آﺎﻣﭙﺎﻳﻠﺮ و ﻣﺤﻴﻂ ﻧﺮم اﻓﺰار ‪ Active-VHDL‬اراﺋﻪ ﺷﺪﻩ اﺳﺖ‪.‬‬

‫‪Entity-١‬‬
‫اﮐﻨﻮن وﻗﺖ ﺁن رﺳﻴﺪﻩ ﮐﻪ ﺑﺎ اوﻟﻴﻦ دﺳﺘﻮر ﺁﺷﻨﺎ ﺷﻮﯾﺪ ‪Entity :‬‬
‫هﻤﻴﺸﻪ هﺮ ﺳﻴﺴﺘﻤﯽ در ﻃﺮاﺣﯽ ‪ VHDL‬ﺑﺎ ‪ Entity‬ﺁﻏﺎز ﺧﻮاهﺪ ﺷﺪ‪.‬‬
‫ﻣﺮﮐﺰ اﺻﻠﯽ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﯾـﺎ ﺑـﻪ ﻋﺒـﺎرت دﯾﮕـﺮ هﻤـﺎن ‪ Main‬ﺷـﻤﺎ ﺑـﻴﻦ دو ﻋﺒـﺎرت ‪ Entity‬و ;‪end Entity‬‬
‫ﺗﻌﺮﯾﻒ ﻣﯽ ﺷﻮد‪.‬ﻧﺎم ﺳﻴﺴﺘﻤﯽ ﮐﻪ ﺷﻤﺎ ﻗﺼﺪ ﻃﺮاﺣﯽ ﺁن را دارﯾـﺪ ﻣﻘﺎﺑـﻞ ﮐﻠﻤـﻪ ﯼ ‪ Entity‬ﻗـﺮار ﻣـﯽ‬
‫ﮔﻴﺮد ﻣﺜﻼ اﮔﺮ ﻣﯽ ﺧﻮاهﻴﺪ ﯾﮏ ‪ Processor‬ﻃﺮاﺣﯽ ﮐﻨﻴﺪ ﺑﺎﯾﺪ ﺑﻨﻮﯾﺴﻴﺪ‪:‬‬
‫‪Entity Processor is‬‬
‫اﯾﻦ ﻗﺴﻤﺖ ﻣﺤﻞ ﺗﻌﺮﯾﻒ ورودﯼ هﺎ و ﺧﺮوﺟﯽ هﺎﯼ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎﺳﺖ‪--‬‬
‫;‪End entity‬‬
‫ﺣﺎﻻ ﺑﺎﯾﺪ ﺑﺒﻴﻨﻴﻢ ﻣﻨﻈﻮر از ورودﯼ و ﺧﺮوﺟﯽ ﮐﻪ ﺑﻌﺪ از ‪ Entity‬ﺗﻌﺮﯾﻒ ﻣﯽ ﺷﻮد ﭼﻴﺴﺖ؟‬
‫‪-١‬ﭘﺎراﻣﺘﺮ هﺎ ‪ :‬ﻣﺎﻧﻨﺪ ﭘﻬﻨﺎﯼ ﯾﮏ ﮔﺬر ﮔﺎﻩ ﯾﺎ ‪ Bus‬ﺑﺮاﯼ ﯾﮏ ﭘﺮدازﻧﺪﻩ ﯾـﺎ ﻣـﺎﮐﺰﻣﻴﻢ ﻣﻘـﺪار ﻓﺮﮐـﺎﻧﺲ ﺑـﺮاﯼ ‪clock‬‬
‫ﺳﻴﺴﺘﻢ‪.‬‬
‫‪-٢‬راﻩ هﺎﯼ ارﺗﺒﺎﻃﯽ از ﺧﺎرج ﺑﻪ ﺳﻴﺴﺘﻢ و از داﺧﻞ ﺳﻴﺴﺘﻢ ﺑﻪ ﺧﺎرج ﮐﻪ وﻇﻴﻔﻪ اﻧﺘﻘﺎل دادﻩ هﺎ را ﺑﺮ ﻋﻬﺪﻩ‬
‫دارﻧﺪ‪.‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ اول (‬


‫ﺑﺎ ﻣﻄﺎ ﻟﻌﻪ ﯼ ﻣﺜﺎل زﯾﺮ ﮐﻪ ﯾﮏ ﺛﺒﺎت ‪ ٨‬ﺑﻴﺘﯽ را ﺗﻮﺻﻴﻒ ﻣﯽ ﮐﻨﺪ دو ﻣﻄﻠﺐ ﺑﺎﻻ را ﺑﻬﺘﺮ درﮎ ﺧﻮاهﻴﺪ ﮐﺮد‪:‬‬

‫‪Entity eight_bit_register is‬‬


‫ﭘﺎراﻣﺘﺮهﺎ‪:‬‬
‫ﻃﻮل = ‪٨‬‬
‫ﻣﺎﮐﺴﻴﻤﻢ ﻓﺮﮐﺎﻧﺲ=‪ ۵٠‬ﻣﮕﺎهﺮﺗﺰ‬
‫راﻩ هﺎﯼ ارﺗﺒﺎﻃﯽ ﺑﺎ ﺛﺒﺎت‪:‬‬
‫‪٨‬ﺑﻴﺖ ورودﯼ ‪D_in‬‬
‫‪٨‬ﺑﻴﺖ ﺧﺮوﺟﯽ ‪D_out‬‬
‫ﯾﮏ ﺑﻴﺖ ورودﯼ ‪CLK‬‬
‫;‪End entity eight_bit_register‬‬
‫ﻧﻤﻮﻧﻪ دﯾﮕﺮ ‪:‬‬

‫ﺗﻮﺟﻪ‪:‬ﭘﺎراﻣﺘﺮهﺎ و را هﻬﺎﯼ ارﺗﺒﺎﻃﯽ ﺑﺎ ﺛﺒﺎت ﮔﻔﺘﻪ ﺷﺪﻩ در اﯾﻦ ﻣﺜﺎل ﻓﻘﻂ ﺟﻨﺒﻪ ﯼ ﺳﻤﺒﻮﻟﻴﮏ دارﻧﺪ و ﺻﺮﻓﺎ‬
‫ﺑﺮاﯼ درﮎ ﺑﻴﺸﺘﺮ ﺁوردﻩ ﺷﺪﻩ اﻧﺪ و ﻧﻤﻮﻧﻪ ﮐﺪ ‪ VHDL‬ﻧﻴﺴﺘﻨﺪ‪.‬‬
‫‪Entity eight_bit_register is‬‬
‫‪Generic ( length=8‬‬
‫‪Fmax =50 MHz‬‬
‫;)‬
‫‪Port‬‬ ‫‪( D_IN eight-bit input‬‬
‫‪D_OUT eight-bit output‬‬
‫‪CLK‬‬ ‫‪one-bit input‬‬
‫;)‬
‫;‪End entity eight_bit_register‬‬

‫ﭘﺎراﻣﺘﺮ هﺎ در زﺑﺎن ‪ VHDL‬ﺑﻌﺪ از ﮐﻠﻤﻪ ﯼ ‪ Generic‬ﻣﯽ ﺁﯾﻨﺪ و ورودﯼ ﺧﺮوﺟﯽ هﺎ ﺑﻌﺪ از ﮐﻠﻤﻪ ﯼ ‪Port‬‬
‫ﺧﻮاهﻨﺪ ﺁﻣﺪ ﮐﻪ در اداﻣﻪ ﺑﻴﺸﺘﺮ در ﻣﻮرد اﯾﻦ دو ﻗﺴﻤﺖ ﺑﺤﺚ ﻣﯽ ﮐﻨﻴﻢ ﻗﺒﻼ ﮐﻤﯽ در ﻣﻮرد ‪Architecture‬‬
‫ﺻﺤﺒﺖ ﻣﯽ ﮐﻨﻴﻢ‪:‬‬

‫‪Architecture-٢‬‬
‫ﻣﺜﺎل‪:‬وﺳﺎﯾﻞ ﭘﻴﺸﺮﻓﺘﻪ اﻟﮑﺘﺮوﻧﻴﮑﯽ ﻣﺎﻧﻨﺪ ﺗﻠﻮﯾﺰﯾﻮن ﮔﺎهﯽ ﮐﻤﺘﺮ اﺳﺘﻔﺎدﻩ ﻣﻴﺸﻮﻧﺪ زﻳﺮا اﮔﺮ وﺳﻴﻠﻪ اﯼ ﺑﺮاﯼ‬
‫ﮐﻨﺘﺮل ﮐﺮدن و ارﺗﺒﺎط ﺑﺮﻗﺮار ﮐﺮدن ﺑﺎ ﺁﻧﻬﺎ در اﺧﺘﻴﺎر ﻧﺪاﺷﺘﻪ ﺑﺎﺷﻴﻢ‪.‬اﯾﻦ وﺳﻴﻠﻪ ﻗﺴﻤﺖ ﻣﻬﻤﯽ در ﯾﮏ‬
‫ﻃﺮاﺣﯽ ‪ VHDL‬ﻣﯽ ﺑﺎﺷﺪ ﻣﺜﻼ در ‪ TV‬هﻤﺎن ‪ Remote Control‬را ﻓﺮض ﻣﯽ ﮐﻨﻴﻢ ‪ Architecture‬هﻢ دﻗﻴﻘﺎ‬
‫ﮐﺎر ﺁن را اﻧﺠﺎم ﻣﯽ دهﺪ ﮐﻪ ﺑﻪ ﺻﻮرت زﯾﺮ ﺗﻌﺮﯾﻒ ﻣﯽ ﺷﻮد‪:‬‬
‫‪Entity Tvset is‬‬

‫…‬

‫;‪End entity Tvset‬‬

‫‪Architecture TV2000 of Tvset is‬‬

‫…‬

‫;‪End Architecture TV2000‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ اول (‬


‫دﺳﺘﻮراﺗﯽ ﮐﻪ ﻣﺎ ﻣﯽ ﺗﻮاﻧﻴﻢ در ﻗﺴﻤﺖ ‪ Architecture‬ﻗﺮار دهﻴﻢ ‪ ٢‬ﻧﻮع هﺴﺘﻨﺪ‪:‬‬

‫رﻓﺘﺎرﯼ )‪1-Functionality (Behavioral‬‬


‫ﻣﺘﻨﯽ و ﺳﺎﺧﺘﻤﺎﻧﯽ ‪2-Structural‬‬

‫ﻣﻨﻈﻮر از رﻓﺘﺎرﯼ اﯾﻦ اﺳﺖ ﮐﻪ دﺳﺘﻮرات ﻣﺎ ﻓﻘﻂ رﻓﺘﺎر ﺳﻴﺴﺘﻢ را ﺗﻮﺻﻴﻒ ﮐﻨﻨﺪ و ﺑﻪ اﻧﻮاع ﮔﻴﺘﻬﺎﯼ ﺑﻪ ﮐﺎر‬
‫ﮔﺮﻓﺘﻪ ﺷﺪﻩ و رﻳﺰﻩ آﺎري هﺎ در ﺳﻴﺴﺘﻢ ﮐﺎرﯼ ﻧﺪارﯾﻢ‪ .‬ﺳﻨﺘﺰ ﮐﺮدن اﯾﻨﮕﻮﻧﻪ ﺑﺮﻧﺎﻣﻪ هﺎ ﺗﻮﺳﻂ ﻧﺮم اﻓﺰارهﺎﯼ‬
‫ﺳﻨﺘﺰ ﮐﻨﻨﺪﻩ دﺷﻮار ﺧﻮاهﺪ ﺑﻮد وﻟﯽ درﮎ و ﻓﻬﻢ ﺑﺮﻧﺎﻣﻪ اﯼ ﮐﻪ ﻣﺎ ﺑﻪ اﯾﻦ روش ﻧﻮﺷﺘﻪ اﯾﻢ ﺑﺴﻴﺎر ﺁﺳﺎن‬
‫اﺳﺖ‪.‬‬
‫ﻣﻨﻈﻮر از ﺳﺎﺧﺘﻤﺎﻧﯽ ﯾﻌﻨﯽ دﺳﺘﻮرات ﻣﺎ از ﻧﻈﺮ ﻣﺪار هﺎﯼ ﻣﻨﻄﻘﯽ ﮐﺎﻣﻞ ﺑﺎﺷﻨﺪ و ﺗﻤﺎم ﮔﻴﺘﻬﺎﯼ ﻣﻮﺟﻮد در‬
‫ﺳﻴﺴﺘﻢ را ﺗﻮﺻﻴﻒ ﻣﯽ ﮐﻨﻴﻢ ﮐﻪ ﺑﻪ اﯾﻦ ﯾﮏ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ ﮐﺎﻣﻞ ﮔﻔﺘﻪ ﻣﯽ ﺷﻮد‪.‬ﺳﻨﺘﺰ ﮐﺮدن اﯾﻨﮕﻮﻧﻪ‬
‫ﺑﺮﻧﺎﻣﻪ هﺎ ﺁﺳﺎن ﻣﯽ ﺑﺎﺷﺪ وﻟﯽ درﮎ اﻧﻬﺎ ﺗﻮﺳﻂ ﻣﺎ ﮐﺎرﯼ دﺷﻮار ﺧﻮاهﺪ ﺑﻮد‪.‬‬

‫هﺮ ﺳﻴﺴﺘﻤﯽ ﮐﻪ ﻣﺎ ﻗﺼﺪ ﻃﺮاﺣﯽ ﺁن را دارﯾﻢ ﻓﻘﻂ ﯾﮏ ‪ Entity‬دارد ﺑﺎ ﭼﻨﺪ ‪. Architecture‬‬


‫ﻋﮑﺲ اﯾﻦ ﻣﻄﻠﺐ درﺳﺖ ﻧﻴﺴﺖ ﯾﻌﻨﯽ ﺑﺮاﯼ ﯾﮏ ‪ Architecture‬ﻧﻤﯽ ﺗﻮاﻧﻴﻢ ﺗﻌﺪادﯼ ‪ Entity‬داﺷﺘﻪ‬
‫ﺑﺎﺷﻴﻢ‪.‬‬
‫ﺑﻪ ﻣﺜﺎل زﯾﺮ ﺗﻮﺟﻪ ﮐﻨﻴﺪ‪:‬‬
‫اﮔﺮ ﻣﻴﻨﺒﻮردﯼ)‪ (MainBoard‬ﮐﻪ ﺑﺎ ﭘﺮدازﻧﺪﻩ هﺎﯼ ﻣﺨﺘﻠﻒ ﮐﺎر ﻣﻴﮑﻨﺪ را ﺑﻪ ﻋﻨﻮان ﯾﮏ ﺑﺮﻧﺎﻣﻪ ‪ VHDL‬در ﻧﻈﺮ‬
‫ﺑﮕﻴﺮﯾﺪ ﺧﻮاهﻴﺪ دﯾﺪ ﮐﻪ ﻣﻴﻨﺒﻮرد ﻣﺎ هﻤﺎن ﻗﺴﻤﺖ ‪ Entity‬ﺑﺮﻧﺎﻣﻪ اﺳﺖ ﭼﻮن ﻓﻘﻂ ﯾﮏ ﻣﻴﻨﺒﻮرد دارﯾﻢ ﭘﺲ‬
‫ﻓﻘﻂ ﯾﮏ ‪ Entity‬هﻢ دارﯾﻢ و ﭘﺮدازﻧﺪﻩ هﺎﯼ ﻣﺨﺘﻠﻒ هﻤﺎن ‪ Architecture‬هﺎﯼ ﺑﺮﻧﺎﻣﻪ ﻣﺎ ﻣﯽ ﺑﺎﺷﻨﺪ ﻣﺜﻼ‬
‫ﺑﺮاﯼ ‪ CPU‬هﺎﯼ ‪ AMD,Intel,Cyrix‬ﺧﻮهﻴﻢ داﺷﺖ‪:‬‬

‫‪Entity pentium is‬‬


‫…‬
‫;‪End entity pentium‬‬
‫‪Architecture Amd of pentium is‬‬
‫‪..‬‬
‫;‪End Amd‬‬
‫‪Architecture Intel of pentium is‬‬
‫‪..‬‬
‫;‪End Intel‬‬
‫‪Architecture Cyrix of pentium is‬‬
‫‪..‬‬
‫;‪End Cyrix‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ اول (‬


‫ﺑﺎ داﺷﺘﻦ ﯾﮏ ﭼﻨﻴﻦ ﺑﺮﻧﺎﻣﻪ اﯼ هﺮ زﻣﺎن ﺑﻪ هﺮ ﻧﻮع ﭘﺮدازﻧﺪﻩ اﯼ ﮐﻪ اﺣﺘﻴﺎج داﺷﺘﻴﻢ ﻣﯽ ﺗﻮاﻧﻴﻢ ﺁن را روﯼ‬
‫ﻣﻴﻨﺒﻮرد وﺻﻞ ﮐﻨﻴﻢ‪.‬‬
‫هﻤﻪ دﺳﺘﻮراﺗﯽ ﮐﻪ ﻣﯽ ﺗﻮان در ‪ Architecture‬اﺳﺘﻔﺎدﻩ ﮐﺮد در ﮐﺘﺎﺑﺨﺎﻧﻪ اﯼ ﺑﻪ ﻧﺎم ‪ IEEE‬وﺟﻮد دارد ﺑﺎ‬
‫ﻣﺮاﺟﻌﻪ ﺑﻪ ﺁن ﻣﻲ ﺗﻮان اﺑﻬﺎﻣﺎت اﺣﺘﻤﺎﻟﯽ را رﻓﻊ ﮐﺮد‪.‬اﮔﺮ ﺑﻪ ﻟﻔﻈﯽ ﻏﻴﺮ اﺳﺘﺎﻧﺪارد و ﻧﺎ ﻣﻔﻬﻮم ﺑﺮﺧﻮردﯾﺪ‬
‫اﺑﺘﺪا ‪ Library‬را ﺻﺪا زدﻩ ﺳﭙﺲ در ﮐﺘﺎﺑﻬﺎﯼ ﻣﻮﺟﻮد در ﺁن ﺑﻪ دﻧﺒﺎل ﮐﻠﻤﻪ ﻣﻮرد ﻧﻈﺮ ﺑﮕﺮدﯾﺪ‪.‬ﺑﺴﺘﻪ ﺑﻨﺪﯼ هﺎ‬
‫ﯾﺎ ‪ Packages‬ﮐﻪ در ‪ Library‬وﺟﻮد دارﻧﺪ ﺑﻪ ﺳﻪ دﺳﺘﻪ ﺗﻘﺴﻴﻢ ﻣﯽ ﺷﻮﻧﺪ‪:‬‬

‫‪Standard-١‬‬
‫اﯾﻦ ﮐﺘﺎﺑﺨﺎﻧﻪ ﺑﻪ ﺻﻮرت ‪ Default‬در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣﯽ ﺷﻮد و اﮔﺮ در اﺑﺘﺪاﯼ ﺑﺮﻧﺎﻣﻪ ﻧﺎم ﮐﺘﺎﺑﺨﺎﻧﻪ ﻣﻮرد ﻧﻈﺮ ذﮐﺮ‬
‫ﻧﺸﺪ ﮐﺎﻣﭙﺎﯾﻠﺮ ﺑﻪ ﻃﻮر ﭘﻴﺶ ﻓﺮض ﺁن را ‪ Standard‬در ﻧﻈﺮ ﻣﯽ ﮔﻴﺮد ﮐﻪ ﺷﺎﻣﻞ ﺗﻤﺎم اﻧﻮاع اﺳﺘﺎﻧﺪارد‬
‫ﻋﻤﻠﮕﺮهﺎ و اﺷﻴﺎ ﻣﯽ ﺑﺎﺷﺪ‪.‬‬

‫‪Textio-٢‬‬
‫اﯾﻦ ‪ Library‬ﻓﻘﻂ ﺑﻪ ﻣﻨﻈﻮر ﺷﺒﻴﻪ ﺳﺎزﯼ و ﻣﺪل ﺳﺎزﯼ ﺑﺎ ‪ VHDL‬ﺑﻪ ﮐﺎر ﻣﯽ رود و ﺑﻪ ﻋﻨﻮان ﺑﺮﻧﺎﻣﻪ اﯼ ﮐﻪ‬
‫ﺑﺘﻮاﻧﺪ روﯼ ﻣﺪارات ﻣﺠﺘﻤﻊ ﭘﻴﺎدﻩ ﺳﺎزﯼ ﺷﻮد ﻧﻴﺴﺖ و ﺑﺪﯾﻦ ﺻﻮرت در اﺑﺘﺪاﯼ ﺑﺮﻧﺎﻣﻪ ﻧﻮﺷﺘﻪ ﻣﯽ ﺷﻮد‪:‬‬
‫;‪Library Std‬‬
‫;‪Use Std.TextIO.all‬‬

‫‪STD_LOGIC_1164-٣‬‬
‫اﯾﻦ ﻣﻬﻤﺘﺮﯾﻦ و ﭘﺮﮐﺎرﺑﺮد ﺗﺮﯾﻦ ﮐﺘﺎﺑﺨﺎﻧﻪ اﺳﺖ و هﻤﻴﺸﻪ ﺑﻪ ﻋﻨﻮان ﻣﺮﺟﻊ اﺳﺘﻔﺎدﻩ ﻣﯽ ﺷﻮد ﻧﻤﺎﯾﺶ ﺁن‬
‫ﺑﺪﯾﻦ ﺻﻮرت اﺳﺖ‪:‬‬
‫;‪Library IEEE‬‬
‫;‪Use IEEE.Std_Logic_1164.all‬‬

‫اﮔﺮ دﻗﻴﻘﺎ ﭘﺲ از ﺧﻮاﻧﺪن ﻣﻄﺎﻟﺐ ﮔﻔﺘﻪ ﺷﺪﻩ در ﺑﺎﻻ ‪ ،‬درس ﺑﻌﺪﯼ را ﺑﺨﻮاﻧﻴﺪ ﺧﻴﻠﯽ ﺑﻬﺘﺮ اﺳﺖ‪...‬‬

‫درس ﺑﻌﺪ راﺟﻊ ﺑﻪ ﻃﺮز ﺗﻌﺮﯾﻒ ﺳﻴﮕﻨﺎﻟﻬﺎ و ﭘﻮرﺗﻬﺎ ﺧﻮاهﺪ ﺑﻮد‪.‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ اول (‬


‫) ﻗﺴﻤﺖ دوم (‬

‫ﻧﺤﻮه ﺗﻌﺮﻳﻒ اﻧﻮاع ﺳﻴﮕﻨﺎﻟﻬﺎ و ﭘﻮرﺗﻬﺎ‬


‫‪Signal-٣‬‬
‫ﺷﺎﯾﺪ ﮐﺴﺎﻧﯽ ﮐﻪ درس ﻣﺪار ﻣﻨﻄﻘﯽ را ﮔﺬراﻧﺪﻧﺪ ﺗﻌﺮﯾﻒ ﺳﻴﮕﻨﺎل را ﺑﺪاﻧﻨﺪ ﺑﻪ هﺮ ﺣﺎل در ﺷﮑﻞ زﯾﺮ ﮐﺎﻣﻼ‬
‫واﺿﺢ اﺳﺖ‪:‬‬

‫ﺑﻪ ﻋﺒﺎرت ﺳﺎدﻩ ﺗﺮ اﮔﺮ ﻣﺎ دو ﮔﻴﺖ ﻣﺜﻼ ‪ AND‬داﺷﺘﻪ ﺑﺎﺷﻴﻢ ﮐﻪ ﺧﺮوﺟﯽ ﯾﮑﯽ ‪ ،‬ورودﯼ دﯾﮕﺮﯼ ﺑﺎﺷﺪ ﺁﻧﮕﺎﻩ‬
‫ﺗﮑﻠﻴﻒ دادﻩ اﯼ ﮐﻪ از اوﻟﻴﻦ ‪ AND‬ﺧﺎرج ﻣﯽ ﺷﻮد ﭼﻴﺴﺖ ﺑﻠﻪ! اﯾﻦ دادﻩ را ﺑﺎﯾﺪ ﺑﻪ ﯾﮏ ﻣﺘﻐﻴﺮ ﮐﻪ ﺑﻪ ﺻﻮرت‬
‫ﺳﻴﮕﻨﺎل ﺗﻌﺮﯾﻒ ﺷﺪﻩ اﺳﺖ ﻧﺴﺒﺖ دهﻴﻢ‪).‬در ﺿﻤﻦ ﻋﻤﻠﮕﺮ ﻧﺴﺒﺖ دادن اﯾﻦ اﺳﺖ ‪ " a<=b ":‬ﯾﻌﻨﯽ ﻣﻘﺪار‬
‫‪ b‬را درون ‪ a‬ﻗﺮار ﺑﺪﻩ ‪ ،‬ﮐﻪ در ﻣﺜﺎل زﯾﺮ واﺿﺢ ﺗﺮ اﺳﺖ‪:‬‬

‫‪Entity test1 is‬‬


‫;) ‪Port ( x , y , z :in bit ; f :out bit‬‬
‫;‪End entity‬‬
‫‪Architecture t1 of test1 is‬‬
‫; ‪Signal sig1 : bit‬‬
‫‪Begin‬‬
‫; ‪Sig1<=x and y‬‬
‫; ‪F<=sig1 and z‬‬
‫;‪End t1‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ دوم (‬


‫‪-4‬اﻧﻮاع ﺳﻴﮕﻨﺎﻟﻬﺎ‬
‫ﺑﻪ ورودﯼ و ﺧﺮوﺟﻴﻬﺎ هﻢ ﻣﯽ ﺗﻮان ﺳﻴﮕﻨﺎل ﮔﻔﺖ اﻣﺎ اﻧﻮاع ﻣﺨﺘﻠﻔﯽ هﺴﺘﻨﺪ‬

‫‪-١‬ﺳﻴﻢ ﯾﺎ ‪Wire‬‬
‫‪-٢‬ﮔﺬرﮔﺎﻩ ﯾﺎ ‪Bus‬‬

‫ﮐﻪ هﺮ ﮐﺪام از ﺁﻧﻬﺎ در ‪ VHDL‬ﺑﺎ ﻧﺎم ﻣﺨﺼﻮﺻﯽ ﻋﻨﻮان ﻣﯽ ﺷﻮد ﻣﺜﻼ ﺳﻴﻤﻬﺎ هﻤﻴﺸﻪ ﺣﺎﻣﻞ ﯾﮏ ﺑﻴﺖ دادﻩ‬
‫هﺴﺘﻨﺪ و ‪ Bus‬هﺎ ﺣﺎﻣﻞ ﭼﻨﺪ ﺑﻴﺖ‪.‬‬
‫ﮐﻪ در ‪ VHDL‬هﺮ ﻣﺘﻐﻴﺮﯼ را ﮐﻪ ﻣﯽ ﺧﻮاهﻴﻢ از ﻧﻮع ﺳﻴﻢ ﯾﺎ ‪ wire‬ﺗﻌﺮﯾﻒ ﮐﻨﻴﻢ ﺑﺎﯾﺪ ﺁن را از ﻧﻮع ‪ Bit‬در ﻧﻈﺮ‬
‫ﺑﮕﻴﺮﯾﻢ هﻤﭽﻨﻴﻦ ﺑﺮاﯼ ﻣﺘﻐﻴﺮهﺎﯼ از ﻧﻮع ﮔﺬرﮔﺎﻩ ﯾﺎ ‪ Bus‬ﺑﺎﯾﺪ ﺑﻨﻮﯾﺴﻴﻢ ‪ Bit_Vector‬ﻣﺎﻧﻨﺪ ﺷﮑﻞ زﯾﺮ‪:‬‬

‫ﻣﺜﻼ ﺑﺮاﯼ ﺗﻌﺮﯾﻒ ﯾﮏ ورودﯼ ﺑﻪ ﻧﺎم ‪ Data‬از ﻧﻮع ‪ Bus‬ﮐﻪ ﺣﺎﻣﻞ ‪ ٨‬ﺑﻴﺖ دادﻩ ﺑﺎﺷﺪ و ﯾﮏ ورودﯼ ﺑﻪ ﻧﺎم ‪ C‬ﮐﻪ‬
‫از ﻧﻮع ﺑﻴﺖ اﺳﺖ دارﯾﻢ‪:‬‬

‫‪Entity test2 is‬‬


‫;)‪Port(data : in bit_vector(7 downto 0) ; c : in bit‬‬
‫;‪End entity‬‬

‫ﻧﮑﺘﻪ‪ :‬ورودﯼ ‪ Data‬ﻋﺪدﯼ اﺳﺖ ‪ ٨‬ﺑﻴﺘﯽ ﮐﻪ اوﻟﻴﻦ رﻗﻢ از ﺳﻤﺖ راﺳﺖ ﻣﻌﺎدل ﺑﺎﯾﻨﺮﯼ ﺁن داراﯼ اﻧﺪﯾﺲ‬
‫ﺻﻔﺮ ﻣﯽ ﺑﺎﺷﺪ اﮔﺮ ﺑﺨﻮاهﻴﻢ اﻧﺪﯾﺴﻬﺎ از ﭼﭗ ﺑﻪ راﺳﺖ ﺷﺮوع ﺷﻮﻧﺪ ﺑﺎﯾﺪ اﯾﻨﮕﻮﻧﻪ ﺑﻨﻮﯾﺴﻴﻢ‪:‬‬

‫‪Entity test2 is‬‬


‫;)‪Port(data : in bit_vector(0 to 7) ; c : in bit‬‬
‫;‪End entity‬‬

‫ﯾﺎدﺁورﯼ ﻣﻬﻢ‪ :‬هﻤﻴﺸﻪ ﻣﮑﺎن ﺗﻌﺮﯾﻒ ورودﯼ و ﺧﺮوﺟﯽ هﺎ در ‪ Entity‬و ﻗﺴﻤﺖ ‪ Port‬ﻣﻴﺒﺎﺷﺪ و ‪ Signal‬هﺎ‬
‫هﻤﻴﺸﻪ در ‪ Architecture‬و ﻗﺒﻞ از ‪ Begin‬ﺗﻌﺮﯾﻒ ﻣﯽ ﺷﻮﻧﺪ‪.‬ﻣﺜﻼ در ﺷﮑﻞ ﻗﺒﻞ ﻓﻘﻂ ﺁن ﭘﻴﮑﺎﻧﯽ ﮐﻪ ﺑﻴﻦ دو‬
‫ﻣﺴﺘﻄﻴﻞ ﻗﺮار ﮔﺮﻓﺘﻪ و ﻣﻘﺎﺑﻠﺶ ﻋﺒﺎرت ‪ INTBUS‬ﻧﻮﺷﺘﻪ ﺷﺪﻩ از ﻧﻮع ‪ Signal‬اﺳﺖ اﯾﻦ ادﻋﺎ در ﻣﻮرد دو‬
‫‪ Wire‬ﺑﻪ ﻧﺎﻣﻬﺎﯼ ‪ X‬و ‪ Y‬هﻢ ﺻﺎدق اﺳﺖ‪.‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ دوم (‬


‫ﺑﻪ ﻣﺜﺎل زﯾﺮ ﮐﻪ در ﻣﻮرد ﺷﮑﻞ ﻗﺒﻞ ﻃﺮح ﺷﺪﻩ ﺗﻮﺟﻪ ﻓﺮﻣﺎﯾﻴﺪ‪:‬‬
‫‪Entity Test3 is‬‬
‫; )‪Port(a , b , c : in bit ; Data : in Bit_Vector(7 downto 0‬‬
‫; )‪Z : in bit ; EXTBUS : out Bit_Vector(4 downto 0‬‬
‫;) )‪RESULT : inout Bit_Vector (0 to 7‬‬
‫;‪End entity‬‬
‫‪Architecture RTL of Test3 is‬‬
‫; ‪Signal : x , y : bit‬‬
‫;)‪Signal : INTBUS : bit_vector(4 downto 0‬‬
‫‪Begin‬‬
‫;‪End RTL‬‬
‫‪ : IN‬دادﻩ از ﻧﻮع ورودﯼ ﻣﯽ ﺑﺎﺷﺪ‪.‬‬
‫‪ : OUT‬دادﻩ از ﻧﻮع ﺧﺮوﺟﯽ ﻣﯽ ﺑﺎﺷﺪ‪.‬‬
‫‪ : INOUT‬دادﻩ ﻣﯽ ﺗﻮاﻧﺪ هﻢ ﺧﺮوﺟﯽ و هﻢ ورودﯼ ﺑﺎﺷﺪ‪.‬‬
‫درس اول را ﺑﺎ ذﮐﺮ دو ﻧﮑﺘﻪ زﯾﺮ ﺑﻪ ﭘﺎﯾﺎن ﻣﯽ ﺑﺮﯾﻢ‪:‬‬

‫‪-١‬اﺳﺎﻣﯽ ﮐﻪ ﺷﻤﺎ ﺑﺮاﯼ ‪ Entity‬وَ‪ Architecture‬هﺎﯾﺘﺎن اﻧﺘﺨﺎب ﻣﯽ ﮐﻨﻴﺪ ﺣﺘﻤﺎ ﺑﺎﯾﺪ ﺑﺎ ﺣﺮوف اﻟﻔﺒﺎ ﺁﻏﺎز‬
‫ﺷﻮﻧﺪ‪.‬‬

‫‪-٢‬اﮔﺮ در ﻣﻴﺎن ﺧﻄﻮط ﺑﺮﻧﺎﻣﻪ ﺧﻮاﺳﺘﻴﺪ ﺗﻮﺿﻴﺤﺎت )‪ (Comment‬اﺿﺎﻓﻪ ﮐﻨﻴﺪ ﻗﺒﻞ از ﺁن ﺑﺎﯾﺪ دو ﺧﻂ ﻓﺎﺻﻠﻪ‬
‫)هﻤﺎن ﻋﻼﻣﺖ ﺗﻔﺮﯾﻖ( ﻗﺮار دهﻴﻢ ‪.‬‬

‫اﻣﻴﺪ وارم اﯾﻦ درس ﺑﺪون هﻴﭻ اﺑﻬﺎﻣﯽ از ﻧﻈﺮ ﺷﻤﺎ ﮔﺬﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬
‫ﺗﺎ درس ﺁﯾﻨﺪﻩ ‪...‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ دوم (‬


‫) ﻗﺴﻤﺖ ﺳﻮم (‬

‫در اﻳﻦ درس ﺑﻪ ﻧﺤﻮه ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ و ﻛﻠﻤﻪ ‪ Generic‬و اراﺋﻪ ﻳﻚ ﻣﺜﺎل ﺣﻞ ﺷﺪه و ﺗﻤﺮﻳﻦ ﻣﻲ‬
‫ﭘﺮدازﻳﻢ‪.‬‬

‫‪Generic-۵‬‬
‫اﯾﻦ ﮐﻠﻤﻪ اﯼ اﺳﺖ رزرو ﺷﺪﻩ و ﻗﺒﻞ از ﺗﻌﺮﯾﻒ ﭘﻮرت ﯾﻌﻨﯽ در ‪ Entity‬اﺳﺘﻔﺎدﻩ ﻣﯽ ﺷﻮد ‪.‬از اﯾﻦ ﮐﻠﻤﻪ ﺑﻪ ﻣﻨﻈـﻮر ﻣﻘـﺪار‬
‫دادن ﺑﻪ ﯾﮏ ﻣﺘﻐﻴﺮ اﺳﺘﻔﺎدﻩ ﻣﯽ ﺷﻮد ﮐﻪ هﺮ ﺗﻌﺮﯾﻒ ﺑﻪ ﺻﻮرت ‪ Generic‬ﺷﺎﻣﻞ دﺳﺘﻮرات زﯾﺮ ﺧﻮاهﺪ ﺑﻮد‪:‬‬

‫ﻧﺎم ‪ Generic‬و ﭘﺲ از ﺁن ﯾﮏ ﮐﻮﻟﻦ "‪) ":‬دوﻧﻘﻄﻪ(‬ ‫‪-‬‬


‫ﻧﻮع اﯾﻦ ‪Generic‬‬ ‫‪-‬‬
‫ﻣﻘﺪار ﻣﻮرد اﻧﺘﺴﺎب ﮐﻪ ﺑﻮﺳﻴﻠﻪ "=‪ ":‬اﻧﺘﺴﺎب دادﻩ ﻣﯽ ﺷﻮد‬ ‫‪-‬‬
‫ﯾﮏ ﺗﻮﺿﻴﺢ ﮐﻮﺗﺎﻩ در ﻣﻮرد ﮐﺎرﺑﺮد اﯾﻦ ﻣﺘﻐﻴﺮ در ﺑﺮﻧﺎﻣﻪ ﮐﻪ ﺑﻮﺳﻴﻠﻪ ‪ - -‬ﻣﺸﺨﺺ ﻣﯽ ﺷﻮد‬ ‫‪-‬‬
‫ﺗﻔﺎﺳﻴﺮ ﮔﻔﺘﻪ ﺷﺪﻩ در ﺑﺎﻻ را ﺑﺎ ﻣﺜﺎل زﯾﺮ دﻗﻴﻘﺎ ﻣﻘﺎﯾﺴﻪ ﮐﻨﻴﺪ ﺗﺎ ﺑﻪ ﻣﺮﺗﺒﻪ درﮎ ﺑﺎﻻﺗﺮﯼ ﺑﺮﺳﻴﺪ‪:‬‬

‫‪Entity Eight_Bit_Register is‬‬


‫‪Generic ( Bus_Width : integer := 8 ; -- Parameters‬‬
‫‪MaxDelay : time :=20 ns); -- Parameters‬‬
‫‪-- Connections‬‬
‫‪-- Connections‬‬
‫;‪End Entity Eight_Bit_Register‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ ﺳﻮم (‬


‫ﺑﻪ ﺗﺼﻮﯾﺮ زﯾﺮ ﺧﻮب ﻧﮕﺎﻩ ﮐﻨﻴﺪ ﻣﺠﻤﻮﻋﻪ ‪ MyProcessor‬داراﯼ ﯾﮏ ورودﯼ ﺑﻪ ﺻﻮرت ‪ Bus‬ﻣﯽ ﺑﺎﺷﺪ ﮐﻪ داراﯼ ﭘﻬﻨـﺎﯼ‬
‫‪ ٧‬ﺑﻴﺖ اﺳﺖ ﺣﺎﻻ ﻓﺮض ﮐﻨﻴﺪ در ﺑﺮﻧﺎﻣﻪ ‪ VHDL‬ﺁن ‪ ،‬ﭘﻬﻨﺎﯼ اﯾﻦ ‪ Bus‬ﻣﺘﻐﻴـﺮ ﺑﺎﺷـﺪ ﯾﻌﻨـﯽ ﻣـﯽ ﺗﻮاﻧـﺪ اﻋـﺪاد دﯾﮕـﺮﯼ‬
‫ﺑﺮاﯼ ﭘﻬﻨﺎﯼ ‪ Bus‬در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﻮد در اﯾﻨﺠﺎﺳﺖ ﮐﻪ ﻣﯽ ﺗﻮان از دﺳﺘﻮر ‪ Generic‬ﺑﻬﺮﻩ ﮔﺮﻓﺖ ﺑﻪ ‪ Code‬هﺎﯼ زﯾـﺮ‬
‫ﮐﻪ در ﻣﻮرد هﻤﻴﻦ ﺷﮑﻞ ﻧﻮﺷﺘﻪ ﺷﺪﻩ اﺳﺖ ﺗﻮﺟﻪ ﮐﻨﻴﺪ‪:‬‬

‫‪Entity MyProcessor is‬‬


‫;) ‪Generic ( BusWidth : integer := 8‬‬
‫‪Port ( . . .‬‬
‫;) ‪DataBus : inout bit_vector ( BusWidth-1 downto 0‬‬
‫‪...‬‬
‫;)‬
‫;‪End entity MyPeocessor‬‬

‫ﺣﺎﻻ ﺑﺎﯾﺪ ﻣﻔﻬﻮم و ﻃﺮز اﺳﺘﻔﺎدﻩ از ‪ Generic‬را ﺧﻮب ﻓﻬﻤﻴﺪﻩ ﺑﺎﺷﻴﺪ اﮔﺮ ﻧﻔﻬﻤﻴﺪﯾﺪ دوﺑﺎرﻩ از اﺑﺘﺪاﯼ درس ﺑﺎ‬
‫ﺧﻮﻧﺴﺮدﯼ ﮐﺎﻣﻞ ﺁن را ﻣﻄﺎﻟﻌﻪ ﮐﻨﻴﺪ‪.‬‬

‫ﭼﻨﺪ ﻧﮑﺘﻪ ﻣﻬﻢ ﺑﺮﻧﺎﻣﻪ ﻧﻮﯾﺴﯽ‪:‬‬

‫‪-١‬هﻤﻴﺸﻪ ﺑﺮﻧﺎﻣﻪ هﺎﯾﺘﺎن را ﺑﺎ اراﺋﻪ ﺗﻮﺿﻴﺤﯽ ﻣﻨﺎﺳﺐ ﺑﺮاﯼ هﺮ ﺧﻄﺶ ﺧﻮاﻧﺎﺗﺮ و زﯾﺒﺎﺗﺮ ﮐﻨﻴﺪ ‪ ،‬ﻣﻨﻈﻮر ‪ ،‬ﺁوردن‬
‫‪ Comment‬هﺎﯼ ﻣﻨﺎﺳﺐ در اﻧﺘﻬﺎﯼ ﺧﻄﻮط ﺑﺮﻧﺎﻣﻪ اﺳﺖ‪.‬‬

‫‪-٢‬هﻤﻴﺸﻪ در اﻧﺘﺨﺎب ﻧﺎم ﺑﺮاﯼ ﻣﺘﻐﻴﺮهﺎ و اﺳﺎﻣﯽ ‪ Entity‬و ‪ Architecture‬و ‪ ...‬وﺳﻮاس ﺑﻪ ﺧﺮج دهﻴﺪ ﯾﻌﻨﯽ‬
‫ﻧﺎﻣﻬﺎﯼ ﻣﻨﺘﺨﺐ از ﺳﻮﯼ ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﻪ ﺗﻨﻬﺎﯾﯽ ﻗﺎدر ﺑﻪ اراﺋﻪ ﯾﮏ ‪ Comment‬ﺑﻪ ﺧﻮاﻧﻨﺪﻩ ﺑﺎﺷﺪ‪.‬‬

‫‪-6‬اﻧﻮاع داده ﻫﺎ ‪Data Types‬‬


‫اﻟﻒ‪Boolean-‬‬
‫ﺣﺘﻤﺎ ﺑﺎ اﯾﻦ ﻧﻮع دادﻩ ﺁﺷﻨﺎ هﺴﺘﻴﺪ ‪ :‬درﺳﺖ و ﻏﻠﻂ ﯾﺎ ﺑﻪ ﻋﺒﺎرﺗﯽ ‪True , False‬‬
‫;) ‪Type Boolean is ( false , true‬‬ ‫ﻧﺤﻮﻩ اﻋﻼن ﺁن ﺑﻪ ﺻﻮرت ﻣﻘﺎﺑﻞ اﺳﺖ‪:‬‬

‫ب‪Character-‬‬
‫;) …‪Type character is ( null , soh , … ,'a','b',‬‬ ‫ﻧﺤﻮﻩ اﻋﻼن ‪:‬‬

‫ج‪Integer-‬‬
‫;‪Type integer is range -2147483647 to 2147483647‬‬ ‫ﻧﺤﻮﻩ اﻋﻼن ‪:‬‬

‫د‪Real-‬‬
‫;‪Type real is range -1.0E308 to 1.0E308‬‬ ‫ﻧﺤﻮﻩ اﻋﻼن‪:‬‬

‫ﻩ‪Bit-‬‬
‫;) '‪Type Bit is ( '0' , '1‬‬ ‫ﻧﺤﻮﻩ اﻋﻼن‪:‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ ﺳﻮم (‬


‫ﺗﻌﺮﻳﻒ ﻓﻴﺰﻳﻜﻲ ﻳﻚ ﻧﻮع داده دﻟﺨﻮاه‪:‬‬
‫ﮐﻤﻴﺘﻬﺎﯼ ﻓﻴﺰﯾﮑﯽ ﻣﺎﻧﻨﺪ زﻣﺎن )‪ ،(Time‬ﻓﺎﺻﻠﻪ )‪ ، (Distance‬ﺟﺮﯾﺎن )‪ ، (Current‬دﻣﺎ )‪ (Temperature‬و ﻏﻴﺮﻩ را‬
‫ﻣﯽ ﺗﻮان ﺗﻌﺮﯾﻒ ﮐﺮد ﺑﻪ ﻣﺜﺎل زﯾﺮ ﮐﻪ در ﻣﻮرد ﺗﻌﺮﯾﻒ ‪ Time‬ﻣﯽ ﺑﺎﺷﺪ ﺗﻮﺟﻪ ﮐﻨﻴﺪ‪:‬‬

‫‪Type time is range -2147483647 to 2147483647‬‬


‫‪Units‬‬
‫‪Fs:‬‬ ‫‪--Primary Units‬‬
‫;‪Ps = 1000 fs‬‬ ‫‪--Secondary Units‬‬
‫;‪Ns = 1000 ps‬‬ ‫‪--Secondary Units‬‬
‫;‪Us = 1000 ns‬‬ ‫‪--Secondary Units‬‬
‫;‪Ms = 1000 us‬‬ ‫‪--Secondary Units‬‬
‫‪Sec = 1000 ms; --Secondary Units‬‬
‫;‪Min = 60 sec‬‬ ‫‪--Secondary Units‬‬
‫;‪Hr =60 min‬‬ ‫‪--Secondary Units‬‬
‫;‪End Units‬‬
‫ﺑﻪ ﻣﺜﺎل ﺣﻞ ﺷﺪﻩ زﯾﺮ ﮐﻪ در ﻣﻮرد دروس ﻗﺒﻞ و اﯾﻦ درس ﻣﯽ ﺑﺎﺷﺪ ﺗﻮﺟﻪ ﮐﻨﻴﺪ ‪:‬‬

‫ﻣﺜﺎل ‪ :‬ﻣﯽ ﺧﻮاهﻴﻢ ﺑﺮﻧﺎﻣﻪ اﯼ ﺑﻨﻮﯾﺴﻴﻢ ﮐﻪ ﺳﻪ ﺑﻴﺖ ‪ x,y,z‬را ﺑﻪ ﻋﻨﻮان ورودﯼ درﯾﺎﻓﺖ ﮐﺮدﻩ و ﺣﺎﺻﻞ ﺟﻤﻊ ﺁﻧﻬﺎ را‬
‫در ﺧﺮوﺟﯽ ‪ S‬و ‪ Carry‬ﺁن را در ﺧﺮوﺟﯽ ‪ C‬ﻗﺮار ﻣﯽ دهﺪ‪.‬‬
‫‪Entity Sum is‬‬
‫; ‪Port ( x , y , z : in Bit‬‬
‫;) ‪S , C : out Bit‬‬
‫;‪End entity‬‬

‫‪Architecture RTL of Sum is‬‬


‫; ‪Signal Sig : Bit‬‬
‫‪Begin‬‬
‫; ‪Sig<=x xor y‬‬
‫; ‪S <=Sig xor z‬‬
‫; )‪C <=(x and y) or (y and z) or (x and z‬‬
‫;‪End RTL‬‬

‫ﺗﻤﺮﯾﻦ ‪ :‬ﺑﺮﻧﺎﻣﻪ ﯾﮏ ‪ Full Adder‬را ﺑﻨﻮﯾﺴﻴﺪ ﻣﺜﻼ اﯾﻦ ﺑﺮﻧﺎﻣﻪ ﯼ ﺷﻤﺎ ﺑﺎﯾﺪ دو ورودﯼ از ﻧﻮع ‪ Bus‬ﭼﻬﺎر‬
‫ﺑﻴﺘﯽ داﺷﺘﻪ ﺑﺎﺷﺪ ﮐﻪ ﺣﺎﺻﻞ ﺟﻤﻊ ﺁﻧﻬﺎ را در ﯾﮏ ﺧﺮوﺟﯽ از ﻧﻮع ‪ Bus‬ﭼﻬﺎر ﺑﻴﺘﯽ ﻗﺮار ﻣﯽ دهﺪ‪.‬در‬
‫ﺿﻤﻦ ﻣﻘﺪار ‪ Carry‬ﻓﺮاﻣﻮش ﻧﺸﻮد‪.‬‬
‫ﺟﻮاب اﯾﻦ ﺳﻮال را در درس ﺑﻌﺪﯼ ﺧﻮاهﻢ ﺁورد‪.‬‬
‫اﮔﺮ ﺟﻮاب ﺳﻮال را ﻧﺘﻮاﻧﺴﺘﻴﺪ ﺑﻨﻮﯾﺴﻴﺪ هﻴﭻ ﻣﻬﻢ ﻧﻴﺴﺖ ﻣﻬﻢ اﯾﻦ اﺳﺖ ﮐﻪ در ﻣﻮرد راﻩ ﺣﻞ ﺁن ﻓﮑﺮ‬
‫ﮐﻨﻴﺪ ﻓﻘﻂ هﻤﻴﻦ ! ﺗﺎ درس ﺁﯾﻨﺪﻩ ﺣﻖ ﯾﺎرﺗﺎن ﺑﺎد ‪.‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ ﺳﻮم (‬


( ‫) ﻗﺴﻤﺖ ﭼﻬﺎرم‬

‫ ﻛﻪ در درس ﻗﺒﻠﻲ ﺑﻪ ﻋﻨﻮان ﺗﻤﺮﻳﻦ ﻣﻄﺮح ﺷﺪ و آﺷﻨﺎﻳﻲ ﺑﺎ ﭼﻨﺪ‬VHDL ‫ﺗﺤﻠﻴﻞ ﻳﻚ ﺑﺮﻧﺎﻣﻪ‬


:‫دﺳﺘﻮر دﻳﮕﺮ‬

: ‫ ﭼﻬﺎر ﺑﻴﺘﯽ‬Full Adder ‫ﺑﺮﻧﺎﻣﻪ ﯾﮏ‬

library IEEE ;
use IEEE.STD_LOGIC_1164.all ;
entity Adder is
port(
I1 : in STD_LOGIC_VECTOR(3 downto 0) ;
I2 : in STD_LOGIC_VECTOR(3 downto 0) ;
Carry : out STD_LOGIC;
Sum : out STD_LOGIC_VECTOR(3 downto 0)
);
end Adder;
architecture FullAdder of Adder is
signal c1,c2,c3:std_logic ;
begin
c1<=i1(0) and i2(0) ;
sum(0)<=i1(0) xor i2(0) ;
c2<=(i1(1)and i2(1)) or (i1(1)and c1) or (i2(1)and c1) ;
sum(1)<=i1(1) xor i2(1) xor c1 ;
c3<=(i1(2)and i2(2)) or (i1(2)and c2) or (i2(2)and c2) ;
sum(2)<=i1(2) xor i2(2) xor c2 ;
carry<=(i1(3)and i2(3)) or (i1(3)and c3) or (i2(3)and c3) ;
sum(3)<=i1(3) xor i2(3) xor c3 ;
end FullAdder ;

( ‫ ) ﻗﺴﻤﺖ ﭼﻬﺎرم‬VHDL ‫آﻣﻮزش‬


‫ﻧﮑﺘﻪ اﯼ درﻣﻮرد ﻧﻮع دادﻩ ﯼ ‪: STD_LOGIC‬‬

‫ﺷﻤﺎ ﻣﯽ ﺗﻮاﻧﻴﺪ ﺑﻪ ﺟﺎﯼ ﻧﻮع دادﻩ ﯼ ‪ Bit‬از ﺁن اﺳﺘﻔﺎدﻩ ﮐﻨﻴﺪ زﯾﺮا ﻣﺰاﯾﺎﯾﯽ دارد ﮐﻪ در ﻃﻮل دروس ﺑﻌﺪﯼ‬
‫ﻣﺘﻮﺟﻪ ﺁﻧﻬﺎ ﺧﻮاهﻴﺪ ﺷﺪ ﭘﺲ از اﯾﻦ ﺑﻪ ﺑﻌﺪ هﻤﻴﺸﻪ ﺑﻪ ﺟﺎﯼ ‪ Bit‬از ‪ STD_LOGIC‬اﺳﺘﻔﺎدﻩ ﺧﻮاهﻴﻢ ﮐﺮد‪.‬‬
‫در ﺑﺮﻧﺎﻣﻪ ﻓﻮق دو ورودﯼ دارﯾﻢ از ﻧﻮع ‪ Bus‬و ﯾﮏ ﺧﺮوﺟﯽ از ﻧﻮع ‪ Wire‬و ﯾﮏ ﺧﺮوﺟﯽ از ﻧﻮع ‪.Bus‬‬
‫ﺷﮑﻞ زﯾﺮ ﺣﺎﺻﻞ ﺗﺴﺖ ﺑﺮﻧﺎﻣﻪ ﺟﻤﻊ ﮐﻨﻨﺪﻩ ﻓﻮق در ‪ Wave Form‬ﻧﺮم اﻓﺰار ‪ Active VHDL‬اﺳﺖ‪:‬‬

‫ﻣﯽ داﻧﻴﺪ ﮐﻪ ﺣﺎﺻﻞ ﺟﻤﻊ دو ﺑﻴﺖ را ﻣﯽ ﺗﻮاﻧﻴﻢ ﺗﻮﺳﻂ ‪ XOR‬ﺑﺪﺳﺖ ﺁورﯾﻢ و ﻣﻘﺪار ‪ Carry‬هـﻢ ﺑـﺎ ‪ And‬ﮐـﺮدن دو ﺑﻴـﺖ‬
‫ﺑﺪﺳﺖ ﻣﯽ ﺁﯾﺪ اﮔﺮ دوﺳﺖ دارﯾﺪ ﺑﺎ اﯾﻦ ﻣﺴﺌﻠﻪ در ﮔﻴﺮ ﺷﻮﯾﺪ ﺑﺮﻧﺎﻣﻪ ‪ Full Adder‬هﺸﺖ ﺑﻴﺘـﯽ را ﺑﻨﻮﯾﺴـﻴﺪ‪.‬ﻓﮑـﺮ ﻧﻤـﯽ‬
‫ﮐﻨﻢ ﺑﺎ ﺧﻮاﻧﺪن ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ ﭼﻴﺰﯼ دﺳـﺘﮕﻴﺮﺗﺎن ﺷـﻮد ﻓﻘـﻂ ﺑﺎﯾـﺪ ﺧﻮدﺗـﺎن زﺣﻤـﺖ ﺑﮑﺸـﻴﺪ‪.‬اﻟﺒﺘـﻪ ﺑﺮﻧﺎﻣـﻪ ﻓـﻮق ﯾـﮏ ﺑﺮﻧﺎﻣـﻪ‬
‫‪ Structural‬اﺳﺖ و ﺑﻪ ﺳﺎدﻩ ﺗﺮﯾﻦ روش ﻧﻮﺷﺘﻪ ﺷﺪﻩ اﺳﺖ‪.‬‬
‫اﯾﻦ درس هﻤﻴﻦ ﺟﺎ ﺗﻤﺎم ﺷﺪ و ﻗﺴﻤﺖ اﻋﻈﻢ ﮐﺎر ﺑﺎ ﺷﻤﺎﺳﺖ ﯾﻌﻨﯽ ﺑﺮﻧﺎﻣﻪ ﯼ ﻓﻮق را ﺧﻂ ﺑﻪ ﺧﻂ ﺗﺮﯾﺲ ﮐﻨﻴﺪ ﺗﺎ ﮐﺎﻣﻼ‬
‫ﻣﺘﻮﺟﻪ ﺷﻮﯾﺪ )اﻟﺒﺘﻪ دوﺳﺘﺎﻧﯽ ﮐﻪ ﺿﻌﻴﻔﻨﺪ(‬
‫ﻣﯽ ﺗﻮاﻧﻴﺪ ﺑﺮﻧﺎﻣﻪ ﺑﺎﻻ رو راﺣﺖ ﮐﭙﯽ ﮐﻨﻴﺪ در ﻧﺮم اﻓﺰار ‪ Active VHDL‬ﺳﭙﺲ ﮐﺎﻣﭙﺎﯾـﻞ ﮐـﺮدﻩ و ﺑـﻪ ﺷـﮑﻞ ‪ Wave‬ﮐـﻪ در‬
‫ﺑﺎﻻ ﺁوردم ﺑﺮﺳﻴﺪ ‪.‬ﺑﻪ ﻣﺘﻐﻴﺮهﺎ هﻤﻮﻧﻄﻮر ﮐﻪ ﻣﻦ ﻋﺪد دادم ﻋﺪد ﺑﺪﯾﻦ و اوﻧﻮ اﺟﺮا ﮐﻨﻴﺪ‪.‬‬
‫اﮔﺮ ﺑﺎ اﯾﻦ ﻧﺮم اﻓﺰار ﺁﺷﻨﺎ ﻧﻴﺴﺘﻴﺪ اﻻن ﻓﺮﺻﺖ ﺧﻮﺑﻴﻪ ﺑﺮاﯼ ﺁﺷﻨﺎﯾﯽ !‬
‫ﺑﺪرود‬

‫‪www.esud83.mihanblog.com‬‬

‫ﻧﮕﺎرﻧﺪﻩ ‪ :‬ﻓﺮﺷﻴﺪ ﺳﻔﻴﺪﮔﺮان‬


‫ﮐﺎرﺷﻨﺎﺳﯽ ﮐﺎﻣﭙﻴﻮﺗﺮ ﺳﺨﺖ اﻓﺰار‬
‫ﺧﺮداد ‪١٣٨٢‬‬
‫‪Sefidgaran@gmail.com‬‬
‫‪http://Sefidgaran.blogfa.com‬‬

‫آﻣﻮزش ‪ ) VHDL‬ﻗﺴﻤﺖ ﭼﻬﺎرم (‬

You might also like