不能被綜合的Verilog語言——非靜態迴圈
Verilog語言是硬體描述語言,需要綜合成硬體電路。不是所有的行為描述都可以綜合成硬體電路的。
比如下面的這段程式碼:功能很簡單,完成統計輸入的並行資料中‘1’計數。
module test(
output reg [2:0] bit_count,
input [7:0] data,
input clk,
input reset
);
reg [2:0] count,index;
reg [7:0] temp;
always@(posedge clk)begin
if(reset)begin
count = 0;
bit_count = 0;
end else begin
count = 0;
temp = data;
for(index=0;|temp;index=index+1)begin
if(temp[0]) count = count+1;
temp = temp>>1;
end
bit_count = count;
end
end
endmodule
下面來分析一下上面的例子:用C程式設計的話思路沒有任何問題。程式通過將輸入資料儲存到temp暫存器中,然後對其迴圈右移。判斷temp的LSB來確定是否對bit_count加一。對數字‘1’的計數任務原則上應該是組合邏輯完成的任務。但是組合邏輯卻不能在一個迴圈內完成多個迴圈任務。而且對不同的資料輸入迴圈的次數是不確定的。但是上面的程式碼模擬是可以通過的,波形也可以達到預期的結果。但是程式碼是不可被綜合。
總結:當在一個行為模組裡嵌入for迴圈的組合邏輯,或著當迴圈的此次不能被確定時,不能被綜合成硬體電路。
材料來源:Verilog高階數字設計
相關文章
- C 語言實現使用靜態陣列實現迴圈佇列陣列佇列
- Verilog HDL迴圈語句簡介
- C語言——迴圈結構(for迴圈,while迴圈,do-while迴圈)C語言While
- 靜態佇列,迴圈陣列實現佇列陣列
- C 語言使用非迴圈雙向連結串列實現佇列佇列
- 鴻蒙開發TypeScript語言:【迴圈】鴻蒙TypeScript
- Java語言程式設計—迴圈語句Java程式設計
- 分支、迴圈語句動態展示
- Scala: 感覺像動態的靜態語言
- 迴圈高階綜合練習
- C語言實驗——for迴圈列印圖形(迴圈結構)(sdut oj)C語言
- 靜態路由綜合實驗路由
- Oracle 迴圈呼叫動態SQL語句OracleSQL
- net 靜態方法與非靜態方法
- C語言的本質(34)——靜態庫C語言
- C 語言實現使用動態陣列實現迴圈佇列陣列佇列
- C語言程式設計學習中while迴圈和do……while迴圈C語言程式設計While
- 靜態變數和非靜態變數變數
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-FOR迴圈-FOR迴圈中的索引SQL索引
- Java中靜態跟非靜態的區別總結Java
- 注意!非靜態內部類和非靜態方法的匿名類的this$0屬性
- 計算機語言:編譯型/解釋型、動態語言/靜態語言、強型別語言/弱型別語言計算機編譯型別
- 通過幾段程式碼理解Verilog裡面阻塞賦值和非阻塞賦值的區別,以及Verilog的for迴圈的使用賦值
- Matlab的if語句switch語句for迴圈while迴圈語句練習MatlabWhile
- C語言學習【3】——判斷與迴圈C語言
- 第04天C語言(15):for迴圈-注意點C語言
- C語言-for迴圈之窮舉法練習C語言
- C語言goto語句以及用goto語句構成迴圈C語言Go
- SystemVerilog 語言部分(二)
- C語言--靜態區域性變數C語言變數
- Go語言實現靜態伺服器Go伺服器
- 《快學 Go 語言》第 3 課 —— 分支與迴圈Go
- Go 語言史詩級更新-迴圈Bug修復Go
- Go語言流程控制之迴圈結構篇Go
- 一文帶你掌握C語言的迴圈結構C語言
- 創業,你選擇靜態還是動態語言?創業
- TypeScript 迴圈語句TypeScript
- JavaScript for 迴圈語句JavaScript