集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1491|回复: 2

关于状态机

[复制链接]
wolfson 发表于 2011-5-11 13:32:46 | 显示全部楼层 |阅读模式
下面是三段状态机的典型描述方式
//第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器
always @ (posedge clk or negedge rst_n)   //异步复位
if(!rst_n)
current_state <= IDLE;
else
current_state <= next_state;//注意,使用的是非阻塞赋值

//第二个进程,组合逻辑always模块,描述状态转移条件判断或者状态转移规律
always @ (current_state)    //电平触发
begin
next_state = x;   //要初始化,使得系统复位后能进入正确的状态
case(current_state)
S1: if(...)
next_state = S2;   //阻塞赋值
...
endcase
end

//第三个进程,同步时序always模块,格式化描述次态寄存器输出
always @ (posedge clk or negedge rst_n)
...//初始化
case(next_state)
S1:
out1 <= 1'b1;   //注意是非阻塞逻辑
S2:
out2 <= 1'b1;
default:...    //default的作用是免除综合工具综合出锁存器。
endcase
end

问题:
在电路板上电后一端时间内,复位信号rst_n和clk信号都有效。三个always语句都是并行执行的。
在系统clk的第一个周期内:
          a、  rst_n是有效,会导致第一个和第三个always语句进入各自的初始化语句中。
          b、  对于第二个always语句:
                current_state 这个变量,在系统clk 第一个周期内,是一个什么样的值。该always语句如何执行?
至芯兴洪 发表于 2011-5-11 21:06:00 | 显示全部楼层
current_state 难道不等于 idle的参数值吗?
jansan 发表于 2011-5-12 17:09:54 | 显示全部楼层
支持楼上,此时的状态应该是IDLE.
此处的语句可以省去第三个always @ (posedge clk or negedge rst_n)
寄存器赋值语句可以直接写到第二个always @ 里面,此时关键词可以改为
always @*
请各位指正
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-23 06:45 , Processed in 0.062172 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表