Verilog 過程結構簡述
導讀 | 過程結構語句有 2 種,initial 與 always 語句。它們是行為級建模的 2 種基本語句。一個模組中可以包含多個 initial 和 always 語句,但 2 種語句不能巢狀使用。 |
過程結構語句有 2 種,initial 與 always 語句。它們是行為級建模的 2 種基本語句。
一個模組中可以包含多個 initial 和 always 語句,但 2 種語句不能巢狀使用。
這些語句在模組間並行執行,與其在模組的前後順序沒有關係。
但是 initial 語句或 always 語句內部可以理解為是順序執行的(非阻塞賦值除外)。
每個 initial 語句或 always 語句都會產生一個獨立的控制流,執行時間都是從 0 時刻開始。
initial 語句從 0 時刻開始執行,只執行一次,多個 initial 塊之間是相互獨立的。
如果 initial 塊內包含多個語句,需要使用關鍵字 begin 和 end 組成一個塊語句。
如果 initial 塊內只要一條語句,關鍵字 begin 和 end 可使用也可不使用。
initial 理論上來講是不可綜合的,多用於初始化、訊號檢測等。
對上一節程式碼稍作修改,進行模擬,程式碼如下。
例項
`timescale 1ns/1ns module test ; reg ai, bi ; initial begin ai = 0 ; #25 ; ai = 1 ; #35 ; ai = 0 ; //absolute 60ns #40 ; ai = 1 ; //absolute 100ns #10 ; ai = 0 ; //absolute 110ns end initial begin bi = 1 ; #70 ; bi = 0 ; //absolute 70ns #20 ; bi = 1 ; //absolute 90ns end //at proper time stop the simulation initial begin forever begin #100; //$display("---gyc---%d", $time); if ($time >= 1000) begin $finish ; end end end endmodule
模擬結果如下:
可以看出,2 個 initial 程式語句分別給訊號 ai,bi 賦值時,相互間並沒有影響。
訊號 ai,bi 的值按照賦值順序依次改變,所以 initial 內部語句也可以看做是順序執行。
與 initial 語句相反,always 語句是重複執行的。always 語句塊從 0 時刻開始執行其中的行為語句;當執行完最後一條語句後,便再次執行語句塊中的第一條語句,如此迴圈反覆。
由於迴圈執行的特點,always 語句多用於模擬時鐘的產生,訊號行為的檢測等。
下面用 always 產生一個 100MHz 時鐘源,並在 110ns 時停止模擬程式碼如下。
程式碼如下:
例項
`timescale 1ns/1ns module test ; parameter CLK_FREQ = 100 ; //100MHz parameter CLK_CYCLE = 1e9 / (CLK_FREQ * 1e6) ; //switch to ns reg clk ; initial clk = 1'b0 ; //clk is initialized to "0" always # (CLK_CYCLE/2) clk = ~clk ; //generating a real clock by reversing always begin #10; if ($time >= 1000) begin $finish ; end end endmodule
模擬結果如下:
可見,時鐘週期是我們想要得到的 100MHz。而且模擬在 110ns 時停止。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2731734/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡述Socket連線的過程
- Verilog連續賦值、過程賦值、過程連續賦值總結賦值
- Verilog 邏輯綜合過程
- MySQL兩階段提交過程原理簡述MySql
- 簡述常見資料結構資料結構
- 簡述知識付費平臺搭建過程
- 排程器Quartz的簡述與使用總結quartz
- Presto 標量函式註冊和呼叫過程簡述REST函式
- Kubernetes架構簡述架構
- vue 原始碼學習(一) 目錄結構和構建過程簡介Vue原始碼
- 描述下什麼是域名解析?簡述它的基本過程
- 【C進階】20、連結過程簡介
- JVM篇1:[-結構綜述-]JVM
- 細述程式語言的發展過程
- MySQL的物理儲存結構和session過程MySqlSession
- 阿里P9架構師簡述從單機至億級流量大型網站系統架構的演進過程阿里架構網站
- C語言編譯和連結過程簡介C語言編譯
- Verilog 編譯指令簡介編譯
- 簡單的mysql儲存過程,輸出結果集MySql儲存過程
- MacPorts打包過程簡介Mac
- 編譯過程簡介編譯
- 分析oc物件的記憶體結構及其建立過程物件記憶體
- redis面試題 redis總結 redis簡述Redis面試題
- 【總結】簡述 MySQL 基準測試工具MySql
- [總結] 簡述 MySQL 基準測試工具MySql
- 簡述top命令與結束程式kill命令
- Verilog 多路分支語句簡介
- Swift-構造過程Swift
- Swift-析構過程Swift
- Dojo簡述
- CNN 簡述CNN
- 編譯連結過程編譯
- redis資料結構原始碼閱讀——字串編碼過程Redis資料結構原始碼字串編碼
- 大資料開發過程中Kafka日誌結構解析大資料Kafka
- USB裝置的列舉過程分析——資料結構先行資料結構
- Android 12(S) 圖形顯示系統 - 簡述Allocator/Mapper HAL服務的獲取過程(十五)AndroidAPP
- 透過資料結構實現簡易通訊錄資料結構
- Verilog HDL迴圈語句簡介