|
|||||||||||
| 技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
状态机设计,选用了One-Hot State Mchine,F、G状态不是很理解 |
| 作者:海棠 栏目:EDA技术 |
原程序如下: //seq.v /*一个简单的状态机设计,功能是检测一个5位二进制序列"10010"。 考虑到序列重叠的可能,有限状态机共提供8个状态(包括初始状态IDLE)。 */ MODULE seq(x,clk,rst,z,state); input x,clk,rst; OUTPUT z; OUTPUT[2:0] state; reg[2:0] state; wire z; parameter IDLE='d0, A='d1, B='d2, C='d3, D='d4, E='d5, F='d6, G='d7; assign z = ( state==E && x==0 )? 1 : 0; //当x=0时,状态已变为E, //状态为D时,x仍为1。因此 //输出为1的条件为( state==E && x==0 )。 always @(posedge clk) if(!rst) begin state <= IDLE; //保证进入有效状态 end else casex(state) //要求检测的序列是‘10010’ IDLE : if(x==1) begin state <= A; end A: if(x==0) begin state <= B; end B: if(x==0) begin state <= C; end else begin state <= F; //为什么不让它直接跳回A状态??? end C: if(x==1) begin state <= D; end else begin state <= G; end D: if(x==0) begin state <= E; end else begin state <= A; end E: if(x==0) begin state <= C; end else begin state <= A; end //-------------------------- |
| 2楼: | >>参与讨论 |
| 作者: 海棠 于 2005/1/27 15:12:00 发布:
大家帮分析分析。 疑问在B、C状态的else语句那里,这样设计有什么好处? |
|
| 3楼: | >>参与讨论 |
| 作者: 水管工 于 2005/1/29 5:47:00 发布:
其实也没有什么特殊意义 一个可能是为了以后扩充 另外更重要的就是要把各种状态占满。一旦期间受到干扰,这可以保证一定时间后期间会自动回到正确的轨道上来。 由于是触发器结构,我不认为有什么抗干扰的好处 当然,如果牛人(或某些软件自动生成)可以看出这样的设计会减少逻辑门的占用那就不是我所能理解的了。给出真值表供参考 state[2] s1 s0 x OUTPUT S2 S1 S0 IDLE 0 0 0 0 IDLE 0 0 0 IDLE 0 0 0 1 A 0 0 1 A 0 0 1 0 B 0 1 0 A 0 0 1 1 A 0 0 1 B 0 1 0 0 C 0 1 1 B 0 1 0 1 F 1 1 0 C 0 1 1 0 G 1 1 1 C 0 1 1 1 D 1 0 0 D 1 0 0 0 E 1 0 1 D 1 0 0 1 A 0 0 1 E 1 0 1 0 C 0 1 1 E 1 0 1 1 A 0 0 1 F 1 1 0 0 B 0 1 0 F 1 1 0 1 A 0 0 1 G 1 1 1 0 G 1 1 1 G 1 1 1 1 F 1 1 0 |
|
| 4楼: | >>参与讨论 |
| 作者: caiyanan 于 2005/3/5 18:49:00 发布:
同样迷惑 昨天看这个例子的时候同样迷惑了半天,自己写的话怎么也想不到去增加这两个状态。楼上说占满状态,受到干扰时可以自动回到正确的轨道上来,肯定是有这个原因的,但是就算没有这两个状态,也还有default状态啊?对了楼主,这个FSM采用的不是One-Hot State Mchine吧? |
|
|
|
Copyright © 1998-2006 www.j71x6.cn 浙ICP证030469号 |