- 数据类型
- 数字表示
- 逻辑值
- if
- case
- 描述风格
数据类型
线网类 net类
- 不需要保存
- 连续赋值目标或者门原语的输出
- 仿真时不需要分配内存空间
变量类 variable类
- 需要保存
- 过程赋值的赋值目标
- 仿真时需要分配内存空间
如何判断使用net还是variable型
1.
- 连续赋值、门原语、例化语句 net型
#连续赋值语句
assign d=a&b;
assign e=d|c;
#门原语
and(d,a,b);
or(e,d,c);
#以上两种
#d e 必须定义为net型
- 过程赋值 variable型
#过程赋值语句
always @(a,b,d,c)
begin
d=a&b;
e=d|c;
end
#d e 必须定义为variable型的
2.
- input inout 必须是 net型
- output 都可以,取决于如果对其进行赋值(详见1)
数字表示
- 无符号数表示方法:
位宽' 进制 数字
eg.
2' b00 (00)2
5' d8 (01000)2
- 有符号数表示方法:
位宽' sb 数字
按照补码表示,第一位是符号位
eg.
8' sb10111011 (-69)10
如果是无符号则:8' b10111011 (187)10
逻辑值
1:逻辑1,高电平,数字1
0:逻辑0,低电平,数字0
x:不确定
z:高阻态
if语句
#1
if (condition) statement;
#2
if (condition) statement1;
else statement2;
#3
if (condition1) statement1;
else if(condition2) statement2;
else if(condition3) statement3;
#4
if (condition1) statement1;
else if(condition2) statement2;
else if(condition3) statement3;
else statement4;
用if设计组合电路时,如果条件不完整会综合出寄存器
完整条件的方法:
1.else
always @(a,b)
if(sel) Q=a;
else Q=b;
2.设置初值
always @(a,b)
Q=a;
if(!sel) Q=b;
if()内 表达式,非0即为1
()表达式的结果位数与操作数一致,不一致裁掉前位
case语句
case(表达式)
值1: 语句1;
值2: 语句2;
值3: 语句3;
...
#default这句有没有都可以
default: 语句;
endcase
case()里面表达式的值=值1,则执行语句1
如果和以上所有值都不一样,就执行default后面的语句
描述风格
结构化描述(门级描述)
全部用门原语和底层模块调用
数据流级描述
全部用assign语句
行为级描述
全部用always语句(if case)
RTL级描述
数据流+行为