zl程序教程

您现在的位置是:首页 >  其它

当前栏目

使用Systemverilog描述状态机

描述 状态机 SystemVerilog 使用
2023-09-14 09:10:02 时间

使用Systemverilog描述状态机

系统的状态必须保存在内部寄存器中。在SystemVerilog语言中,状态可以用枚举类型(enumerated type)表示。这种类型的可能值是状态名,而变量名列在一系列可能值的后面。例如:

enum{s0,s1,..} state;

在下面的代码中,有两个过程块。每个过程块都标有自己的名字。第一个标有SEO的过程块描述了一个状态机。该过程块等待时钟的正跳变沿的到来,或者等待复位信号的负跳变沿的到来。首先测试的是异步复位信号,如果复位信号的负跳变沿到来,则默认值G被赋值给状态变量state。否则,跳转到case语句分支,根据当前的状态值进人不同的分支。因此,case语句的每个分支等价于图6.9中两个状态中的一个状态及判断盒。在第一个分支中,测试是否有汽车到来(car为真/假),然后设置状态。若没有汽车到来(car=0),则状态保持不变(即仍旧为G)。将该过程块声明为always_ff块,因此期望该状态将映射到一个或几个由正跳变沿触发的触发器。其他状态用类似方法构造。

在第二个标有OP的过程块中,输出被设置为1。该过程块是一个与组合逻辑对应的 always_comb块。请注意在过程块的一开始就为start_timer和其他输出设置了默认值0。这个例子是很好的实践,因为这样写可以确保在综合时不会由于代码编写时的疏忽而产生锁存器。在过程块中再次用到case语句,该结构与ASM图相对应。在每个状态中,为无条件的输出赋值;有条件的赋值则跟在if条件语句后面。

module traffic_1 (
	output logic start_timer,major_green,mintor_green,
	input logic clock,n_reset,timed,car