微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 讨论:FSM中one-hot状态编码的问题!

讨论:FSM中one-hot状态编码的问题!

时间:10-02 整理:3721RD 点击:
我看资料上FSM的状态编码使用one-hot编码时,在写下一状态产生逻辑时,通常用的是这样一个语句:case(1'b1).我有些不明白case(1'b1)是什么意思呢?是遇到一个1位的1就执行case 语句吗?如果是那样的话,那么这里的case(1'b1)能不能换成case(cur_state)?
  还有一个问题就是假如这时cur_state是4'b0,而N或D是1'b1,那么case语句是不是就会去执行default语句?如果这样的话,会不会有潜在的危险?
部分代码:
always @(cur_state or N or D)
begin
next_state = 4'b0 ;
case(1'b1)
cur_state[Idle]:
if(N)
next_state[State5] = 1'b1 ;
else if(D)
next_state[State10] = 1'b1 ;
else
next_state[Idle] = 1'b1 ;
cur_state[State5]:
if(N)
next_state[State10] = 1'b1 ;
else if(D)
next_state[State15] = 1'b1 ;
else
next_state[State5] = 1'b1 ;
cur_state[State10]:
if(N || D)
next_state[State15] = 1'b1 ;
else
next_state[State10] = 1'b1 ;
cur_state[State15]:
next_state[Idle] = 1'b1 ;
default:
next_state[Idle] = 1'b1 ;
endcase
end

case(1)是指下面语句按顺序检查,如果那条是真就执行,如果下面还有真也就不执行了。就相当于ifelse。

case(1)
bb:
意思是if(bb==1)

thanks for share

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top