generate block的使用


資料來源

(1) Verilog系列:【2】generate常用用法 (qq.com)

1.1 generate block作用與語法

(1) 作用:寫出可配置可綜合的RTL,主要用於重復性實例化模塊或者有條件地實例化模塊; 

注1:generate語句在解析階段對某些語句進行選取或者重復,這些語句可以包括模塊實例語句、連續賦值語句、always語句、initial語句和門級實例語句等;

(2) 語法:由generate和endgenerate構成.一個verilog generate模塊創建了一個新的層次,就像實例化了一個模塊一樣.

注1:使用genvar作為generate語句塊的循環變量;

(3) 使用:generate中除了port聲明, specify和specparam不能使用外,module中可以使用的所有元素都可以用於generate中(generate不能用於initial begin...end塊中,但是initial begin...end塊可以用於generate中);

1.2 generate語句塊的處理

(1) generate語句在仿真/綜合的elaborate階段進行分析,該步驟位於HDL語言解析之后,在仿真/綜合之前.因此generate結構中所包含的所有表達式在elaborate的時候需要是確定的表達式,不能包含動態變量.比如,generate中的語句可以受parameter影響,但不能受動態變量影響.

1.3 generate語句結構

主要包含兩類: (1) generate loop; (2)conditional generate;

1.3.1 generate loop

(1) 將一段代碼例化多次,通過一個index變量來控制; index變量要先用genvar關鍵字來定義,genvar所定義的index變量會被用在elaboration中. genvar可以存在於generate region(由generate-endgenerate關鍵字來限定)之內或之外.同一個genvar定義的index可以被用在多個generate loop中,只要這些loop沒有相互嵌套.

 

1.3.2 generate loop code示例

1.3.3 conditional generate(需要補充例子)

在多段代碼中選擇一段進行例化. conditional generate包括if-generate和case-generate兩種不同模式.

(1) if-generate從一組互斥的generate block中最多選擇一個generate block.

 

(2) case-generate從一組互斥的generate block中選擇一個generate block.用法同傳統的case語句.

 

1.4 generate block naming

(1) 顯式命名:推薦給generate block顯式命名.

(2) 隱式命名:同一個scope中的每個generate block都被賦予一個數字,從1開始,這個數字對於命名和未命名的generate block都存在,依其在rtl code中出現的順序而定. 所有未命名 的block都會被取一個叫genblk[n]的名字,n就是被賦予的數字.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM