




已閱讀5頁,還剩303頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
VHDL與數字電路設計 主講 崔剛北京工業大學電控學院電工電子中心2005年9月1 目錄 概述第一章VHDL的程序結構和軟件操作第二章數據類型與數據對象的定義第三章并行賦值語句第四章順序賦值語句第五章組合邏輯電路的設計第六章時序邏輯電路的設計第七章子程序 庫和程序包第八章CPLD和FPGA的結構與工作原理第九章數字鐘電路的設計 本節主要內容 傳統數字電路設計方法EDA設計方法PLD器件PLD器件設計流程文本設計輸入 VHDL程序設計 數字電子技術的基本知識回顧 組合邏輯電路編碼器 譯碼器 數據選擇器 加法器 數值比較器等時序邏輯電路同步時序邏輯電路異步時序邏輯電路寄存器 移位寄存器 計數器 序列信號發生器 一 傳統設計方法 1 首先確定可用的元器件 2 根據這些器件進行邏輯設計 完成各模塊 3 將各模塊進行連接 最后形成系統 4 而后經調試 測量觀察整個系統是否達到規定的性能指標 傳統的設計方法是基于中小規模集成電路器件進行設計 如74系列及其改進系列 CC4000系列 74HC系列等都屬于通用型數字集成電路 而且是采用自底向上進行設計 EDA ElectronicsDesignAutomation 即電子設計自動化技術 是利用計算機工作平臺 從事電子系統和電路設計的一項技術 EDA技術為電子系統設計帶來了這樣的變化 1 設計效率提高 設計周期縮短 2 設計質量提高 3 設計成本降低 4 能更充分地發揮設計人員的創造性 5 設計成果的重用性大大提高 省去了不必要的重復勞動 二 EDA設計方法 自頂向下的設計方法 數字電路的EDA設計是基于PLD進行設計的 支持自頂向下的設計方法 1 首先從系統設計入手 在頂層進行功能劃分和結構設計 2 然后再逐級設計底層的結構 3 并在系統級采用仿真手段驗證設計的正確性 4 最后完成整個系統的設計 實現從設計 仿真 測試一體化 傳統設計方法vsEDA設計方法 三 PLD器件 一 出現的背景 如果能把所設計的數字系統做成一片大規模集成電路 則不僅能減小電路的體積 重量 功耗 而且會使電路的可靠性大為提高 為某種專門用途而設計的集成電路叫做專用集成電路 即所謂的ASIC ApplicationSpecificIntegratedCircuit的縮寫 在用量不大的情況下 設計和制造這樣的專用集成電路成本很高 而且設計 制造的周期也較長 可編程邏輯器件的研制成功為解決上述問題提供了比較理想的途徑 二 PLD概述 PLD是可編程邏輯器件 ProgrammableLogicDevice 的英文縮寫 可編程邏輯器件是一種數字集成電路的半成品 在其芯片上按一定排列方式集成了大量的邏輯門和觸發器等基本邏輯元件 通過編程可以設置其邏輯功能 PLD編程 利用開發工具對PLD進行加工 即按設計要求將這些片內的元件連接起來 使之完成某個邏輯電路或系統的功能 成為一個專用集成電路 ASIC ApplicationSpecificIntegratedCircuit PLD開發系統 PLD開發系統包括硬件和軟件兩部分 硬件部分 計算機 下載電纜或編程器 軟件部分 集成開發系統 Altera公司 Maxplus Quartus Xilinx公司 Foundation ISELattice公司 SynarioSystem ispEXPERTSystem 四 PLD設計流程 設計準備 設計輸入 設計處理 器件編程 功能仿真 時序仿真 器件測試 PLD設計準備 在設計之前 首先要進行方案論證和器件選擇等設計準備工作 設計者首先要根據任務要求 判斷系統的可行性 系統的可行性要受到邏輯要求合理性 成本 開發條件 器件供應等方面的約束 若系統可行 則根據系統所完成的功能及復雜程度 對器件本身的資源和成本 工作速度及連線的可布性等方面進行權衡 選擇合適的設計方案和合適的器件類型 設計輸入 將所設計的電路的邏輯功能按照開發系統要求的形式表達出來的過程稱為設計輸入 通常 設計輸入有如下三種方式 1 原理圖輸入方式適用于對系統及各部分電路很熟悉的場合 2 硬件描述語言輸入方式硬件描述語言是用文本方式描述設計 硬件描述語言有ABEL AHDL VHDL Verilog等 其中VHDL和Verilog已成為IEEE標準 3 波形輸入方式 設計處理 邏輯優化把邏輯描述轉變為最適合在器件中實現的形式 優化使設計所占用的資源最少 邏輯綜合根據設計描述 對給定的硬件結構組件 最終獲得門級電路甚至更底層的電路描述文件 即將多個模塊化設計文件合并為一個網表文件 適配確定優化后的邏輯能否與器件中的宏單元和I O單元適配 分割將大的設計分割為多個便于器件內部資源實現的邏輯小塊的形式 設計校驗 設計校驗過程包括功能仿真和時序仿真 功能仿真時序仿真 器件編程 器件編程就是將開發系統生成的目標文件下載到可編程邏輯器件中 來定義內部模塊的邏輯功能以及它們的相互連接關系 兩種編程方式 編程器下載電纜 PLD開發系統 PLD開發系統包括硬件和軟件兩部分 硬件部分 計算機 下載電纜或編程器 軟件部分 集成開發系統 Altera公司 Maxplus Quartus Xilinx公司 Foundation ISELattice公司 SynarioSystem ispEXPERTSystem 設計舉例 設計內容 十進制計數器電路設計 PLD器件 ACEX1K系列的EP1K30QC208 開發系統 MAX plus 系統 編程方式 下載電纜 實驗下載板 11 05 48 設計過程 1 設計輸入VHDL演示12 邏輯驗證演示23 設計處理引腳設定演示34 器件編程連接下載電纜演示4 三 PLD電路設計的特點 1 設計簡單 方便 2 電路系統可以集成在一片芯片上 3 電路設計不依賴于器件進行設計 4 電路系統很容易完善和升級 器件選擇 1 電路系統所完成的功能及復雜程度 2 器件本身的資源和成本 性能參數 器件編程工藝等方面進行權衡 VHDL是非常高速集成電路硬件描述語言 VeryHighspeedIntegratedCircuitHardwareDescriptionLanguage 的英文縮寫 五 文本設計輸入 VHDL程序設計 語法和風格 1 類似與現代高級編程語言 如C語言 2 VHDL描述的是硬件 它包含許多硬件特有的結構 VHDL設計VS電路圖設計 VHDL與電路圖設計電路的方式不同 和電路圖設計方式相比 1 易于修改 2 設計能力更強 3 VHDL語言很方便 獨立于器件設計 相同的程序代碼可以用于不同廠家生產的器件 VHDL程序的基本結構 include stdio h include math h intmain void inta b c a 8 b 9 c a b returnc Librarystd Usestd standard all Entityand2isPort a b inbit c outbit Endand2 Architecturea1ofand2isBeginc aandb Enda1 VHDL程序 C程序 VHDL程序的基本結構 1 LIBRARY和PACHAGE聲明區 2 ENTITY定義區 3 ARCHITECTURE定義區 Library 庫 是用于存放預先編譯好的Package 程序包 Package 程序包 中定義了基本的常數 數據類型 元件及子程序等 作用 聲明在實體和結構體定義中將用到的數據類型 元件或子程序等 聲明格式 Library庫名 Use庫名 PACKAGE名 All 1 LIBRARY和PACKAGE聲明區 作用 ENTITY 實體 用于定義電路的外觀 即I O端口的類型和數量 定義格式 Entity實體名isPort a inbit b inbit c outbit End實體名 2 ENTITY定義區 端口名 數據類型 端口模式 端口模式 MODE 有以下幾種類型 IN OUT INOUT BUFFER端口模式可用下圖說明 黑框代表一個設計或模塊 INOUTBUFFERINOUT 2 ENTITY定義區 3 ARCHITECTURE定義區 實體的實現 即說明電路執行什么動作或實現功能 定義格式 Architecture結構體名of實體名is 聲明語句 內部信號 變量 常數 元件 子程序聲明 Begin并行描述語句 End結構體名 二輸入與門電路設計范例 電路真值表 二輸入與門電路設計范例 Librarystd Usestd standard all Entityand2isPort a inbit b inbit c outbit Endand2 實體定義結束 雙減號 為VHDL程序的注釋符 類似C語言中的 注釋符 二輸入與門電路設計范例 ArchitectureNaofand2isBeginc 0 whena 0 andb 0 else 0 whena 1 andb 0 else 0 whena 0 andb 1 else 1 符號 為信號直接賦值符 EndNa 結構體NaArchitectureNbofand2isBeginc aandb and為邏輯與操作EndNb 結構體Nb 第一章VHDL的程序結構和軟件操作 1 1VHDL程序的基本結構1 2Max plus 的操作 1 1VHDL程序的基本結構 include stdio h include math h intmain void inta b c a 8 b 9 c a b returnc Librarystd Usestd standard all Entityand2isPort a b inbit c outbit Endand2 Architecturea1ofand2isBeginc aandb Enda1 VHDL程序 C程序 1 1VHDL程序的基本結構 1 LIBRARY和PACHAGE聲明區 2 ENTITY定義區 3 ARCHITECTURE定義區 4 CONFIGURATION定義區 Library 庫 是用于存放預先編譯好的Package 程序包 Package 程序包 中定義了基本的常數 數據類型 元件及子程序等 作用 聲明在實體和結構體定義中將用到的數據類型 元件或子程序等 聲明格式 Library庫名 Use庫名 PACKAGE名 All 1 LIBRARY和PACKAGE聲明區 作用 ENTITY 實體 用于定義電路的外觀 即I O端口的類型和數量 定義格式 Entity實體名isPort a inbit b inbit c outbit End實體名 2 ENTITY定義區 端口名 數據類型 端口模式 2 ENTITY定義區 標識符的定義原則 1 標識符由字母 數字和下劃線組成 a7 2 在標識符不區分大小寫 ab和AB是一樣的 3 第一個字符必須是字母 即a666 4 不允許有兩個連續的下劃線 a b錯誤 5 末尾不能是下劃線 mname 錯誤 6 標識符不能和關鍵字相同 如Entity is等 端口模式 MODE 有以下幾種類型 IN OUT INOUT BUFFER端口模式可用下圖說明 黑框代表一個設計或模塊 INOUTBUFFERINOUT 2 ENTITY定義區 3 ARCHITECTURE定義區 定義了實體的實現 即電路的具體描述 說明電路執行什么動作或實現功能 定義格式 Architecture結構體名of實體名is 聲明語句 內部信號 變量 常數 元件 子程序聲明 Begin并行描述語句 End結構體名 4 CONFIGURATION定義區 一個完整VHDL電路設計必須有一個實體和對應的結構體 即實體和結構體對構成一個完整的VHDL設計 一個實體可對應一個結構體或多個結構體 即一個實體可以有不同的描述方式 作用 當實體有多個結構體時 系統默認實體選用最后一個結構體 利用CONFIGURATION語句可以任意選擇采用哪一個結構體 4 CONFIGURATION定義區 定義格式 Configuration配置名of實體名isfor選用的結構體名endfor endconfiguration配置名 二輸入與門電路設計范例 電路真值表 二輸入與門電路設計范例 Librarystd Usestd standard all Entityand2isPort a inbit b inbit c outbit Endand2 實體定義結束 雙減號 為VHDL程序的注釋符 類似C語言中的 注釋符 二輸入與門電路設計范例 ArchitectureNaofand2isBeginc 0 whena 0 andb 0 else 0 whena 1 andb 0 else 0 whena 0 andb 1 else 1 符號 為信號直接賦值符 EndNa 結構體NaArchitectureNbofand2isBeginc aandb and為邏輯與操作EndNb 結構體Nb 二輸入與門電路設計范例 Configurations1ofand2isfornaendfor endconfigurations1 結構體配置結束 1 2Max plus 系統的操作 Max plus 開發工具是美國Altera公司自行設計的一種軟件工具 其全稱為MultipleArrayMatrixandProgrammableLogicUserSystem 它具有原理圖輸入和文本輸入 采用硬件描述語言 兩種輸入手段 利用該工具所配備的編輯 編譯 仿真 時序分析 芯片編程等功能 將設計電路圖或電路描述程序變成基本的邏輯單元寫入到可編程的芯片中 如CPLD或FPGA芯片 作成ASIC芯片 它是EDA設計中不可缺少的一種工具 下面我們介紹利用Max plus 系統如何實現如下操作 1 如何編寫VHDL程序 使用TextEditor 2 如何編譯VHDL程序 使用Compiler 3 如何仿真驗證VHDL程序 使用WaveformEditor Simulator 4 如何進行芯片的時序分析 使用TimingAnalyzer 5 如何安排芯片腳位 使用FloorplanEditor 6 如何下載程序至芯片 使用Programmer 1 2Max plus 系統的操作 1 如何編寫VHDL程序 a 打開文本編輯器 File new Texteditorfileb 編寫VHDL程序 c 保存文件 文件名和定義的實體名必須相同 文件擴展名為VHD 文件存盤的目錄不應是根目錄或桌面 建議存放在Max2work或Maxplus2目錄 或其子目錄 2 如何編譯VHDL程序 a 打開需要編譯的文件 b 設置工程到目前打開的文件 File Project SetProjecttoCurrentFile c 打開編譯器 點擊主菜單MAX plus Compiler選項 d 選定VHDL源文件的版本 Interfaces VHDLNetlistReaderSettings e 打開編譯器進行編譯 3 如何仿真驗證VHDL程序 a 打開波形編輯器 WaveformEditor b 確定仿真持續時間 File EndTime c 將輸入輸出端口名選入波形編輯器 d 編輯輸入信號波形 e 保存仿真波形文件 f 打開仿真器MAX plus Simulator進行仿真 在仿真結束后打開仿真波形文件 點擊右下角的OpenSCF按鈕 即可以顯示仿真結果 4 如何進行芯片的時序分析 a 選擇要下載的器件型號 點擊主菜單的Assign Device項得到Device對話框 在DeviceFamily框中選擇芯片系列 在Devices選擇框下選擇具體的芯片名 最后點擊OK按鈕 b 再編譯一次 c 打開時序分析器 TimingAnalyzer d 點擊Start進行時序分析 5 如何安排芯片腳位 a 打開芯片腳位設置窗口 點擊主菜單Assign Pin Location Chip 出現腳位設置對話框 b 將實體定義的端口名字和下載芯片的管腳進行具體對應 在NodeName框中輸入我們定義的實體端口名字 然后在Pin列表選項框中輸入下載芯片的管腳序號 再點擊對話框右下角的Add按鈕 將所有端口設置完成以后 點擊Ok按鈕 則實現實體端口和下載芯片的管腳的對應 c 再編譯一次 將生成可以下載的文件 And2 Sof 6 如何下載程序至芯片 a 將下載電纜與計算機并口相連 然后給芯片通電 b 打開編程器Programmer Options HardwareSetup 在HardwareType選擇ByteBlaster MV 方式 則在ParallelPort處顯示LPT1 單擊OK鈕返回Programmer窗口 c 下載方式選擇 d 選擇下載的芯片類型和要下載的文件 選擇JTAG MutiDevicJTAGChainSetup e 點擊Configure進行下載 將程序寫入芯片中 第二章數據類型與數據對象的定義 2 1數據類型2 2數據對象的定義2 3信號運算符2 4信號屬性 2 1數據類型 在VHDL程序中 我們經常會遇到這樣的語句 SignalA std logic VariableB std logic vector 7downto0 ConstantC integer 數據對象類型 數據類型 數據對象名 2 1 1邏輯數據類型 1 布爾代數 Boolean 型 2 位 Bit 3 位數組類型 Bit Vector 在std庫的standard程序包中進行定義 typeBIT VECTORisarray NATURALrange ofBIT typeBITis 0 1 typeBOOLEANis FALSE TRUE 4 標準邏輯型 Std Logic TypeSTD LOGICis U Uninialized 未初始化 X Forcingunknown 浮接不定 0 Forcing0 低電位 1 Forcing1 高電位 Z HighImpedance 高阻抗 W WeakUnknown 弱浮接 L Weak0 弱低電位 H Weak1 弱高電位 Don tcare 不必理會 5 標準邏輯數組類型 Std Logic vector 在ieee庫的std logic 1164程序包中定義 TYPEstd logic vectorISARRAY NATURALRANGE OFstd logic 2 1 2數值數據類型 1 整數 Integer a 正整數 POSITIVE b 自然數 NATURAL 在std庫的standard程序包中進行定義 subtypePOSITIVEisrange1toINTEGER High TypeINTEGERisrange 2147483648to2147483647 subtypeNATURALisrange0toINTEGER High 2 實數 Real 3 有符號數 Signed 無符號數 Unsigned 在ieee庫的std logic arith程序包中定義 typeREALisrange 1 7E38to1 7E38 typeUNSIGNEDisarray NATURALrange ofSTD LOGIC typeSIGNEDisarray NATURALrange ofSTD LOGIC SIGNED的最高位為符號位 其余位為數值位 數值位為補碼形式 如 符號數 1001 表示 7 libraryieee useieee std logic 1164 all useieee std logic arith all entitydataisport a b inunsigned 3downto0 a b insigned 3downto0 c outstd logic enddata architecturem1ofdataisbeginc 1 whena belse 0 endm1 當定義成無符號類型時 若a 1000 b 0001 即a 8 b 1則結果c 0 當定義成有符號類型時 若a 1000 b 0001 則a 8 b 1 則結果c 1 2 1 3列舉和數組數據類型 1 列舉數據類型 EnumeratedTypes 定義格式 Type列舉名稱is 元素1 元素2 2 數組數據類型 ArrayTypes 定義格式 Type數組名稱isArray range of數據類型 2 1 4數據類型的轉換 在VHDL語言里 不同類型的數據信號之間不能互相賦值 當需要不同類型數據之間傳遞信息時 就需要類型轉換函數將其中的一種類型數據轉換為另一中數據類型后 再進行信號的傳遞 例如 SignalY Std logic vector 7downto0 SignalX Integerrange0to255 Y CONV STD LOGIC VECTOR X 8 轉換函數有兩個參數 被轉換的對象和轉換后的位數 常用的數據類型轉換函數 CONV INTEGER將數據類型UNSIGNED SIGNED轉換為INTEGER類型 CONV UNSIGNED將數據類型INTEGER SIGNED轉換為UNSIGNED類型 CONV SIGNED將數據類型INTEGER UNSIGNED轉換為SIGNED類型 CONV STD LOGIC VECTOR將數據類型INTEGER UNSIGNED SIGNED STD LOGIC轉換為STD LOGIC VECTOR類型 在庫ieee的程序包std logic arith中定義 2 2數據對象的定義 常用的數據對象有三種 常數 Constant 信號 Signal 變量 Variable 2 2 1常數的定義 1 將數據對象定義為常數 一方面希望該數據對象的值不會被改變 另一方面 為了提高程序的可讀性 2 常數為全局量 3 常數在程序包說明 實體說明 結構體描述 過程說明 函數調用中使用 4 常數的定義格式 Constant常數名 數據類型 常數值 如 ConstantD1 Integer 3 注意 常數定義的同時進行賦初值 常數的應用示例 libraryieee useieee std logic 1164 all useieee std logic unsigned all 必需定義 entityexam1isport ip instd logic vector 3downto0 op outstd logic vector 3downto0 endexam1 architecturem1ofexam1isconstantnum integer 6 beginop ip num endm1 2 2 2信號的定義 1 信號 數據對象 代表電路內部信號或連接線路 其在元件之間起互連作用 注意 信號定義的時候盡管可以直接賦初值 但系統往往忽略 建議信號對象定義后再進行賦值 2 信號為全局量 3 在實體說明 結構體描述和程序包說明中使用 4 信號的定義格式 Signal信號名 數據類型 5 信號賦值的語法格式為 信號名 表達式 如 SignalS1 Std logic vector 3Downto0 S1 0000 2 2 3變量的定義 1 變量 數據對象 它用于對中間數據的臨時存儲 并不一定代表電路的某一組件 注意 變量定義的時候盡管可以直接賦初值 但系統往往忽略 建議變量對象定義后再進行賦值 2 變量為局部量 3 僅限于進程 Process 或子程序中使用 4 變量的定義格式 Variable變量名 數據類型 5 變量賦值的語法格式為 目標信號值 表達式 如 VariableS1 Std logic vector 3Downto0 S1 0000 libraryieee useieee std logic 1164 all entitybcvisport a b c instd logic x y outstd logic endbcv architecturem2ofbcvisbeginprocess a b c variabled std logic begind a x cxord d b y cxord endprocess endm2 例一 結果 x cxorb y cxorb x cxora y cxorb architecturem1ofbcvissignald std logic beginprocess a b c begind a ignoredx cxord d b y cxord endprocess endm1 libraryieee useieee std logic 1164 all Entitycmpisport cp ip instd logic cp為時鐘脈沖op oq outstd logic ip為輸入信號endcmp Architecturem1ofcmpissignald std logic beginprocess cp variablee std logic beginifcp eventandcp 1 thend ip op d e ip oq e endif endprocess endm1 例二D觸發器 在進程中 信號賦值只有在過程結束時起作用 而變量賦值是立即進行的 2 2 4信號和變量的比較 1 信號和變量的對應關系不同 信號代表電路內部信號或連接線路 而變量則不是 2 信號和變量聲明的位置不同 信號聲明在子程序 進程的外部 而變量聲明在子程序 進程的內部 3 信號為全局量 而變量只在定義它的域中才可見 因此 變量不能在兩個進程之間傳遞信息 4 在一個進程中多次為一個信號賦值時 只有最后一個值會起作用 而變量則不同 每次賦值都會改變它的值 5 賦值不同 在進程中 信號賦值只有在進程結束時起作用 而變量賦值是立即進行的 而且賦值符號不同 信號賦值為 變量賦值為 Libraryieee Useieee std logic 1164 all Useieee std logic unsigned all 一位BCD碼的加法器 EntitybcdadderisPort a b instd logic vector 3downto0 result outstd logic vector 4downto0 Endbcdadder ArchitectureNaofbcdadderisconstantadjnum integer 6 常數定義signalbinadd std logic vector 4downto0 信號Beginbinadd9thentmp adjnum elsetmp 0 endif result binadd tmp endprocess EndNa 2 3信號運算符 VHDL提供了四種類型運算符號 邏輯運算符關系運算符算術運算符連接運算符 VHDL運算符 邏輯運算符 and邏輯與or邏輯或nand與非nor或非xor異或xnor同或not邏輯非 上述邏輯運算在庫ieee的程序包std logic 1164中定義 VHDL運算符 關系運算符 等于 不等于大于 大于或等于注 其中 操作符也用于表示信號的賦值操作 上述運算在庫ieee的程序包std logic arith中定義 VHDL運算符 算術運算符 加 減 乘 除 乘方mod求模rem求余abs求絕對值在庫ieee的程序包std logic arith中定義 VHDL運算符 連接運算符 連接符 將兩個數據對象或矢量連接成維數更大的矢量 它可給代碼書寫帶來方便 例如 vabc a b c 如果a 1 b 0 c 1 則vabc 101 1 數值類屬性 數組類型的數據對象 數值類屬性有 left right low high length 其中用符號 隔開對象名及其屬性 left表示數組的左邊界 right表示數組的右邊界 low表示數組的下邊界 high表示數組的上邊界 length表示數組的長度 2 4數據對象屬性 如 SignalA std logic vector 7downto0 SignalB std logic vector 0to3 則這兩個信號的屬性值分別為 A left 7 A right 0 A low 0 A high 7 A length 8 B left 0 B right 3 B low 0 B high 3 B length 4 left表示數組的左邊界 right表示數組的右邊界 low表示數組的下邊界 high表示數組的上邊界 length表示數組的長度 2 event屬性 event屬性 它的值為布爾型 如果剛好有事件發生在該屬性所附著的信號上 即信號有變化 則其取值為Ture 否則為False 利用此屬性可決定時鐘信號的變化情況 即時鐘是否發生 2 4數據對象屬性 2 Event屬性 例如 時鐘邊沿表示signalclk instd logic 則clk eventandclk 1 表示時鐘的上升沿 即時鐘變化了 且其值為1 clk eventandclk 0 表示時鐘的下降沿 即時鐘變化了 且其值為0 此外 還可利用兩個函數來表示時鐘的邊沿 rising edge clk 表示時鐘的上升沿falling edge clk 表示時鐘的下降沿這兩個函數分別在庫ieee的程序包Std logic 1164中定義 2 4數據對象屬性 并行語句一般處于進程 PROCESS 的外部 所有并行語句都是并行執行的 即與它們出現的先后次序無關 并行語句有三個特點 a 所有語句的執行是并行的 b 每條語句的執行和其所在的位置無關 c 并行語句的輸出僅僅依賴于輸入 沒有其它的限制條件 第三章并行賦值語句 第三章并行賦值語句 1 直接賦值語句 賦值運算符 2 條件式信號設置語句 When Else 3 選擇式信號設置語句 With Select When 4 Process 進程 語句 5 Block 塊 語句 6 函數調用語句 后面章節講 7 Component 元件 例化語句 8 For Generate語句Generic的使用 1 直接賦值語句 直接賦值語句的格式 Signal name 0 結果信號A的每一位的值都為0 B 0 信號對象的位數很多時 采用others來賦值很方便 示例 libraryieee useieee std logic 1164 all Entitytest1IsPort a b instd logic c d outstd logic endtest1 architecturetest1 bodyoftest1isbegin同時執行d aorb c aandb endtest1 body 輸出僅僅依賴于輸入 沒有其它的限制條件 每條語句的執行和其所在的位置無關 2 When Else條件式信號設置語句 它的語法格式為 label Signal name expression1Whenlogic expression1Else expression2Whenlogic expression2Else expressionn 例如 f 1 whenx1 x2else 0 When Else語句示例 Libraryieee Useieee std logic 1164 all Entityxor2isPort x y instd logic z outstd logic Endxor2 Architectureaofxor2isBeginz 1 when x 0 andy 1 else 1 when x 1 andy 0 else 0 Enda 3 With Select When選擇式信號設置語句 label WithexpressionSelectSignal name expressionWhenconstant value expressionWhenconstant value With Select When示例 Libraryieee Useieee std logic 1164 all Entityxor2isPort x y instd logic z outstd logic Endxor2 Architectureaofxor2issignaltmp std logic vector 1downto0 Begintmp x When else和With select When語句的區別 1 With select When語句中When后的constant value必須是互不相同的 2 而When else語句中When后的logic expression則不需要這樣的嚴格條件 3 When else語句中When后的logic expression的優先權次序為由先到后排列 優先編碼器示例 Libraryieee Useieee std logic 1164 all EntitypriorityisPort r1 r2 r3 instd logic f outstd logic vector 1downto0 Endpriority ArchitectureaofpriorityisBeginf 01 when r1 1 else 10 when r2 1 else 11 when r3 1 else 00 Enda Ifr1 1 f 01 Ifr2 1 andr1 1 f 10 Ifr3 1 andr1 1 andr2 1 f 11 如果三個輸入都為0 f 00 4 Process語句 1 一個結構體當中可以有多個Process語句 Process語句是同時執行的并行語句 2 Process內的語句卻是順序執行的順序語句 3 多進程之間的信息通過信號對象來傳遞 Process語句的格式為 Processlabel Process Sensitivitylist Variabledeclarations Begin順序語句 EndProcess Processlabel 4 Process語句 敏感表 Sensitivitylist 包括進程的一些信號 當敏感表中的某個信號變化時進程才被激活 進程內的順序語句被執行 當進程結束時 進程內的輸出信號值被更新 進程進入等待 睡眠 狀態 直到敏感表中的某一信號發生變化 進程被再次激活 對于上述電路 我們同樣可以采用Process語句來進行描述 Process語句示例 architecturem2ofexam1isSignaltmp std logic beginprocessbegintmp aandb endprocess d tmp processbegine tmporc endprocess endm2 5 Block 塊 語句 當我們設計一個比較復雜的電路時 為了使設計簡單化 可以將其分為幾個部分分別進行設計 每個部分設計完成后 再將其組合成我們需要的電路 這種方法稱為模塊化設計方法 這樣 使得整個設計工作更加容易實現 同時程序代碼的維護性 糾錯性都能得到提高 采用模塊化設計時 當設計一個模塊時 我們就要用到Block語句 語法格式 BlockLabel Block 數據對象定義部分 BeginEndBlock 5 Block 塊 語句 libraryieee useieee std logic 1164 all entityexam1isport a b c instd logic d e outstd logic endexam1 architecturem1ofexam1isbeginBlock 1 BlockBegind aandb endblock Block 2 BlockBegine aandb orc endblock endm1 Block語句示例 Component 元件 例化語句 1 Block語句可以使VHDL程序更加模塊化 功能化 但這樣的做法要求在同一程序中 若是重復使用時 必須重寫一次 Block語句解決了這樣的重復編寫問題 2 元件也是完整的VHDL設計 作為底層設計 通過元件聲明 使之可在其他模塊中被調用 3 元件聲明可放在程序包中 也可在某個設計的結構體中聲明 語法格式 Component元件名Port 端口定義 同元件實現時的實體的port部分EndComponent 元件例化指元件的調用 它的語法格式為 Label 元件名PortMap 端口映射 Component 元件 例化語句 元件例化時端口映射或關聯有兩種方式 a 位置對應方式直接由輸入信號和元件信號的對應位置進行映射 即 元件標號 元件名PortMap 信號A1 信號B1 b 名字直接對應我們使用 映射符號進行輸入信號和元件信號之間的映射 那么位置可以不對應 即 元件標號 元件名PortMap 元件信號A 信號A1 元件信號B 信號B1 注意 元件標號是必需的 Component例化語句 Libraryieee Useieee std logic 1164 all Useieee std logic unsigned all EntityfulladderisPort Ci instd logic a b instd logic s outstd logic Co outstd logic Endfulladder Architecturem1offulladderisSignaltmp std logic vector 1downto0 Begintmp 0 一位全加器 Libraryieee Useieee std logic 1164 all Useieee std logic unsigned all EntityadderisPort Cin instd logic x y instd logic vector 3downto0 sum outstd logic vector 3downto0 Cout outstd logic Endadder 四位加法器 ArchitectureaofadderisSignalc std logic vector 0to4 ComponentfulladderPort ci a b instd logic s co outstd logic endcomponent Beginc 0 c 0 a x 0 b y 0 s sum 0 co c 1 U2 fulladderPortmap c 1 x 1 y 1 sum 1 c 2 U3 fulladderPortmap c 2 x 2 y 2 sum 2 c 3 U4 fulladderPortmap c 3 x 3 y 3 sum 3 c 4 Cout c 4 Enda Component例化示例 For Generate語句 For Generate語句用于生成一組信號賦值或元件例化語句 語法格式 generate label 必須的forindex variableInrangegeneratestatement statement endgenerate 則上面的四位加法器可以這樣來實現 其它相同 上面四條賦值語句可以這樣來代替 Generate label ForiIn0to3GenerateBitadder fulladderPortmap c i x i y i sum i c i 1 Endgenerate For Generate語句 Generic語句 通過引入一個參數n使得我們設計的加法器更加具有通用性 參數n代表加法器中相加的位數 在VHDL中 這樣的參數稱為Generic 類屬 通常定義在實體描述和元件聲明中 定義格式 Generic 參數名 數據類型 表達式 例如 Generic m integer 7 Libraryieee Useieee std logic 1164 all Useieee std logic unsigned all EntityadderisGeneric n integer 4 Port Cin instd logic x y instd logic vector n 1downto0 sum outstd logic vector n 1downto0 Cout outstd logic Endadder Generic語句示例 N位全加器 ArchitectureaofadderisSignalc std logic vector 0ton ComponentfulladderPort ci a b instd logic s co outstd logic Endcomponent Beginc 0 cin Generate label ForiIn0ton 1GenerateBitadder fulladderPortmap c i x i y i sum i c i 1 Endgenerate Cout c n Enda Libraryieee Useieee std logic 1164 all Useieee std logic unsigned all EntitynadderisPort Cin1 instd logic x1 y1 instd logic vector 7downto0 Sum1 outstd logic vector 7downto0 Cout1 outstd logic Endnadder 帶Generic的元件例化 N位全加器 ArchitectureaofnadderisComponentadderGeneric n integer 也可在此進行影射Generic n integer 8 Port cin instd logic x y instd logic vector n 1downto0 sum outstd logic vector n 1downto0 cout outstd logic endcomponent BeginNadder adderGenericmap n 8 Portmap cin1 x1 y1 sum1 cout1 Enda 若元件聲明時已經賦值 則Nadder adderPortmap cin1 x1 y1 sum1 cout1 Genericmap 8 1 順序語句每一條語句的執行都是順序進行的 如同高級編程語言中的命令執行方式 一次一條命令 按書寫順序由上而下執行 2 順序語句只能出現在進程和子程序內部 3 由于順序語句的次序很重要 因此 順序語句要與并行語句分割開 這可以通過Process語句來實現 Process語句出現在結構體中 它將其內部的語句進行封裝 第四章順序賦值語句 順序語句有三個特點 a 所有語句的執行是順序進行的 b 每條語句的執行和其所在的位置有關 c 順序語句的輸出不僅依賴于輸入 而且還受位置的影響 第四章順序語句 1 Process語句 2 If Else語句 3 Case When語句 4 Null語句 5 For Loop語句 6 Waituntil語句 7 變量賦值語句 8 Procedure 過程 調用語句 1 Process語句 Process內的順序語句可以是 Process label Process Sensi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國基礎護理操作模型行業市場發展監測及投資潛力預測報告
- 2025年 湖北公務員考試行測試題行政執法類附答案
- 2025年 廣西醫科大學第二附屬醫院招聘筆試試題附答案
- 2023-2029年中國特種水產行業市場深度研究及投資戰略咨詢報告
- 2025年 北海市城市開發投資集團有限公司招聘考試筆試試題附答案
- 清潔生產管理清潔生產審核報告染料廠
- 2025年中國家居門簾行業市場發展前景及發展趨勢與投資戰略研究報告
- 2025年水飛薊素項目節能評估報告(節能專)
- 中國云服務行業市場發展現狀及前景趨勢與投資分析研究報告(2024-2030)
- 2025年中國布邊紗夾壓腳行業市場發展前景及發展趨勢與投資戰略研究報告
- 2023年遼寧省高中學業水平合格性考試物理試卷真題(答案詳解)
- 一例壓力性損傷的個案護理
- 初高中生物銜接課件
- 高壓電動機預防性試驗課件
- 2023年上海市青浦區社區工作者招聘考試真題
- 2022-2023學年北京市西城區部編版五年級下冊期末考試語文試卷
- 南平市消防訓練基地項目環境影響報告
- 副舟骨損傷查房
- 女性領導力智慧樹知到課后章節答案2023年下山東女子學院
- 沖壓成型精密五金機構件生產QC工程圖
- 工程量確認單范本
評論
0/150
提交評論