复杂功能模块设计状态机.docx
- 文档编号:7154062
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:11
- 大小:385.48KB
复杂功能模块设计状态机.docx
《复杂功能模块设计状态机.docx》由会员分享,可在线阅读,更多相关《复杂功能模块设计状态机.docx(11页珍藏版)》请在冰豆网上搜索。
复杂功能模块设计状态机
复杂功能模块设计
在正向设计中,一个数字系统首先要分解为若干个功能模块,例如一个单片机除CPU、存储器外,可能包括中断控制器、定时/计数器、异步串行接口、SPI接口、I2C接口等,这些电路就是功能模块。
一个重要设计思想是,任何复杂功能模块是由状态机和数据通道两部分构成的。
这里数据通道(Datapath)指的是典型逻辑电路,如计数器、寄存器、算术运算电路等。
状态机就是控制器,数据通道在状态机控制下工作。
一个复杂功能模块的设计几乎总是从状态机设计开始的。
图1复杂功能模块的一般结构
例1:
设计一个简单报警器。
输入信号来自8位A/D转换器,要求当输入大于等于100时,产生报警信号,当输入回落到97以下时解除报警信号。
图2
分析:
关键是输入为98、99时怎么处理?
图2简单报警器的状态机
图3简单报警器的内部结构
代码:
例2:
简易交通灯问题。
主干道至少通行10分钟才能使小路方向通行1分钟。
在主干道通行时,如果有过街请求则在10分钟到时变为小路通,如无请求,则主干道继续通行5分钟后再变为小路通。
图4
图5
图6
状态机代码
例3:
售货机问题
假设商品价格7角,并假设每次只能销售一个商品,且售货机发现金额超过7角即关闭投币口。
找零时,每次只能找回一枚硬币,如需找回5角以上,优先考虑5角。
图7
例4:
JTAG中的TAP状态机
4.2状态机设计方法
一般情况下,一个数字电路系统总是可以分解为数据通道(Datapath)和状态机两个部分。
“数据通道”一词与字面意义不同,泛指较常用的数字部件,具有通用性。
状态机则是对电路特殊性部分的描述。
这里所说的“状态机”是一种描述电路功能的方法,与数字电路中的状态转换图类似,但要更抽象一些。
以下以一个“密码”定时器为例,介绍状态机分析方法。
(1)电路功能描述
●输入输出信号见图4-6,只要求设计“密码定时器”模块。
●上电复位后,定时器处于等待状态,输出控制信号“out”为0,计时显示输出为BCD码“9”。
●输入正确密码后开始倒计时,每秒计数值减1,计时回0后,输出控制信号置1。
●按键事件信号(key_in)的每个脉冲代表一次数字输入事件,输入数字以bcd码形式给出。
●密码为固定的4位数字,例如“2012”。
●密码输入间隔时间或总的输入时间不限。
输入数据的总位数也不限,只要4个连续的输入数据与密码相同即可。
图4-6密码定时器
设计思路:
可以想象电路中将包含分频电路、BCD减法计数器等常用部件,这些属于“数据通道”部分,功能比较简单。
问题的关键是如何描述密码的输入情况。
用寄存器保存输入密码的方法可行,但耗用较多硬件资源。
以下采用状态机方法描述密码输入情况。
always@(posedgeclk)
begin
if(rst_n==1'b0)
div<=2'b00;
else
div<=div+1'b1;
end
//--------------------------------------------------------------
always@(posedgeclk)
begin
if(rst_n==1'b0)
cnt<=4'd9;
elseif((div==2'b11)&&(state==PASS_4)&&(cnt>0))
cnt<=cnt-1'b1;
end
图4-8状态机
parameter[2:
0]PASS_0=3'b00;
parameter[2:
0]PASS_1=3'b01;
parameter[2:
0]PASS_2=3'b10;
parameter[2:
0]PASS_3=3'b11;
parameter[2:
0]PASS_4=3'b11;
always@(posedgeclk)
begin
if(rst_n==1'b0)
state<=PASS_0;
else
state<=next_state;
end
always@(stateorkey_in_edgeorbcd)
begin
if(key_in_edge==3'b01)begin
case(state)
PASS_0:
begin
if(bcd==3'd2)
next_state=PASS_1;
else
next_state=PASS_0;
end
PASS_1:
begin
if(bcd==3'd0)
next_state=PASS_2;
elseif(bcd==3'd2)
next_state=PASS_1;
else
next_state=PASS_0;
end
PASS_2:
begin
if(bcd==3'd1)
next_state=PASS_3;
elseif(bcd==3'd2)
next_state=PASS_1;
else
next_state=PASS_0;
end
PASS_3:
begin
if(bcd==3'd2)
next_state=PASS_4;
else
next_state=PASS_0;
end
default:
next_state=state;
endcase
end
else
next_state=state;
end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复杂 功能模块 设计 状态机