前言
视频语法学习:B站链接
笔记原地址:https://github.com/Tan-YiFan/DigitalLogic-Autumn2020/tree/syntax/syntax网络不好,可能打不开。
预编译命令
C语言中的部分预编译命令:
#include <stdio.h>
#ifndef __SHARE_H
#define __SHARE_H
#endif
#define N 1000000 + 3
// int a[N];
有了预编译命令,就可以用利用头文件,提升代码易读性。
sv中的预编译命令,和c语言基本一致(c用#号),用`(反引号)开头:
`include "mips.svh" // sv头文件后缀为svh
// vivado把同一project的所有文件视为同一目录下,故include时无需加目录
`ifndef __SHARE_SVH
`define __SHARE_SVH
`endif
`define LINES 0x10
logic a[`LINES-1:0]; // 使用宏时,也需要以`开头
预编译命令可以达到以下效果:
-
配置一些参数。类似于parameter语句。
-
根据不同的参数,生成不同的电路。不同于mux。
generate if语句的粒度为电路语句。而`ifdef之类的预编译命令可以是任意粒度的。
assign a = b + c
#ifdef D_INSIDE
+ d
#endif
;
generate if (D_INSIDE) begin
assign a = b + c + d;//两个加法器
end else begin
assign a = b + c;//一个加法器
end
- 使用头文件。类似于package语句。
- 使用宏来封装一些功能。部分情况下可用function语句代替。