Verilog 的`include和C語言的include用法是一樣一樣的,要說區別可能就在於那個點吧。
include一般就是包含一個文件,對於Verilog這個文件里的內容無非是一些參數定義,所以
這里再提幾個關鍵字:`ifdef `define `endif(他們都帶個點,呵呵)。
他們聯合起來使用,確實能讓你的程序多樣化,就拿彬哥VGA程序說事吧。
首先,你可以新建一個.h文件(可以直接新建一個TXT,讓后將后綴換成.h)其實這個后綴
沒所謂,.v也是可以的,我覺得,寫成.h更能體現出這個文件的意義。
lcd_para.h中內容如下:
// 640 * 480
`ifdef VGA_640_480_60FPS_25MHz
`define H_FRONT 11'd16
`define H_SYNC 11'd96
`define H_BACK 11'd48
`define H_DISP 11'd640
`define H_TOTAL 11'd800
`define V_FRONT 11'd10
`define V_SYNC 11'd2
`define V_BACK 11'd33
`define V_DISP 11'd480
`define V_TOTAL 11'd525
`endif
//---------------------------------
// 800 * 600
`ifdef VGA_800_600_72FPS_50MHz
`define H_FRONT 11'd56
`define H_SYNC 11'd120
`define H_BACK 11'd64
`define H_DISP 11'd800
`define H_TOTAL 11'd1040
`define V_FRONT 11'd37
`define V_SYNC 11'd6
`define V_BACK 11'd23
`define V_DISP 11'd600
`define V_TOTAL 11'd666
`endif
//---------------------------------
`define H_Start (`H_SYNC + `H_BACK)
`define H_END (`H_SYNC + `H_BACK + `H_DISP)
`define V_Start (`V_SYNC + `V_BACK)
`define V_END (`V_SYNC + `V_BACK + `V_DISP)
這里為VGA定義了兩種分辨率,通過
`define VGA_800_600_60MHz VGA_640_480_60FPS_25MHz 或
`define VGA_800_600_72FPS_50MHz
來覺得使用哪種分辨率。
比如,我的xxx.v文件想調用lcd_para.h,xxx.v我可以寫到:
`define VGA_800_600_60MHz //這句要放在"lcd_para.v"的上面,不然編譯不通過
`include "lcd_para.h"
那么xxx.v文件中就可以用lcd_para.h中的參數了,且對應是VGA_800_600_60MHz下
的參數。
其次`include "lcd_para.h" 這個路徑也有一點講究,xxx.v作為引用lcd_para.h的文件
它和lcd_para.h在同一文件夾下才能怎么寫,就是相對路徑一說了。也就是以xxx.v
為當前路徑去引索lcd_para.h文件的位子。所以如果他們不再一個文件夾那么請寫出
更詳細(正確)的路徑。順便說一句,lcd_para.h添不添加到工程是無所謂的,只要路徑
對了即可,當然我還是建立添加到工程,且和.v文件放在同一文件夾下,以方便觀察和管理。
