常用的編譯預處理命令

2021-08-19 01:40:36 字數 2335 閱讀 6876

在verilog預言中,為了和一般的語句相區別,這些預處理命令以符號"`"開頭(位於主鍵盤左上角,注意這個符號不同於單引號『)這些預處理命令的有效作用範圍為定義命令之後到本檔案結束或到其他命令替代該命令之處,verilog hdl提供了很多預編譯命令:

`accelerate, `autoexpand_vectornets, `celldefine, `default_nettype, `define, `else, `endif, `timescale.等等

在這篇部落格裡我打算對常用的 `define `include `timescale 進行介紹,其餘的有需要可以查閱相關資料。

1,巨集定義 `define:

用乙個指定的識別符號(即名字)來代表乙個字串,它的一般形式為:

`define 識別符號(巨集名)字串(巨集內容)

如:     `define signal string

它的作用是指定用識別符號signal 來代替string這個字串,在編譯預處理時,把程式中在該命令以後的signal都換成string,這種方法使使用者能以乙個簡單的名字代替乙個長的字串,也可以用有意義的名字來代替沒有含義的數字和符號。因此把這個識別符號(名字)稱為「

巨集名」,在編譯預處理時將巨集名替換成字串的過程稱為「巨集展開」。`define是巨集定義命令。

example1:

module test;

reg a, b, c, d, e, out ;

`define expression  a+b+c+d;

assign out = `expression + e;

.......

endmodule

2, "檔案包含" 處理 `include

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

`include 「檔名」

「檔案包含」命令是很有用的,可以節省程式設計人員的重複勞動;可以將一些常用的巨集定義命令或任務(task)組成乙個檔案,然後用`include 命令將這些巨集定義包含到自己所寫的原始檔中,相當於工業上的標準原件來使用。

example2:

(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

3,時間尺度`timescale

`timescale 命令用來說明

跟在該命令後的模組的時間單位和時間精度,使用`timescale命令可以在同乙個設計裡包含採用了不同的時間單位的模組。例如,乙個設計中包含兩個模組,其中乙個模組的時間延遲單位為納秒(ns),另乙個模組的時間延遲單位為皮秒(ps),eda工具仍然可以對這個設計進行**測試。

`timescale 命令的格式如下:

`timescale 《時間單位》/《時間精度》

example3:

`timescale 10ns/1ns

module test ;

reg set ;

parameter d=1.55;

initial

begin

#d set =0;

#d set =1;

endendmodule

在這個例子中,`timescale命令定義了模組的時間單位為10ns,時間精度為1ns,因此在模組test中,所有的時間值應為10ns的整數倍,且以1ns為時間精度。這樣經過取整操作,存在引數d中的延遲時間實際是16ns(即1.6*10ns)。意味著在**時刻為16ns時暫存器set被賦值0;在**時刻為32ns時暫存器set被賦值1。

值得注意的是:

(1)根據時間精度,引數d的值被從1.55取整為1.6.

(2)因為時間單位是10ns,時間精度是1ns,所以延遲時間#d作為時間單位整數倍為16ns.

C 中的編譯預處理命令

c 中可以寫一些共編譯程式使用的命令 編譯預處理命令,這些命令並不是c 程式所要完成的功能,而是對於編譯過程給出指導,其功能有編譯預處理程式來完成。c 的編譯預處理命令主要有 檔案包含命令 include 巨集定義 define 以及條件編譯命令。下面分別對其做介紹 檔案包含命令 include 在...

編譯預處理

所謂編譯預處理,就是在c源程式的編譯之前,由編譯預處理程式對這些編譯預處理命令進行處理的過程。最常見的就是常量的替換。編譯預處理按功能可以分為巨集定義,檔案包含和條件編譯三類。編譯預處理命令以 開頭,下面進行詳細說明 一.巨集定義與符號常量 1.無參巨集定義 define 識別符號 字串 1 巨集名...

編譯預處理

1.巨集定義指令 1 定義變數與命令 避免幻數 在巨集定義命名時,盡量能清楚的表明功能,大寫 不能以 開頭易與內建巨集衝突 2 定義巨集函式 define max a,b a b a b int num max 6,5 6 5 6 5 用編譯時間換記憶體空間的是巨集函式 用記憶體空間換執行空間的是內...