Verilog HDL(4)行为级建模
前言:在当今数字电路中同步时序电路为主。如果采用数据流模式+assign来描述电路中,赋值左边类型一定是wire类型,而在过程语句中无论描述组合电路还是时序电路,initial和always赋值语句左边信号一定定义为reg类型。总的来说,reg用于时序电路,wire用于组合电路,但initial和always在描述组合电路时也要用reg类型。
3.2.2语句块
begin-end:串行语句,在语句块内顺序执行,可综合电路。它的延迟时间是相对于前一个语句。
fork-join:并行语句,在语句块中同时进行,用于仿真和测试。延迟是相对于程序流程控制进入到语句块内的仿真时间。
3.2.3过程赋值语句
分为阻塞性和非阻塞性
阻塞赋值的操作符号“=”
变量=表达式,用在begin-end中
非阻塞性 ,操作符号“<=”
(1)在语句块中实际是并行语句
(2)在计算时,计算右端值等到延迟时间结束时,将计算值赋给左边变量。
思考一下如何用上面的阻塞性语句来实现非阻塞性语句
流水线,下面这张图很关键
这张图可以总结所有数字电路都可以看出是时序电路和组合电路构成,时序电路可以看成是一个寄存器用来存储当前状态。又可以根据三个方程来表示,输出方程,状态方程,状态转移方程。
具体表示为:寄存器→组合电路→寄存器。然而这样组成的电路延迟很大,τ=rc,c为负载,负载越多延迟越大,所以将中间的组合电路有分为寄存器→组合电路→寄存器,这样以此类=类推就可以减小τ了
重要总结
在verilog中,只有在行为级建模过程中串行语句块中使用阻塞语句才是串行执行,否则全是并行执行的。
3.2.4过程连续赋值语句(不可综合)
简单介绍
assign,deassign,force(强制),relase(释放)
优先级force优先于前两者
过程连续赋值语句常常出现在非常多代码的项目中用于强制实现某一结果,作为初学者一般接触不到,