Verilog HDL行为描述方式
出处:cq.mqm 发布于:2007-04-29 10:15:45
1) initial语句:此语句只执行。
2) always语句:此语句总是循环执行, 或者说此语句重复执行。
只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的初始化语句和always语句在0时刻并发执行。
下例为always语句对1位全加器电路建模的示例。
module FA_Seq (A, B, Cin, Sum, Cout);
input A, B, Cin;
output Sum, Cout;
reg Sum, Cout;
reg T1, T2, T3;
always
@ ( A or B or Cin ) begin
Sum = (A ^ B) ^ Cin;
T1 = A & Cin;
T2 = B & Cin;
T3 = A & B;
Cout = (T1 T2) T3;
end
endmodule
模块FA_Seq 有三个输入和两个输出。由于Sum、Cout、T1、T2和T3在always 语句中被赋值,它们被说明为 reg 类型(reg 是寄存器数据类型的一种)。always 语句中有一个与事件控制(紧跟在字符@ 后面的表达式)。相关联的顺序过程(begin-end对)。这意味着只要A、B或Cin 上发生事件,即A、B或Cin之一的值发生变化,顺序过程就执行。在顺序过程中的语句顺序执行,并且在顺序过程执行结束后被挂起。顺序过程执行完成后,always 语句再次等待A、B或Cin上发生的事件。
在顺序过程中出现的语句是过程赋值模块化的实例。模块化过程赋值在下一条语句执行前完成执行。过程赋值可以有一个可选的时延。
时延可以细分为两种类型:
1) 语句间时延: 这是时延语句执行的时延。
2) 语句内时延: 这是右边表达式数值计算与左边表达式赋值间的时延。
下面是语句间时延的示例:
Sum = (A ^ B) ^ Cin;
#4 T1 = A & Cin;
在第二条语句中的时延规定赋值延迟4个时间单位执行。就是说,在条语句执行后等待4个时间单位,然后执行第二条语句。下面是语句内时延的示例。
Sum = #3 (A^ B) ^ Cin;
这个赋值中的时延意味着首先计算右边表达式的值, 等待3个时间单位,然后赋值给Sum。
如果在过程赋值中未定义时延,缺省值为0时延,也就是说,赋值立即发生。这种形式以及在always 语句中指定语句的其他形式将在第8章中详细讨论。
下面是initial语句的示例:
`timescale 1ns / 1ns
module Test (Pop, Pid);
output Pop, Pid;
reg Pop, Pid;
initial
begin
Pop = 0; // 语句 1。
Pid = 0; // 语句 2。
Pop = #5 1; // 语句 3。
Pid = #3 1; // 语句 4。
Pop = #6 0; // 语句 5。
Pid = #2 0; // 语句 6。
end
endmodule
initial语句包含一个顺序过程。这一顺序过程在0 ns时开始执行,并且在顺序过程中所有语句全部执行完毕后, initial语句永远挂起。这一顺序过程包含带有定义语句内时延的分组过程赋值的实例。语句1和2在0 ns时执行。第三条语句也在0时刻执行,导致Pop 在第5 ns时被赋值。语句4在第5 ns执行,并且Pid 在第8 ns被赋值。同样,Pop在14 ns被赋值0,Pid在第16 ns被赋值0。第6条语句执行后,initial语句永远被挂起。
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- PLC 的三大通讯方式及应用场景2026/8/27 15:56:13
- 多工位打孔设备低成本改造:不换电机的 PLC 方案分享2026/8/26 15:19:18
- PLC 控制伺服电机的三大实现方式2026/8/18 15:41:11
- PLC 编程的技巧与最佳实践2026/8/4 15:45:09
- 电缆电容对 PLC 系统的影响及应对措施2026/7/7 15:45:59









