所谓清晰,就是便于阅读与理解,如下HDL代码所描述的电路就是清晰的时序逻辑电路,对应计数器的功能:
always@( posedge clk )
beginif( rst )begincount <= 1'b0;endelsebegincount <= nextCount;endendassign nextCount = count + 1'b1;
虽然这个代码简单,但就是这样的代码能说明问题,带给了我一些启发。上述代码之所以清晰,就是把描述组合逻辑和纯时序逻辑的代码分隔开来,尤其是当代码所描述的功能稍微复杂一些的时候,这样更方便阅读和理解。
所谓的纯时序逻辑,其实就是对寄存器的行为进行描述。其相对于组合逻辑最大的不同就是敏感时钟边沿事件,可以是敏感上升沿也可以是敏感下降沿,这个根据实际需求决定,但是绝不可能是同时敏感时钟的两种边沿事件,这是由其所对应的触发器的结构和工作原理决定的,因为触发器这种硬件结构只有一个时钟输入端。
因此,类似如下的代码是无法综合的:
always@( posedge clk, negedge clk )
begina <= din;end
由于上述那个计数器的例子比较简单,所以组合逻辑和时序逻辑混写也无伤大雅。如下:
always@( posedge clk )
beginif( rst )begincount <= 1'b0;endelsebegincount <= count + 1'b1;endend
这个组合逻辑就藏身于赋值操作符号的右边。当组合逻辑比较简单时,这样做也无伤大雅,甚至能让代码更加的简洁。