systemverilog新增的always_comb,always_ff,和always_latch語句
在Verilog中,設計組合邏輯和時序邏輯時,都要用到always:
always @(*) //組合邏輯
if(a > b)
out = 1;
else
out = 0;
always @(posedge clk) //時序邏輯 flip-flop觸發器
if(en)
out <= in;
僅從關鍵字上,看不出設計者想要一個什麼樣的電路。
SystemVerilog把always關鍵字細化了。對不同的設計要求有不同的關鍵字:
always_comb //組合邏輯
if(a > b)
out = 1;
else
out = 0;
comb是combinational的縮寫,always_comb表示設計者想要設計一個組合邏輯電路。同時不必再寫敏感訊號列表。我們在設計組合邏輯電路時,一件最重要的事就是不要一不小心搞一個latch出來。always_comb會告訴綜合工具,這裡需要的是一個組合邏輯電路。假如我們設計時,if語句或者case語句沒有寫完整,
always_comb //錯誤
if(a > b)
out = 1;
在綜合時,我們會收到警報:這裡應該是組合邏輯,你把他寫成了latch。使用always,則不會收到這樣的警告。
如果真的需要latch,SystemVerilog準備了專門的關鍵字:
always_latch //latch
if(clk)
out = in;
always_latch是電平敏感的,它也不需要敏感訊號列表,它會告訴綜合工具,這裡我就是需要一個latch。
always_comb和always_latch極大的降低了unintentional latch的出現。這是對電路設計的一大提升。
對於flip-flop觸發器的設計,也有專門的關鍵字:
always_ff @(posedge clk) //flip-flop觸發器
if(en)
out <= in;
ff是flip_flop的縮寫,它需要敏感訊號列表,並且是邊沿觸發的,所以敏感訊號列表裡的訊號,都需要加關鍵字posedge或negedge。假如我們忘記了寫posedge或者negedge:
always_ff @(clk) //錯誤
if(en)
out <= in;
綜合工具會發出警告:這裡應該是flip-flop,可你寫的不是flip-flop。使用always,則不會收到這樣的警告。
SystemVerilog把always細化成always_comb, always_ff, 和always_latch。使綜合工具可以自動檢查各種細節,降低了設計失誤的可能。
相關文章
- MySQL 三種新增語句MySql
- MySQL 四種新增語句MySql
- SystemVerilog 語言部分(二)
- 分支語句和迴圈語句
- mysql快速新增百萬條記錄的語句MySql
- mysql新增約束語句筆記MySql筆記
- SystemVerilog 類和物件(三)物件
- linux-mysql新增語句、重啟tomcatLinuxMySqlTomcat
- 9 SystemVerilog語言編寫SPI接收
- Python-條件語句和迴圈語句Python
- if 多分支語句和 switch 多分支語句的異同之處
- SSH框架控制檯輸出HQL語句和SQL語句的方法框架SQL
- Linux下邏輯測試語句引數和流程控制語句 if語句Linux
- MySql和簡單的sql語句MySql
- flask之控制語句 if 語句與for語句Flask
- Python中break語句和continue語句有什麼區別?Python
- 表示式和基本語句的規範
- insert all和insert first語句的用法
- Python 中的for,if-else和while語句PythonWhile
- SQLite語句(三):JOIN和UNIONSQLite
- 1.4 資料庫和常用SQL語句(正文)——MySQL資料庫命令和SQL語句資料庫MySql
- do-while語句和while的區別While
- js的with語句JS
- MySQL的語句MySql
- MySQL查詢語句過程和EXPLAIN語句的基本概念及其最佳化MySqlAI
- C 語言教程:條件和 if...else 語句
- sql 語句網路除錯和 sql 語句低層傳輸檢視SQL除錯
- Python零基礎學習筆記(十八)——break語句和continue語句Python筆記
- 【SQL】14 UNION 操作符、SELECT INTO 語句、INSERT INTO SELECT 語句、CREATE DATABASE 語句、CREATE TABLE 語句SQLDatabase
- linux 中 awk語句 getline 和 enxt的區別Linux
- python 中的 for-else 和 while-else 語句PythonWhile
- if語句
- if 語句
- sql宣告變數,及if -else語句、while語句的用法SQL變數While
- Python with 語句的用法Python
- SQL語句IN的用法SQL
- mysql的常用語句MySql
- insert into select語句與select into from語句