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連線的過程
- 需求開發過程步驟簡述
- 編譯、連結學習筆記(一)簡述編譯連結過程編譯筆記
- 簡述常見資料結構資料結構
- 簡述oracle資料庫結構Oracle資料庫
- MySQL兩階段提交過程原理簡述MySql
- Verilog連續賦值、過程賦值、過程連續賦值總結賦值
- 簡述知識付費平臺搭建過程
- MySQL資料庫啟動過程的簡述MySql資料庫
- Oracle EBS APP & DB 打補丁過程簡述OracleAPP
- 排程器Quartz的簡述與使用總結quartz
- Presto 標量函式註冊和呼叫過程簡述REST函式
- vue 原始碼學習(一) 目錄結構和構建過程簡介Vue原始碼
- JavaScript資料結構和演算法簡述——陣列JavaScript資料結構演算法陣列
- Kubernetes架構簡述架構
- 【C進階】20、連結過程簡介
- 電梯排程演算法簡述演算法
- Linux啟動過程綜述(轉)Linux
- 簡述 Linux 檔案系統的目錄結構(轉)Linux
- 磁碟物理結構及IO時的過程
- JVM篇1:[-結構綜述-]JVM
- 直譯器構造文法簡述
- 細述程式語言的發展過程
- MySQL的物理儲存結構和session過程MySqlSession
- 阿里P9架構師簡述從單機至億級流量大型網站系統架構的演進過程阿里架構網站
- SQL Server 索引結構詳述(1)SQLServer索引
- C語言編譯和連結過程簡介C語言編譯
- redis面試題 redis總結 redis簡述Redis面試題
- 簡單的mysql儲存過程,輸出結果集MySql儲存過程
- MacPorts打包過程簡介Mac
- 編譯過程簡介編譯
- 虛擬化技術的發展歷程簡述
- 分析oc物件的記憶體結構及其建立過程物件記憶體
- bbs的資料結構和儲存過程(二) (轉)資料結構儲存過程
- bbs的資料結構和儲存過程(一) (轉)資料結構儲存過程
- bbs的資料結構和儲存過程(三) (轉)資料結構儲存過程
- [總結] 簡述 MySQL 基準測試工具MySql
- 【總結】簡述 MySQL 基準測試工具MySql