Verilog编译预处理

一、简介

编译预处理是Verilog HDL编译系统的一个组成部分。
Verilog HDL编译系统通常先对这些特殊的命令进行预处理,然后将预处理的结果和源程序一起在进行通常的编译处理。
为了和一般的语句相区别,这些预处理命令以符号 ` 开头
这些预处理命令的有效作用范围为定义命令之后到本文件结束或到其它命令定义替代该命令之处。

宏定义与parameter的区别
在这里插入图片描述

二、宏定义`define

一般形式

// 宏定义
`define 宏名 宏内容
// 使用宏
`宏名

宏名的有效范围为定义命令之后到原文件结束。
宏定义是用宏名代替一个字符串,也就是作简单的置换,不作语法检查,预处理时照样代入,不管含义是否正确。只有在编译已被宏展开后的源程序时才报错。
在进行宏定义时,可以引用已经定义的宏名,进行层层替换。

三、文件包含`include

文件包含处理是一个源文件可以将另一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。
Verilog语言提供了include命令用来实现文件包含的操作。

`include "文件名"

编译预处理”是Verilog HDL编译系统的一个组成部分,编译预处理语句以西文符号“‵ ”开头而不是单引号“’”。在编译时,编译系统先对编译预处理语句进行预处理,然后将处理结果和源程序一起进行编译[^1]。 常见的编译预处理语句如下: - **`define语句`:用于定义宏。宏名能够代表其意义,建议使用大写字母,可以在module外面和里面定义,但需要先定义才能引用,引用时也要先加上相应符号。编译时不会出错,且不需要写分号,如果加了分号,会连分号一起置换。在编译预处理时会将宏名替换为字符串,即宏展开。例如: ```verilog module test; reg a,b,c; wire out; `define aa a+b `define cc c+`aa //引用宏名`aa来定义宏cc assign out=`cc //经过宏展开后,assign语句为:assign out=c+a+b; .... endmodule ``` [^1][^3][^5] - **`include语句`:可以减少程序开发人员重复性的劳动。例如用`include`语句设计16位加法器: ```verilog //1'bit adder module adder (cout,sum,a,b,cin); parameter size = 1; input [size-1:0]a,b; //位宽是1 input cin; output sum; output cout; assign {cout,sum} = a + b + cin; //cout存进位的值,sum存低位的和,{cout,sum}是位拼接 endmodule `include "adder.v" module adder_16b (cout,sum,a,b,cin); output cout; parameter my_size = 16; output [my_size-1:0] sum; input [my_size-1:0] a,b; input cin; adder #(my_size) my_adder(cout,sum,a,b,cin); //对adder进行模块实例化,my_adder中的parameter变为my_size=16 endmodule ``` [^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

暴风雨中的白杨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值