[英]How to count in system verilog?
在 System Verilog 中,我有多个状态,其中某些状态被使用了两次,我怎么知道这是我第一次经过这个 state 还是第二次?
例如,如果这是我第二次想结束流程并重新开始。 如果是第一次再做一次。
任何想法都会有所帮助
如果您只需要两次执行某些状态,请将它们设为两个不同的状态。 您可以将常用逻辑部分放在 function 中。
always_ff @(posedge clk or posedge reset)
if (reset) state <= IDLE else
case (STATE)
IDLE: if (start) STATE <= ST1;
ST1: begin STATE <= ST2; fST(); end
ST2: begin STATE <= IDLE; fST(); end
default: STATE <= IDLE;
endcase
function void fST;
// stuff that needs to be done
end function
如果您需要两次以上,您可以放入柜台
always_ff @(posedge clk or posedge reset)
if (reset) STATE <= IDLE else
case (STATE)
IDLE: if (start) begin STATE <= ST; counter <=0; end
ST: begin
if (counter > N) STATE <= IDLE;
counter <= counter + 1;
// stuff that needs to be done
end
default: STATE <= IDLE;
endcase
如果您将 FSM 分成always_comb
和always_ff
,您将需要下一个 state 和下一个计数器变量。
always_ff @(posedge clk or posedge reset)
if (reset) STATE <= IDLE else
begin
STATE <= NXSTATE;
COUNTER <= NXCOUNTER;
end
always_comb
case (STATE)
IDLE: if (start) begin NXSTATE = ST; COUNTER <=0; end
ST: begin
if (COUNTER > N) NXSTATE = IDLE;
NXCOUNTER = NXCOUNTER + 1;
// stuff that needs to be done
end
default: NXSTATE = IDLE;
endcase
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.