FPGA设计心得(8)Verilog中的编译预处理语句

写在前面

相关博文
博客首页
注:学习交流使用!

正文

看稍微复杂一点的IP Core以及模块等 ,都会遇到大量的编译预处理语句,它和参数定义语句通常都是为了模块复用以及增强代码可读性等等。

`define 与localparam和parameter最大的区别就是它可以跨文件传递参数;parameter只能在模块间传递参数;而localparam只能在其所在的module中起作用,不能参与参数传递。

诸如以`开头的编译预处理语句,

如 `define等(你敢信,这个符号,我用markdown编辑不了,因为他也是markdown的一个语法符号!
它不是一般的语句,Verilog编译器会对其进行预处理,然后预处理的结果和源程序一起进行通常的编译处理。其作用范围从定义开始到文件结束。
下面谈几个常用的。

宏定义

格式:

`define 宏名 宏内容

如`define signal string
它的作用就是指定标识符signal替代字符串string。

有几点注意:

  • 在引用已定义的宏名时,必须在宏名前面加上符号`,表示该名字是一个经过宏定义的名字。
  • 宏定义是用一个宏名代替一个字符串,也就是做简单的置换,不做语法检查。预处理时照样带入,不论含义正确与否。只有编译已被宏展开后的源程序时才检查语法。
  • 宏定义不是Verilog语句,定义末尾一定不要加上分号,否则连带分号一起带入替换。
  • 宏定义后可以进行注释,注释语句不会被认为是宏内容。

例子:

// module name
`define CNT_MODULE_NAME vcnt

// counter type = [BINARY, GRAY, LFSR]
//`define CNT_TYPE_BINARY
`define CNT_TYPE_GRAY
//`define CNT_TYPE_LFSR

// q as output
`define CNT_Q
// for gray type counter optional binary output
`define CN
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值