VerilogHDL功能总述
是一种行为描述和结构描述语言,是对实际电路不同级别的抽象。
系统级:实现设计模块外部性能。
算法级:实现设计算法。
寄存器传输级(RTL-register transfer level):描述数据在寄存器之间流动,处理流动数据。(明确对应逻辑电路)
逻辑、门级和电路开关级的设计。
对于特大型(千万门级)的系统级设计,则VHDL更优。
- 概念
软核:Verilog代码和netlist网表(有功能描述但不对应工艺库)。
硬核:带有版图设计。
- 设计流程Top-Down
Verilog程序-(IC前端)-Netlist-(IC后端)-版图
设计文件-功能仿真-综合-布局布线-投片生成
Verilog语法
区分大小写。
- 数据类型:reg/wire
reg型:寄存器型,有保持功能,需声明。
wire型:导线型,缺省。 - 阻塞/非阻塞赋值:阻塞=,和非阻塞赋值语句<=
(1)在时序逻辑电路中使用非阻塞赋值<=。
在块结束后才完成赋值操作。
(2)在组合逻辑电路中使用阻塞赋值=。
此变量的值在在赋值语句执行完后就立即改变。
(3)在assign语句中必须使用**阻塞赋值=**语句。
- assign语句=
*时序逻辑<=/边沿触发/调用寄存器
*组合逻辑=/电平触发
- 执行顺序:并行
结束——时序逻辑:停掉时钟;组合逻辑:停电 - 数据选择器
Module MUX(out,in0,in1,sel); /*模块名(输入输出端口)*/
parameter N=8;/*参数:表示数据位数*/
output[N:1] out;
input[N:1] in0,in1;
input sel;
/*描述外部特性:输入输出端口描述*/
assign out=sel?in1:in0;
/*描述内部特性:逻辑功能描述*/
endmodule
-
4位二进制加法计数器
-
常量
1>数字:<位宽>’<进制><数值>
二进制b,八进制o,十六进制h,十进制d。
2>*表示所有信号改变时触发
3>在电平触发中,if else如果没有else/case里如果没有default,会因组合逻辑而自动生成锁存器使数值在否时保持不变,但锁存器不能抵御毛刺干扰,尽量不要。
边沿触发生成寄存器的时序逻辑。
电平触发条件完整,生成组合逻辑。
电平触发条件不完整,生成锁存器的时序逻辑。
4>语法要点
always里面赋值左边必须申明成reg
assign表达式左边必须申明成wire
申明reg不一定得到寄存器,未声明reg有可能得到锁存器。
5>coding要点
如果是边沿触发的逻辑,比如always@(posedge clk),里面一律使用<=赋值。
如果是电平触发的逻辑,一律使用=赋值,case是电平触发。
逻辑简单用assign语句,逻辑复杂用always语句。
分支条件写完整,防止出现锁存器。