逻辑值
0:逻辑低电平,条件为假
1:逻辑高电平,条件为真
z: 高阻态,无驱动
x:未知逻辑电平
关键字
关键字也叫保留字,一般是小写
2.1 module
module //模块开始
example //后面的模块名与文件名是一致的
endmodule //模块的结束
2.2 输入输出信号
//输入输出信号
input //输入信号
output //输出信号
inout //输入输出信号
2.3 变量
//变量
//线网型变量
wire //直接的连接,映射成一条真实存在的物理连线
//寄存器型变量
reg //对某一时间点进行状态保持的作用,映射成一条真实存在的物理寄存器
2.4 参数
//参数
parameter //在顶层文件进行实例化,对模块中的参数进行修改哦
localparam //只能在模块内部使用,不能进行实例化
2.5 变量
//常量
//基数表示法
//格式:【换算为二进制后位宽的总长度】【'】【数值进制符号】【与数值进制符号对应的数值】
/*【数值进制符号】:
【h】表示十六进制
【o】 表示八进制
【b】 表示二进制
*/
//当总位宽大于实际位宽,则自动在左边补0,总位宽小于实际位宽,则自动截断左边超出的位数
//若直接写参数,则表示对应的十进制数
2.6 赋值
//赋值方式
//阻塞赋值,顺序执行
=
//非阻塞赋值,并序执行
<=
2.7 always语句
//always语句
/*
always(posedge sys_clk or negedge sys_rst n)
if(sys_rst_n==1'b0)
cnt <= 8'd0;
else if(cnt == cnt MAX)
cnt <= cnt +8'd1;
else
cnt <=cnt + 8'dl;
*/
2.8 assign语句
//assign语句
assign po_flag = (cnt == cnt_MaX) ?1'b1:1'b0;
2.9 运算符
2.9.1 算数运算符
//算术运算符
+ //:加法,如assign c = a +b
- //
* //
/ //
% //一般用在测试文件种
2.9.2 规约运算符、按位运算符
//规约运算符、按位运算符
//&做一元运算符的时候,表示归约与,&m是将m的每个比特与n的相应比特相与
//&做二元运算符的时候,表示按位与,m&n是将m的每个比特相与,在运算的过程中要保证m和n的比特数相等,最后的结果和m(n)的比特数相同
2.9.3 逻辑运算符
&& //表示逻辑与
|| //表示逻辑或
2.9.4 关系运算符
< //小于
> //大于
>= //大于等于
<= //小于等于
关系运算符一般在条件判断时使用
2.9.5 移位运算符
移位运算是二元运算符,左移符号为"<<“,右移符号为”>>",以为将运算符左边的操作数左移或者右移指定的位数,用0补充空位
2.9.6 位拼接运算符
位拼接运算符与由一对花括号加逗号组成: {,},拼接的不同数据之间用","隔开
2.9.7 条件运算符
? :
2.9.8 优先级
总的优先级关系是:规约运算符>算数运算符>移位运算符>关系运算符>”==“
2.10 if-else 条件分支语句
if(条件表达式)
语句或者语句块
2.11 case 分支控制语句
case(控制表达式)
<分支语句1> :语句块1;
<分支语句1> :语句块1;
<分支语句1> :语句块1;
<分支语句1> :语句块1;
...
default :语句块;
endcase
系统函数
3.1 timescale
timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度
-
时间单位和时间精度由1、10和100及单位s、ms、us、ns、ps 、fs组成
-
时间单位:定义仿真过程所有与时间有关的单位
-
仿真中使用 "#数字"表示演示相应时间单位的时间
-
时间精度:决定时间相关量的精度及仿真显示的最小刻度
timescale 1ns/10ps 精度0.01,#10.11表示延时10110ps
注意:时间单位不能比时间精度小
3.2常用的函数
函数 | 作用 |
---|---|
$display | 打印信息,自动换行 |
$write | 打印信息 |
$strobe | 打印信息,自动换行,最后执行 |
$monitor | 监测变量 |
$stop | 暂停仿真 |
$finish | 结束仿真 |
$time | 时间函数 |
$random | 随机函数 |
$readmemb | 读文件函数 |
3.2.1 display
display用于输出、打印信息
格式为:
$display ("%b+%b-%d",a,b,c);
//格式 "%b+%b-%d"格式控制,未指定默认十进制
%h | %H //以十六进制输出
%d | %D //以十进制输出
%o | %O //以八进制输出
%b | %B //以二进制输出
3.2.2 write
write用于输出、打印信息
write必须使用 "\n"换行符进行换行
格式为:
$write ("%b+%b-%d",a,b,c);
//格式 "%b+%b-%d"格式控制,未指定默认十进制
%h | %H //以十六进制输出
%d | %D //以十进制输出
%o | %O //以八进制输出
%b | %B //以二进制输出
3.2.3 strobe
strobe用于输出、打印信息,write必须使用 "\n"换行符进行换行
格式为:
$strobe ("%b+%b-%d",a,b,c);
//格式 "%b+%b-%d"格式控制,未指定默认十进制
%h | %H //以十六进制输出
%d | %D //以十进制输出
%o | %O //以八进制输出
%b | %B //以二进制输出
3.2.3 monitor
monitor用于持续监测变量
格式为:
$monitor ("%b+%b-%d",a,b,c);
//格式 "%b+%b-%d"格式控制,未指定默认十进制
//monitor监测的变量中任意一个发生了变化,monitor执行一次
%h | %H //以十六进制输出
%d | %D //以十进制输出
%o | %O //以八进制输出
%b | %B //以二进制输出
3.2.3 readmemb
readmemb用于读二进制文件函数,readmemh用于读取十六进制文件函数
格式为:
$readmemb("<数据文件名>",<存储器名>);
$readmemh("<数据文件名>",<存储器名>);