FPGA学习笔记(3)——verilog基础入门以及组合逻辑电路
test bench的编写
对于简单的组合逻辑电路的仿真,更像是编写一个没有输入输出的verilog文件来产生一些激励源,其中,会用到一些系统函数比如打印信息使用的$monitor,
d
i
s
p
l
e
r
,还有查看时间的
displer,还有查看时间的
displer,还有查看时间的time。
例如下面的运行快,在每一次
begin
$timeformat(-9, 0, "ns", 6); //-9表示时间单位为纳秒,0表示打印小数点位为0,加上时间单位“ns”字符串,打印的最小字符数目为6。
$monitor("@time = %t: in_1=%b in_2=%b ci=%b sum=%b co=%b", $time, in_1, in_2, ci, sum, co);
end
Latch 避免锁存器的产生
在同步电路中,是不希望产生Latch的,会让静态逻辑分析变得复杂。
产生latch的情况:
- 组合逻辑中 if 语句没有 else;
- 组合逻辑中 case 的条件不能够完全列举时且不写 default;
- 组合逻辑中输出变量赋值给自己。
博主的理解是,在以上每种环境下情况下,若存在一些未定义或者关注的情况中,变量值没有改变,那么就会默认保持,为了完成保持的功能,就会产生latch完成这一目的。
timescale 中单位和精度的影响
这里直接参考这位博主的文章,能够加深对$time的函数理解。
Verilog的时间系统任务
层次化设计
从上到下的设计中,可以调用子模块来构成更大的模块,其中,可以通过wire语句定义连线,还要注意整个项目文件的头模块实体是哪个。