Verilog HDL数字设计与综合 笔记(2)

来源:互联网 发布:网络悬疑科幻小说 编辑:程序博客网 时间:2024/04/30 15:13
第7章 行为级建模
1.在Verilog中有两种结构化的过程语句:initial语句和always语句。它们是行为建模的两种基本语句,其他的所有行为语句只能出现在过程语句里,并且这两种语句不可以嵌套使用
2.同时进行端口/数据声明和初始化                     如reg clock=0;
3.在对寄存器类型变量进行过程赋值时,如果赋值符两侧的位宽不相等,则采用以下原则:
(1)如果右侧表达式的位宽较宽,则将保留从最低位开始的右侧值,把超过左侧位宽的高位丢弃
         (2)如果左侧位宽大于右侧位宽,则不足的高位补0。
4..如果在一个begin-end 块中使用了阻塞赋值语句,那么这个块语句表现的是串行行为
5.非阻塞语句语序赋值调度。在一个过程语句中非阻塞语句是并发进行的。不要在同一个always中混合使用阻塞和非阻塞赋值语句
6.非阻塞赋值语句的应用
非阻塞赋值可以被用来为常见的硬件电路行为建立模型,例如某一事情发生后,多个数据并发传输的行为。
使用非阻塞赋值来避免竞争

时序控制:
 Verilog 提供了三种时序控制方法:基于延时的时序控制,基于事件的时序控制和电平敏感的时序控制。
2.基于事件的时序控制
 在Verilog中,事件是指某一个寄存器或线网变量的值发生变化,事件可以用来触发声明语句或块语句的执行。Verilog提供4种类型的事件控制:常规事件控制、命名事件控制、或事件控制、电平敏感时序控制
(1)常规事件控制
事件控制使用符号@来说明,语句继续执行的条件是信号的值发生变化,发生正向跳变或负向跳变。posedge 指正向跳变,negedge 指负向跳变

(2)命名事件控制
用户可以在程序中声明 event(事件)类型的变量,触发该变量,并且识别该事件是否发生。命名事件由关键字event 声明,它不能保存任何值,事件触发用符号->表示,判断事件是否发生用符号@来识别

(3)or事件控制
多个信号或者事件中发生的任意一个变化都能够触发语句或语句块的执行。关键词or 也可以用 ,来代替
@(*)和@*他们都表示对其后语句块中的所有输入变量的变化都是敏感的。
(4)电平敏感时序控制
Verilog用关键字wait来表示等待电平敏感的条件为真。
always 
wait (count_enable) #20 count=count+1;
     多路分支
                   

循环语句
Verilog中有四种类型的循环语句:while for repeat forever 循环语句只能在always 和initial块中使用
 并行块
并行块有fork join 声明


0 0