VHDL硬件描述語言教學(xué)課件_第1頁
VHDL硬件描述語言教學(xué)課件_第2頁
VHDL硬件描述語言教學(xué)課件_第3頁
VHDL硬件描述語言教學(xué)課件_第4頁
VHDL硬件描述語言教學(xué)課件_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

VHDL硬件描述語言教學(xué)課件本課件旨在幫助你學(xué)習(xí)VHDL硬件描述語言,從基礎(chǔ)知識到實(shí)際應(yīng)用,逐步深入講解,并通過實(shí)例代碼和仿真結(jié)果演示,讓你更直觀地掌握VHDL的應(yīng)用技巧。課程介紹:VHDL概述什么是VHDLVHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage)是一種用于描述硬件電路結(jié)構(gòu)和行為的硬件描述語言,廣泛應(yīng)用于電子設(shè)計(jì)自動化(EDA)領(lǐng)域。VHDL的特點(diǎn)VHDL具有以下特點(diǎn):可讀性好,可維護(hù)性高,支持抽象化建模,可描述多種硬件結(jié)構(gòu),支持并行性和并發(fā)性,便于驗(yàn)證和調(diào)試。為什么學(xué)習(xí)VHDL?VHDL是現(xiàn)代電子系統(tǒng)設(shè)計(jì)中必不可少的工具,掌握VHDL可以讓你更有效地設(shè)計(jì)和實(shí)現(xiàn)復(fù)雜的硬件電路。VHDL廣泛應(yīng)用于數(shù)字電路設(shè)計(jì)、嵌入式系統(tǒng)設(shè)計(jì)、FPGA/CPLD開發(fā)等領(lǐng)域,學(xué)習(xí)VHDL可以讓你擁有更廣闊的職業(yè)發(fā)展前景。VHDL是硬件描述語言的標(biāo)準(zhǔn)之一,學(xué)習(xí)VHDL可以幫助你更容易地理解其他硬件描述語言,例如Verilog。VHDL的應(yīng)用領(lǐng)域數(shù)字電路設(shè)計(jì)VHDL可以用于設(shè)計(jì)各種數(shù)字電路,包括加法器、乘法器、存儲器、狀態(tài)機(jī)等。嵌入式系統(tǒng)設(shè)計(jì)VHDL可以用于設(shè)計(jì)嵌入式系統(tǒng)的硬件部分,例如控制器、接口電路、數(shù)據(jù)處理模塊等。FPGA/CPLD開發(fā)VHDL是FPGA/CPLD開發(fā)中最常用的硬件描述語言之一,可以用于實(shí)現(xiàn)復(fù)雜的數(shù)字邏輯功能。VHDL與其他硬件描述語言的比較VerilogVerilog是另一種常用的硬件描述語言,與VHDL相比,Verilog語法更簡潔,更接近硬件實(shí)現(xiàn),但VHDL更易讀、更易于維護(hù)。SystemCSystemC是一種基于C++的硬件描述語言,更適合系統(tǒng)級設(shè)計(jì),但VHDL更適合實(shí)現(xiàn)底層硬件邏輯。VHDL的基本概念:實(shí)體(Entity)實(shí)體是VHDL設(shè)計(jì)的基本單元,用于定義硬件模塊的接口,包括端口名稱、方向和數(shù)據(jù)類型。實(shí)體描述了硬件模塊的外部特性,但并不描述其內(nèi)部結(jié)構(gòu)或行為。結(jié)構(gòu)體(Architecture)結(jié)構(gòu)體用于描述實(shí)體的內(nèi)部實(shí)現(xiàn),包含硬件模塊的邏輯結(jié)構(gòu)、數(shù)據(jù)流、行為描述等。一個(gè)實(shí)體可以有多個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體對應(yīng)不同的實(shí)現(xiàn)方式。結(jié)構(gòu)體決定了硬件模塊的行為和功能。配置(Configuration)配置用于將實(shí)體與結(jié)構(gòu)體關(guān)聯(lián)起來,指定使用哪個(gè)結(jié)構(gòu)體來實(shí)現(xiàn)實(shí)體。配置可以用于選擇不同的結(jié)構(gòu)體來實(shí)現(xiàn)相同的實(shí)體,例如,可以選擇不同版本的結(jié)構(gòu)體來進(jìn)行仿真或綜合。庫(Library)庫是VHDL設(shè)計(jì)中用來存儲預(yù)定義組件、數(shù)據(jù)類型、函數(shù)和過程等元素的集合。庫可以包含多個(gè)包,每個(gè)包包含一組相關(guān)元素。庫可以幫助你方便地復(fù)用已有的設(shè)計(jì),提高開發(fā)效率。包(Package)包是VHDL設(shè)計(jì)中用來存儲數(shù)據(jù)類型、常量、函數(shù)和過程等元素的集合。包可以被其他設(shè)計(jì)單元引用,便于代碼復(fù)用和模塊化設(shè)計(jì)。包可以被定義在庫中,也可以獨(dú)立存在。VHDL的數(shù)據(jù)類型:標(biāo)準(zhǔn)邏輯類型標(biāo)準(zhǔn)邏輯類型(STD_LOGIC)是VHDL中最常用的數(shù)據(jù)類型之一,用于表示數(shù)字電路中的邏輯信號。標(biāo)準(zhǔn)邏輯類型包含多種邏輯值,例如'0','1','X','Z','U','L','H','W'等,分別代表不同的邏輯狀態(tài),例如高電平、低電平、未知、高阻抗等。整數(shù)類型整數(shù)類型用于表示整數(shù),例如10、-5、0等。整數(shù)類型可以用于表示地址、計(jì)數(shù)器、數(shù)據(jù)長度等。整數(shù)類型可以使用范圍來定義,例如integerrange0to100表示范圍為0到100的整數(shù)類型。實(shí)數(shù)類型實(shí)數(shù)類型用于表示帶有小數(shù)點(diǎn)的數(shù)字,例如3.14、-2.5等。實(shí)數(shù)類型可以用于表示模擬電路中的電壓、電流、頻率等。實(shí)數(shù)類型可以使用精度來定義,例如realrange-10.0to10.0表示范圍為-10.0到10.0的實(shí)數(shù)類型,精度為1。位矢量類型位矢量類型用于表示由多個(gè)位組成的信號,例如8位的地址信號、16位的數(shù)據(jù)信號等。位矢量類型的每個(gè)位可以是'0'或'1'。位矢量類型可以使用范圍來定義,例如bit_vector(7downto0)表示8位的位矢量類型,索引范圍從7到0。字符串類型字符串類型用于表示由字符組成的序列,例如"hello"、"world"等。字符串類型可以使用雙引號來定義,例如string:="Hello,world!"表示將字符串"Hello,world!"賦值給字符串類型的變量。用戶自定義類型用戶自定義類型允許你定義自己的數(shù)據(jù)類型,以滿足特定設(shè)計(jì)需求。用戶自定義類型可以是枚舉類型、子類型、記錄類型等。自定義類型可以使代碼更易讀、更易維護(hù),并提高代碼可復(fù)用性。VHDL的運(yùn)算符:邏輯運(yùn)算符與運(yùn)算符(AND)邏輯與運(yùn)算符用于將兩個(gè)邏輯值進(jìn)行與運(yùn)算,當(dāng)兩個(gè)操作數(shù)都為'1'時(shí),結(jié)果為'1',否則結(jié)果為'0'。例如,'1'AND'0'的結(jié)果為'0'?;蜻\(yùn)算符(OR)邏輯或運(yùn)算符用于將兩個(gè)邏輯值進(jìn)行或運(yùn)算,當(dāng)兩個(gè)操作數(shù)中至少有一個(gè)為'1'時(shí),結(jié)果為'1',否則結(jié)果為'0'。例如,'1'OR'0'的結(jié)果為'1'。異或運(yùn)算符(XOR)邏輯異或運(yùn)算符用于將兩個(gè)邏輯值進(jìn)行異或運(yùn)算,當(dāng)兩個(gè)操作數(shù)的值不同時(shí),結(jié)果為'1',否則結(jié)果為'0'。例如,'1'XOR'0'的結(jié)果為'1'。非運(yùn)算符(NOT)邏輯非運(yùn)算符用于對一個(gè)邏輯值進(jìn)行取反運(yùn)算,將'1'變?yōu)?0',將'0'變?yōu)?1'。例如,NOT'1'的結(jié)果為'0'。算術(shù)運(yùn)算符加法運(yùn)算符(+)加法運(yùn)算符用于將兩個(gè)數(shù)值進(jìn)行加法運(yùn)算,例如2+3的結(jié)果為5。減法運(yùn)算符(-)減法運(yùn)算符用于將兩個(gè)數(shù)值進(jìn)行減法運(yùn)算,例如5-2的結(jié)果為3。乘法運(yùn)算符(*)乘法運(yùn)算符用于將兩個(gè)數(shù)值進(jìn)行乘法運(yùn)算,例如2*3的結(jié)果為6。除法運(yùn)算符(/)除法運(yùn)算符用于將兩個(gè)數(shù)值進(jìn)行除法運(yùn)算,例如6/2的結(jié)果為3。關(guān)系運(yùn)算符等于運(yùn)算符(=)等于運(yùn)算符用于判斷兩個(gè)操作數(shù)是否相等,如果相等則結(jié)果為TRUE,否則結(jié)果為FALSE。例如,2=2的結(jié)果為TRUE。不等于運(yùn)算符(/=)不等于運(yùn)算符用于判斷兩個(gè)操作數(shù)是否不相等,如果不相等則結(jié)果為TRUE,否則結(jié)果為FALSE。例如,2/=3的結(jié)果為TRUE。大于運(yùn)算符(>)大于運(yùn)算符用于判斷第一個(gè)操作數(shù)是否大于第二個(gè)操作數(shù),如果大于則結(jié)果為TRUE,否則結(jié)果為FALSE。例如,3>2的結(jié)果為TRUE。小于運(yùn)算符(<)小于運(yùn)算符用于判斷第一個(gè)操作數(shù)是否小于第二個(gè)操作數(shù),如果小于則結(jié)果為TRUE,否則結(jié)果為FALSE。例如,2<3的結(jié)果為TRUE。移位運(yùn)算符左移運(yùn)算符(<<)左移運(yùn)算符用于將操作數(shù)的各位向左移動指定的位數(shù),空出的位用'0'填充。例如,"1010"<<2的結(jié)果為"101000"。右移運(yùn)算符(>>)右移運(yùn)算符用于將操作數(shù)的各位向右移動指定的位數(shù),空出的位用'0'填充。例如,"1010">>2的結(jié)果為"10"。連接運(yùn)算符連接運(yùn)算符用于將兩個(gè)或多個(gè)操作數(shù)連接起來,形成一個(gè)新的操作數(shù)。例如,"1010"&"0101"的結(jié)果為"10100101"。連接運(yùn)算符可以用于將多個(gè)位矢量連接起來,形成一個(gè)更長的位矢量。VHDL的語句:并行語句與順序語句VHDL語句分為并行語句和順序語句兩種類型。并行語句用于描述硬件電路中同時(shí)執(zhí)行的邏輯,順序語句用于描述硬件電路中按順序執(zhí)行的邏輯。并行語句通常用于描述組合邏輯電路,順序語句通常用于描述時(shí)序邏輯電路。賦值語句賦值語句用于將一個(gè)值賦給一個(gè)信號或變量。信號賦值語句用于描述硬件電路中信號的變化,變量賦值語句用于描述硬件電路中存儲數(shù)據(jù)的變化。賦值語句可以是并行賦值語句,也可以是順序賦值語句。條件語句(IF-THEN-ELSE)條件語句用于根據(jù)條件判斷執(zhí)行不同的邏輯。條件語句的語法為IF條件THEN語句ELSE語句ENDIF。條件語句可以用于實(shí)現(xiàn)選擇器、比較器、控制邏輯等。循環(huán)語句(FOR,WHILE)循環(huán)語句用于重復(fù)執(zhí)行一段代碼。FOR循環(huán)用于執(zhí)行一定次數(shù)的循環(huán),WHILE循環(huán)用于執(zhí)行滿足特定條件的循環(huán)。循環(huán)語句可以用于實(shí)現(xiàn)計(jì)數(shù)器、數(shù)據(jù)處理等。CASE語句CASE語句用于根據(jù)表達(dá)式的值執(zhí)行不同的邏輯。CASE語句的語法為CASE表達(dá)式ISWHEN值THEN語句WHEN值THEN語句ENDCASE。CASE語句可以用于實(shí)現(xiàn)譯碼器、多路選擇器等。進(jìn)程(Process)進(jìn)程用于描述時(shí)序邏輯電路的行為,它是一段包含順序語句的代碼塊,在特定事件或敏感信號發(fā)生變化時(shí)被觸發(fā)執(zhí)行。進(jìn)程可以用于實(shí)現(xiàn)觸發(fā)器、計(jì)數(shù)器、狀態(tài)機(jī)等。子程序(Function,Procedure)子程序用于封裝一段代碼,方便代碼復(fù)用和模塊化設(shè)計(jì)。函數(shù)用于計(jì)算并返回一個(gè)值,過程用于執(zhí)行一組語句。子程序可以提高代碼可讀性和可維護(hù)性,并減少代碼冗余。VHDL的建模方式:行為級建模行為級建模描述硬件模塊的行為,而不關(guān)注具體的硬件實(shí)現(xiàn)細(xì)節(jié)。行為級建模使用VHDL語句描述硬件模塊的功能和邏輯關(guān)系,例如使用賦值語句、條件語句、循環(huán)語句等。數(shù)據(jù)流級建模數(shù)據(jù)流級建模描述硬件模塊的數(shù)據(jù)流,通過描述信號之間的傳遞關(guān)系來實(shí)現(xiàn)硬件功能。數(shù)據(jù)流級建模使用VHDL的并行賦值語句來描述數(shù)據(jù)流,例如使用信號賦值語句、連接運(yùn)算符等。結(jié)構(gòu)級建模結(jié)構(gòu)級建模描述硬件模塊的內(nèi)部結(jié)構(gòu),將硬件模塊分解成更小的子模塊,并通過連接這些子模塊來實(shí)現(xiàn)整體功能。結(jié)構(gòu)級建模使用VHDL的實(shí)例化語句來連接子模塊,例如使用組件實(shí)例化語句?;旌辖;旌辖T试S你將行為級建模、數(shù)據(jù)流級建模和結(jié)構(gòu)級建模混合使用,以實(shí)現(xiàn)更靈活、更復(fù)雜的硬件設(shè)計(jì)。混合建??梢蕴岣叽a可讀性、可維護(hù)性和復(fù)用性,并優(yōu)化硬件性能。VHDL的仿真流程:編譯編譯是VHDL設(shè)計(jì)流程中的第一步,將VHDL代碼轉(zhuǎn)換為可執(zhí)行的中間代碼。編譯器檢查代碼語法錯(cuò)誤、數(shù)據(jù)類型錯(cuò)誤、信號連接錯(cuò)誤等,并生成可供綜合和仿真的中間代碼。綜合綜合是VHDL設(shè)計(jì)流程中的第二步,將編譯后的中間代碼轉(zhuǎn)換為具體的硬件電路結(jié)構(gòu)。綜合器根據(jù)VHDL代碼和目標(biāo)硬件平臺的特點(diǎn),生成相應(yīng)的硬件電路網(wǎng)表。仿真仿真是在硬件電路實(shí)現(xiàn)之前進(jìn)行的驗(yàn)證過程,用于檢查設(shè)計(jì)是否滿足預(yù)期功能。仿真器根據(jù)VHDL代碼和測試激勵(lì),模擬硬件電路的運(yùn)行,并輸出仿真結(jié)果,幫助你檢查設(shè)計(jì)邏輯和性能。實(shí)現(xiàn)實(shí)現(xiàn)是將綜合后的硬件電路網(wǎng)表轉(zhuǎn)換為實(shí)際可用的物理電路。實(shí)現(xiàn)過程包括布局布線、時(shí)序優(yōu)化、功耗優(yōu)化等。實(shí)現(xiàn)完成后,可以將電路加載到FPGA/CPLD等硬件平臺上進(jìn)行測試。常見錯(cuò)誤與調(diào)試技巧常見的錯(cuò)誤類型:語法錯(cuò)誤、數(shù)據(jù)類型錯(cuò)誤、信號連接錯(cuò)誤、邏輯錯(cuò)誤等。調(diào)試技巧:使用仿真器進(jìn)行代碼調(diào)試,添加斷點(diǎn),查看信號波形,使用打印語句輸出調(diào)試信息,使用工具分析錯(cuò)誤信息等。組合邏輯電路設(shè)計(jì):加法器設(shè)計(jì)思路加法器用于實(shí)現(xiàn)兩個(gè)數(shù)字的加法運(yùn)算??梢允褂萌悠鲗?shí)現(xiàn)多位的加法器,每個(gè)全加器負(fù)責(zé)計(jì)算一位的加法,并產(chǎn)生進(jìn)位輸出。代碼實(shí)現(xiàn)libraryieee;useieee.std_logic_1164.all;entityadderisport(a,b:instd_logic_vector(3downto0);cin:instd_logic;sum:outstd_logic_vector(3downto0);cout:outstd_logic);endentity;architecturebehavioralofadderisbeginprocess(a,b,cin)beginsum<=a+b+cin;cout<=a(3)andb(3)ora(3)andcinorb(3)andcin;endprocess;endarchitecture;乘法器設(shè)計(jì)思路乘法器用于實(shí)現(xiàn)兩個(gè)數(shù)字的乘法運(yùn)算??梢允褂靡莆幌嗉拥姆绞綄?shí)現(xiàn)乘法運(yùn)算,將被乘數(shù)依次左移,并根據(jù)乘數(shù)的各位進(jìn)行加法運(yùn)算,最終得到乘積。代碼實(shí)現(xiàn)libraryieee;useieee.std_logic_1164.all;entitymultiplierisport(a,b:instd_logic_vector(3downto0);product:outstd_logic_vector(7downto0));endentity;architecturebehavioralofmultiplierisbeginprocess(a,b)beginproduct<=std_logic_vector(unsigned(a)*unsigned(b));endprocess;endarchitecture;譯碼器設(shè)計(jì)思路譯碼器用于將二進(jìn)制編碼轉(zhuǎn)換為十進(jìn)制輸出。每個(gè)譯碼器對應(yīng)一個(gè)特定的編碼,輸出對應(yīng)該編碼的十進(jìn)制表示。代碼實(shí)現(xiàn)libraryieee;useieee.std_logic_1164.all;entitydecoderisport(in_code:instd_logic_vector(2downto0);out_code:outstd_logic_vector(7downto0));endentity;architecturebehavioralofdecoderisbeginprocess(in_code)begincasein_codeiswhen"000"=>out_code<="00000001";when"001"=>out_code<="00000010";when"010"=>out_code<="00000100";when"011"=>out_code<="00001000";when"100"=>out_code<="00010000";when"101"=>out_code<="00100000";when"110"=>out_code<="01000000";when"111"=>out_code<="10000000";whenothers=>out_code<="00000000";endcase;endprocess;endarchitecture;編碼器設(shè)計(jì)思路編碼器用于將十進(jìn)制輸入轉(zhuǎn)換為二進(jìn)制編碼。每個(gè)編碼器對應(yīng)一個(gè)特定的十進(jìn)制輸入,輸出對應(yīng)該輸入的二進(jìn)制編碼。代碼實(shí)現(xiàn)libraryieee;useieee.std_logic_1164.all;entityencoderisport(in_data:instd_logic_vector(7downto0);out_code:outstd_logic_vector(2downto0));endentity;architecturebehavioralofencoderisbeginprocess(in_data)beginifin_data="00000001"thenout_code<="000";elsifin_data="00000010"thenout_code<="001";elsifin_data="00000100"thenout_code<="010";elsifin_data="00001000"thenout_code<="011";elsifin_data="00010000"thenout_code<="100";elsifin_data="00100000"thenout_code<="101";elsifin_data="01000000"thenout_code<="110";elsifin_data="10000000"thenout_code<="111";elseout_code<="XXX";endif;endprocess;endarchitecture;數(shù)據(jù)選擇器設(shè)計(jì)思路數(shù)據(jù)選擇器用于根據(jù)選擇信號選擇不同的數(shù)據(jù)輸入。數(shù)據(jù)選擇器可以實(shí)現(xiàn)多路選擇功能,根據(jù)選擇信號的不同,輸出不同的數(shù)據(jù)輸入。代碼實(shí)現(xiàn)libraryieee;useieee.std_logic_1164.all;entitymuxisport(in_data0,in_data1:instd_logic_vector(3downto0);sel:instd_logic;out_data:outstd_logic_vector(3downto0));endentity;architecturebehavioralofmuxisbeginprocess(sel,in_data0,in_data1)beginifsel='0'thenout_data<=in_data0;elseout_data<=in_data1;endif;endprocess;endarchitecture;時(shí)序邏輯電路設(shè)計(jì):觸發(fā)器設(shè)計(jì)思路觸發(fā)器用于存儲一個(gè)比特的邏輯狀態(tài)。觸發(fā)器可以根據(jù)時(shí)鐘信號和控制信號的變化來改變其存儲的邏輯狀態(tài)。常用的觸發(fā)器類型包括D觸發(fā)器、JK觸發(fā)器、T觸發(fā)器等。代碼實(shí)現(xiàn)libraryieee;useieee.std_logic_1164.all;entityd_flipflopisport(clk:instd_logic;d:instd_logic;q:outstd_logic);endentity;architecturebehavioralofd_flipflopisbeginprocess(clk,d)beginifrising_edge(clk)thenq<=d;endif;endprocess;endarchitecture;寄存器設(shè)計(jì)思路寄存器用于存儲多個(gè)比特的邏輯狀態(tài)。寄存器可以看作多個(gè)觸發(fā)器的組合,每個(gè)觸發(fā)器存儲一個(gè)比特的信息。寄存器可以用于存儲數(shù)據(jù)、狀態(tài)等信息。代碼實(shí)現(xiàn)libraryieee;useieee.std_logic_1164.all;entityregisterisport(clk:instd_logic;data:instd_logic_vector(7downto0);q:outstd_logic_vector(7downto0));endentity;architecturebehavioralofregisterisbeginprocess(clk)beginifrising_edge(clk)thenq<=data;endif;endprocess;endarchitecture;計(jì)數(shù)器設(shè)計(jì)思路計(jì)數(shù)器用于記錄事件發(fā)生的次數(shù)。計(jì)數(shù)器可以使用觸發(fā)器或其他計(jì)數(shù)邏輯實(shí)現(xiàn),每個(gè)計(jì)數(shù)周期都會改變計(jì)數(shù)器的狀態(tài),并輸出當(dāng)前計(jì)數(shù)的值。代碼實(shí)現(xiàn)libraryieee;useieee.std_logic_1164.all;entitycounterisport(clk:instd_logic;rst:instd_logic;count:outstd_logic_vector(3downto0));endentity;architecturebehavioralofcounterisbeginprocess(clk,rst)beginifrst='1'thencount<="0000";elsifrising_edge(clk)thencount<=count+"0001";endif;endprocess;endarchitecture;狀態(tài)機(jī)設(shè)計(jì)思路狀態(tài)機(jī)用于控制系統(tǒng)的行為。狀態(tài)機(jī)根據(jù)當(dāng)前狀態(tài)和輸入信號,決定下一狀態(tài)和輸出信號。狀態(tài)機(jī)可以使用觸發(fā)器和組合邏輯實(shí)現(xiàn),可以根據(jù)狀態(tài)機(jī)的大小和復(fù)雜度選擇合適的實(shí)現(xiàn)方式。代碼實(shí)現(xiàn)libraryieee;useieee.std_logic_1164.all;entitystate_machineisport(clk:instd_logic;rst:instd_logic;in_data:instd_logic;out_data:outstd_logic);endentity;architecturebehavioralofstate_machineistypestate_typeis(state0,state1,state2);signalcurrent_state:state_type;beginprocess(clk,rst)beginifrst='1'thencurrent_state<=state0;elsifrising_edge(clk)thencasecurrent_stateiswhenstate0=>ifin_data='1'thencurrent_state<=state1;endif;whenstate1=>current_state<=state2;whenstate2=>current_state<=state0;endcase;endif;endprocess;process(current_state)begincasecurrent_stateiswhenstate0=>out_data<='0';whenstate1=>out_data<='1';whenstate2=>out_data<='0';endcase;endprocess;endarchitecture;存儲器設(shè)計(jì)思路存儲器用于存儲大量數(shù)據(jù)。存儲器可以使用觸發(fā)器或其他存儲邏輯實(shí)現(xiàn),可以根據(jù)存儲器的大小和訪問方式選擇合適的實(shí)現(xiàn)方式。代碼實(shí)現(xiàn)libraryieee;useieee.std_logic_1164.all;entitymemoryisport(clk:instd_logic;we:instd_logic;addr:instd_logic_vector(7downto0);data_in:instd_logic_vector(7downto0);data_out:outstd_logic_vector(7downto0));endentity;architecturebehavioralofmemoryissignalmemory_data:std_logic_vector(7downto0):=(others=>'0');beginprocess(clk,we,addr,data_in)beginifrising_edge(clk)thenifwe='1'thenmemory_data(conv_integer(addr))<=data_in;endif;data_out<=memory_data(conv_integer(addr));endif;endprocess;endarchitecture;狀態(tài)機(jī)設(shè)計(jì)方法:Mealy狀態(tài)機(jī)Mealy狀態(tài)機(jī)是一種輸出取決于當(dāng)前狀態(tài)和輸入信號的狀態(tài)機(jī)。Mealy狀態(tài)機(jī)的輸出信號與當(dāng)前狀態(tài)和輸入信號都相關(guān),在每個(gè)時(shí)鐘周期都可能發(fā)生變化。Moore狀態(tài)機(jī)Moore狀態(tài)機(jī)是一種輸出只取決于當(dāng)前狀態(tài)的狀態(tài)機(jī)。Moore狀態(tài)機(jī)的輸出信號只與當(dāng)前狀態(tài)相關(guān),在時(shí)鐘邊沿發(fā)生變化。Moore狀態(tài)機(jī)比Mealy狀態(tài)機(jī)更容易設(shè)計(jì)和驗(yàn)證,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論