找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4735|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

Verilog中parameter和define的區(qū)別

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-23 03:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
1、語法
  

聲明:

  

parameter data = 8‘d14;

  

`define data 8’d14

  

使用:
       data

  

`data

  

  

2、作用域

  

parameter 作用于聲明的那個(gè)文件;`define 從編譯器讀到這條指令開始到編譯結(jié)束都有效,或者遇到`undef命令使之失效。

  

如果想讓parameter或`define作用于整個(gè)項(xiàng)目,可以將如下聲明寫于單獨(dú)文件,并用`include讓每個(gè)文件都包含聲明文件:

  

`ifndef data

  

`define data  8’d14

  

或者

  

parameter data = 8‘d14;

  

`endif

  

`define也可以寫在編譯器最先編譯的文件頂部。通常編譯器都可以定義編譯順序,或者從最底層模塊開始編譯。因此寫在最底層就可以了。

  

  

3、區(qū)別

  

parameter可以用作例化時(shí)的參數(shù)傳遞。

  

在使用狀態(tài)機(jī)時(shí)候區(qū)別挺大的。狀態(tài)機(jī)的定義可以用parameter 定義,但是不推薦使用`define 宏定義的方式,因?yàn)?define 宏定義在編譯時(shí)自動(dòng)替換整個(gè)設(shè)計(jì)中所定義的宏,而parameter 僅僅定義模塊內(nèi)部的參數(shù),定義的參數(shù)不會(huì)與模塊外的其他狀態(tài)機(jī)混淆。例如一個(gè)工程里面有兩個(gè)module 各包含一個(gè)FSM,如果設(shè)計(jì)時(shí)都有IDLE 這一名稱的狀態(tài),如果使用'define 宏定義就會(huì)混淆起來,如果使用parameter 則不會(huì)造成任何不良影響。

  

一旦`define指令被編譯,其在整個(gè)編譯過程中都有效。例如,通過另一個(gè)文件中的`define指令,定義的常量可以被其他文件中被調(diào)用。直到遇到`undef;parameter只在定義的文件中有效,在其它文件中無效。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表