话说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或
`defineVGA_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文件放在同一文件夹下,以方便观察和管理。