第一天
逻辑值
0 | 低电平 | ||
1 | 高电平 | ||
z | 高阻态,无驱动 | ||
x | 未知逻辑电平 |
变量类型
wire [0:0] flag; //瞬态值,映射为物理连线
reg [7:0] cnt; //对某一时间点状态进行保持,映射为寄存器
参数类型
parameter CNT_MAX = 100; //可在模块中使用,也可在实例化中修改
localparam CNT_MAX = 100; //只能在模块中使用,不能实例化
常量
/*
格式:[换算为2进制后的位数]['][进制符][该进制下的数值]
如8'd171为八比特数,值为十进制的171
d 十进制 h 十六进制 o 八进制 b 二进制
如果直接写数字,则默认表示32bit十进制数
*/
归约、按位运算符
& | ①归约运算符&m 表示对m中所有位数字归约取与,结果为1bit ②按位运算符m&n 表示对m与n按位取与,要求mn位数相等,结果与m相等位数 | |||||
~& | 与非 | |||||
| | 或 | |||||
~| | 或非 | |||||
^ | 异或 | |||||
~^ | 同或 |
算术运算符
+ | 加 | |||||
- | 减 | |||||
* | 乘,一般不用 | |||||
/ | 除,一般不用 | |||||
% | 取模,用于测试文件 |
移位运算符
>> | 每位右移,空位补0 | |||||
<< | 每位左移,空位补0 |
关系运算符
> | 大于 | |||||
< | 小于 | |||||
>= | 大于等于 | |||||
<= | 小于等于 |
位拼接运算符、条件运算符
{ , , } | 位拼接运算符将不同数拼成一个 | |||||
?: | 条件运算符用于逻辑判断并赋值 |
优先级:
归约>算数>移位>关系>“==”、“!=”>按位>“&&”、"||">条件
设计流程:
项目规划——波形绘制——代码编写——代码编译——逻辑仿真——波形对比——绑定管脚——分析综合、布局布线——上板验证
项目工程文件:
工程文件夹
doc 文档资料:波形图、项目日志
prj 工程文件
rtl(design) 能生成硬件电路的可综合代码
sim(testbench、tb) 仿真文件
层次化设计:自底而上、自顶而下
latch产生的原因:
if无else
case列举不全且无default
组合逻辑中输出等于自身
阻塞赋值与非阻塞赋值
= | 阻塞赋值,执行时其他语句无法执行 可看作单步:计算并赋值 串行执行 右侧有变化立马发生变化 | ||||
<= | 非阻塞赋值,执行时其他语句可执行 可看作两步:计算、赋值 并行执行 只能用于initial和always块中,不能用于assign |
时序逻辑用非阻塞赋值
always在组合逻辑中用阻塞赋值,注意敏感列表要用电平触发
always中不要同时使用阻塞和非阻塞
用到latch时使用非阻塞
一个always最好只对一个变量进行赋值