【verilog】verilog编译指令

1. verilog 编译指令

以反引号 ` 开始的某些标识符是 verilog 系统编译指令。

2. `define

在编译阶段,`define 用于文本替换,类似于 C 语言中的 #define 。

一旦 `define 指令被编译,其在整个编译过程种都会有效。

例如:在一个文件中定义

`degine DATA 64

那么在另一个文件种也可以直接使用 DATA。

例如:在另一个文件中

reg [DATA-1:0] a ;

3. `undef

`undef 用来取消之前的宏定义。

例如:

`define DATA 64

reg [DATA-1:0] a ;

`undef DATA

笔记

除此之外,还有条件编译指令。

  1. 格式 1
`ifdef 
	...
`elsif 
	...
`else
	...
`endif 

例如:

`ifdef A /// 如果定义了A,那么DATA等于8
	parameter DATA = 8 ;
`elsif B /// 如果定义了B,那么DATA等于16
	parameter DATA = 16 ;
`else  /// 否则,DATA等于32
	parameter DATA = 32 ;
`endif
  1. 格式 2
`ifdef
	...
`else
	...
`endif

用法和格式 1 类似。

  1. 格式 3
`ifndef
	...
`else
	...
`endif

例如:

`ifndef A /// 如果没有定义A,那么DATA=8
	parameter DATA = 8 ;
`else /// 否则,DATA=16
	parameter DATA = 16 ;
`endif

4. `include

使用 `include 可以在编译一个 verilog 文件时调用另一个 verilog 文件,类似于 C 语言中 #include 结构。

该指令通常用于将全局或共用的头文件包含在设计文件中。

例如:

module a(
...
);
...
endmodule
`include "./a.v"

module b(
...
);
...
endmodule

这样在编译 b.v 时,就会调用 a.v 的内容。

5. `timescale

在 verilog 模型中,时延有具体的单位时间表述,并用 `timescale 编译指令将时间单位与实际时间相关联。

该指令用于定义时延,仿真单位和精度。

格式

`timescale 【时间单位】/【时间精度】

`timesacle time_unit/time_precision

例如

`timescale 1ns/100ps

/// 时间精度和时间单位可以一样。但时间精度大小不能超过时间单位的大小
/// `timescale 100ps/1ns /// 不合法,

module a();

parameter PERIOD = 5 ;
reg [7:0] data ;

initial begin
	#1        data = 0 ; /// 1*1ns = 1ns, 1ns后data=0
	#5*PERIOD data = 1 ; /// 5*5ns = 25ns, 25ns后data=1
end


笔记

`timecasle 的时间精度会影响仿真时间的。

时间精度越小,仿真时占用的内存越多,实际使用的仿真时间越长。


6. 其它

除上面的 5 种编译指令,还有 `default_nettype`resetall`celldefine, `endcelldefine `unconnected_drive,`nounconnected_drive 等。

这些编译指令我在日常工作中几乎没有看到过,实际工作中很少用到,简单了解,知道有这些就好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值