新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 【E課堂】verilog之可綜合與不可綜合

【E課堂】verilog之可綜合與不可綜合

作者: 時間:2016-05-03 來源:電子產(chǎn)品世界 收藏

  可綜合的意思是說所編寫的代碼可以對應(yīng)成具體的電路,不可綜合就是所寫代碼沒有對應(yīng)的電路結(jié)構(gòu),例如行為級語法就是一種不可綜合的代碼,通常用于寫仿真測試文件。

本文引用地址:http://butianyuan.cn/article/201605/290588.htm

  建立可綜合模型時,需注意以下幾點:

  不使用initial

  不使用#10之類的延時語句

  不使用循環(huán)次數(shù)不確定的循環(huán)語句,如forever,while等

  不使用用戶自定義原語(UDP元件)

  盡量使用同步方式設(shè)計電路

  用always塊來描述組合邏輯時,應(yīng)列出所有輸入信號作為敏感信號列表,即always@(*)

  所有的內(nèi)部寄存器都應(yīng)該能夠被復(fù)位,在使用實現(xiàn)設(shè)計時,盡量使用器件的全局復(fù)位端作為系統(tǒng)的總復(fù)位

  對時序邏輯描述和建模,盡量使用非阻塞賦值的方式,對組合邏輯描述和建模,雖然阻塞和非阻塞賦值的方式都可以,但在同一過程快中最好不要同時使用阻塞賦值和非阻塞賦值。我個人比較推薦用阻塞賦值的方式描述組合邏輯

  不能在多個always塊中對同一個變量進行賦值。對同一個對象不能既使用非阻塞賦值,又使用阻塞賦值

  如果不打算讓變量生成鎖存器,那么必須在使用if語句或case語句時補全所有條件

  不可綜合語句:

  initial 初始化語句,只能在testbench中使用,不可綜合

  event event在同步testbench時更有用,不能綜合

  real 不支持real數(shù)據(jù)類型的綜合

  time 不支持time數(shù)據(jù)類型的綜合

  assign 和 deassign 不支持對reg數(shù)據(jù)類型賦值的綜合,但支持wire 類型賦值的綜合

  以#開頭的延時語句不能被綜合

  是一種硬件描述語言,我們在寫 代碼時,首先要有所要寫的module在硬件上如何實現(xiàn)的概念,而不是去想編譯器如何解釋這個module。比如在決定是否使用 reg 定義時,要問問自己物理上是不是真正存在這個 register, 如果是,它的clock 是什么? D 端是什么?Q 端是什么?有沒有清零和置位?同步還是異步?再比如上面討論的三態(tài)輸出問題,首先想到的應(yīng)該是在 register 的輸出后面加一個三態(tài)門,而不是如何才能讓編譯器知道要“賦值”給一個信號為三態(tài)。同樣,Verilog 中沒有“編譯”的概念,而只有綜合的概念,我們只有綜合工具,而沒有所謂的編譯器。

  當然,并不是說不可綜合的代碼就不重要了,在IC設(shè)計中,有70%的時間都是用來做驗證,所以說仿真驗證的工作對于的設(shè)計同樣重要。



關(guān)鍵詞: verilog FPGA

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉