参考资料:北大verilog课件,PPT格式
从PPT直接拷贝的,所以格式有些凌乱,但瑕不掩瑜!
•非阻塞(non-blocking) 赋值语句:
always @(posedge clk)
begin
b <= a ;
c <= b;
end
注解:b、c的值在下一个时钟上升延之前变化;
•阻塞(blocking) 赋值语句:
always @(posedge clk)
begin
b = a ;
c = b;
end
•不阻塞(non-blocking) 赋值语句 ( b<= a):
- 块内的赋值语句同时赋值;
- b 的值被赋成新值 a 的操作, 是与块内其他
赋值语句同时完成的;
- 建议在可综合风格的模块中使用不阻塞赋值。
•阻塞(blocking) 赋值语句 ( b = a):
- 完成该赋值语句后才能做下一句的操作;
- b 的值立刻被赋成新值 a;
- 硬件没有对应的电路,因而综合结果未知。
- if-else一顶要配套使用,否则else对应的条件在生成电路中用一个锁存器保存。
- always语句的电平敏感信号要完整,否则漏掉的那个电平也会生成锁存器。
- 同样道理,case不能缺少default;
•Verilog 语法支持多层次多模块设计:
- 用 `include 宏指令可以在一个模块中包含多个模
块;
- 在一个模块中可以用实例调用别的模块中定义的
电路结构,构成多层次模块;
- 在一个模块中可以用多个任务和函数来表 达复杂
的状态机和结构;
- 一个设计项目往往由一个顶层测试模块和多个可
综合模块和若干个外围接口模块构成。
Verilog测试模块结构:
`timescale 1ns/1ns
`include 可综合模块.v . . . .
`include 外围电路.v . . . .
`include 激励信号.v . . . .
module top;
wire 连线定义 . . . .
Reg 初试化块中寄存器定义 . . . .
initial begin
定义波形记录、输入数据文件、记录输出文件 、
监视重要信号、记录重要时刻、设置仿真时间等。
end
信号模块 xh1( .clock( clk), .reset(rst), .ack(ackn) . . . . .);
. . . . .
可综合模块 mysj1(. clock(clk), reset(rst),.ack(ackn) . . .);
. . . . .
外围模块 ram1(.read(rd), .write(wrt), .data(databus) . . .);
. . . . .
endmodule
•常用的综合工具:
- Synplify
- Exemplar
- Synopsys Express
- Synopsys Designer
•常用的仿真工具:
- Verilog -XL
- NC -Verilog
- ModelSim
- VeriBest
- ViewLogic
net类的类型(线网)
•wire类型是最常用的类型,只有连接功能。
•wire和tri类型有相同的功能。用户可根据需要将线网定义为wire或tri以提高可读性。例如,可以用tri类型表示一个net有多个驱动源。或者将一个net声明为tri以指示这个net可以是高阻态Z(hign-impedance)。可推广至wand和triand、wor和trior
•wand、wor有线逻辑功能;与wire的区别见下页的表。
•trireg类型很象wire类型,但trireg类型在没有驱动时保持以前的值。这个值的强度随时间减弱。
`default_nettype <nettype>
nettype不能是supply1和supply0。
信号类型确定方法总结如下:
•信号可以分为端口信号和内部信号。出现在端口列表中的信号是端口信号,其它的信号为内部信号。
•对于端口信号,输入端口只能是net类型。输出端口可以是net类型,也可以是register类型。若输出端口在过程块中赋值则为register类型;若在过程块外赋值(包括实例化语句),则为net类型。
•内部信号类型与输出端口相同,可以是net或register类型。判断方法也与输出端口相同。若在过程块中赋值,则为register类型;若在过程块外赋值,则为net类型。
•若信号既需要在过程块中赋值,又需要在过程块外赋值。这种情况是有可能出现的,如决断信号。这时需要一个中间信号转换。
下面所列是常出的错误及相应的错误信息(error message)
•用过程语句给一个net类型的或忘记声明类型的信号赋值。
信息:illegal …… assignment.
•将实例的输出连接到声明为register类型的信号上。
信息:<name> has illegal output port specification.
•将模块的输入信号声明为register类型。
信息:incompatible declaration, <signal name> ……