include在Verilog中的應用

2022-04-14 16:51:45 字數 2729 閱讀 3268

"檔案包含"處理`include

所謂"檔案包含"處理是乙個原始檔可以將另外乙個原始檔的全部內容包含進來,即將另外的檔案包含到本檔案之中。verilog hdl語言提供了`include命令用來實現"檔案包含"的操作。其一般形式為:

`include"檔名"

圖中意思為:在編譯的時候,需要對`include命令進行"檔案包含"預處理:將file2.v的全部內容複製插入到`include "file2.v"命令出現的地方,即將file2.v被包含到file1.v中,得到圖c的結果。在接著往下進行編譯中,將"包含"以後的file1.v作為乙個原始檔單位進行編譯。

"檔案包含"命令是很有用的,它可以節省程式設計人員的重複勞動。可以將一些常用的巨集定義命令或任務(task)組成乙個檔案,然後用`include命令將這些巨集定義包含到自己所寫的原始檔中,相當於工業上的標準元件拿來使用。另外在編寫verilog hdl原始檔時,乙個原始檔可能經常要用到另外幾個原始檔中的模組,遇到這種情況即可用`include命令將所需模組的原始檔包含進來。

[例1]:

(1)檔案aaa.v

module aaa(a,b,out);

input a, b;

output out;

wire out;

assign out = a^b;

endmodule

(2)檔案 bbb.v

`include "aaa.v"

module bbb(c,d,e,out);

input c,d,e;

output out;

wire out_a;

wire out;

aaa aaa(.a(c),.b(d),.out(out_a));

assign out=e&out_a;

endmodule

在上面的例子中,檔案bbb.v用到了檔案aaa.v中的模組aaa的例項器件,通過"檔案包含"處理來呼叫。模組aaa實際上是作為模組bbb的子模組來被呼叫的。在經過編譯預處理後,檔案bbb.v實際相當於下面的程式檔案bbb.v:

module aaa(a,b,out);

input a, b;

output out;

wire out;

assign out = a ^ b;

endmodule

module bbb( c, d, e, out);

input c, d, e;

output out;

wire out_a;

wire out;

aaa aaa(.a(c),.b(d),.out(out_a));

assign out= e & out_a;

endmodule

關於"檔案包含"處理的四點說明:

1) 乙個`include命令只能指定乙個被包含的檔案,如果要包含n個檔案,要用n個`include命令。注意下面的寫法是非法的`include"aaa.v""bbb.v"

2) `include命令可以出現在verilog hdl源程式的任何地方,被包含檔名可以是相對路徑名,也可以是絕對路徑名。例如:'include"parts/count.v"

3) 可以將多個`include命令寫在一行,在`include命令列,只可以出空格和注釋行。例如下面的寫法是合法的。

'include "fileb" 'include "filec" //including fileb and filec

4) 如果檔案1包含檔案2,而檔案2要用到檔案3的內容,則可以在檔案1用兩個`include命令分別包含檔案2和檔案3,而且檔案3應出現在檔案2之前。例如在下面的例子中,即在file1.v

中定義:

`include"file3.v"

`include"file2.v"

module test(a,b,out);

input[1:`size2] a, b;

output[1:`size2] out;

wire[1:`size2] out;

assign out= a+b;

endmodule

file2.v的內容為:

`define size2 `size1+1..

.

file3.v的內容為:

`define size1 4..

.

這樣,file1.v和file2.v都可以用到file3.v的內容。在file2.v中不必再用 `include "file3.v"了。

5) 在乙個被包含檔案中又可以包含另乙個被包含檔案,即檔案包含是可以巢狀的。例如

上面的問題也可以這樣處理。

它的作用和下圖的作用是相同的。

本文摘自夏宇聞老師的《verilog hdl教程》

by:冰鳳溪谷

在PHP中,include和require的區別

require和include的相同之處 都可以包括並執行指定檔案。不同之處 include 使用時,每次都要進行讀取和評估,require使用時,檔案處理一次。實際上,檔案內容替換require 語句 這就意味著如果可能執行多次的 則使用require 效率比較高。另外一方面,如果每次執行 時是讀...

include和 include的區別

區別在於 如果用了,則一定要引入命名空間,即 using namespace std 如果用了,則不能引入命名空間,否則會引起編譯錯誤,提示找不到命名空間.例程如下 情況一 使用和命名空間 include using namespace std int main 輸出 need to use nam...

include 與 include 的區別

在新的c 標準中,生成新標頭檔案的方法僅僅是將現有c 頭檔名中的 h 去掉。例如,變成了,變成了,等等。對於c標頭檔案,採用同樣的方法,但在每個名字前還要新增乙個c。所以c的變成了,變成了,等等。舊的c 標頭檔案是官方所反對使用的 即,明確列出不再支援 但舊的c標頭檔案則沒有 以保持對c的相容性 下...