verilog语法和C语言差别很大,记下笔记以免经常出错
2019-12-18
1.wire类型不能使用 = <=操作符赋值。
2.模块端口列表有input output inout 分别对应输入、输出、输入/输出双向端口
3.端口的类型只能是net线网型
4.编译指令 格式 '<keyword>,例如'define ,'ifdef,`timescale等
'define WIDTH 8;(错误,不能加“;”)
添加另一verilog源文件的方式 'include "source.v"(注意需要双引号)
5.需要缓存值使用 reg 类型
6.reg [31:0] a;//a为32比特值
7.reg [15:0] a[0:7];//a为16bit位宽长为8的数组
8.integer matrix[4:0][4:0];//5x5的整型数组 integer默认位宽32
9.是“先出后入”顺序库自带的门类型有:
wire OUT,IN1,IN2;
and a1(OUT,IN1,IN2);//与
nand nal(OUT,IN1,IN2);//与非门
or or1(OUT,IN1,IN2);//或
nor nor1(OUT,IN1,IN2);//或非
xor xor1(OUT,IN1,IN2)//异或
xnor xnor1(OUT,IN1,IN2);//同或
nand na2(OUT,IN1,IN2,IN3);//超过两个输入 三端与非门
10.与and/or门相反的,一个输入,多个输出("先出后入")的门类型(缓冲器/非门)有
buf not
基本实例有:
buf b1(OUT1,IN);
not n1(OUT1,IN);
buf b1_2out(OUT1,OUT2,IN);//输出端口数为2
not (OUT1,IN);//不给实例名的合法引用
11.四种带控制信号端口的buf/not门
图片摘自《VerilogHDL数字设计与综合》