序列检测器的一种简化实现算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第8卷第6期石家庄学院学报Vol.8,No.62006年11月JournalofShijiazhuangUniversityNov.2006序列检测器的一种简化实现算法
李俊红,解建军
(河北师范大学数学与信息科学学院,石家庄050016)
摘要:分析了序列检测器的内部原理,给出它的一种新硬件实现.利用它无需对状态图进行状态化简,极大地简化了时序线路的设计.最后结合具体实例说明了该设计思想的详细步骤和具体实现方法.
关键词:子串;主串;序列检测器
中图分类号:TP16文献标识码:A文章编号:1673-1972(2006)06-0063-03
1序列检测器原理
序列检测是指将一个指定的序列从数字流中识别出来,或在主串中查询相应子串,一般可以通过软件方法或时序电路即硬件方法实现.有关软件实现方法的研究可参见文献[1],本文主要针对时序电路进行讨论.用硬件方法实现序列检测器时,检测器中存储模式串,主串可以通过输入端流入检测器[2,3].在主串的输入过程中,检测器可以动态检测子串.检测器利用时序线路记忆已检测出的有效序列,并与自身所含的模式串进行比对,若检测成功,输出端自动输出成功标记[4].设计一个“11100”序列检测器,当识别到一组序列时,输入一个高电平.由于采用时序线路,主串的内容应每给一个上升沿或下降沿输入一位,具体应视所选触发器类型而定.
我们提出一种新硬件实现方法,在该方法中对每一个状态都根据实际意义给予特殊的含义,具体含义在后面的实例中再加以说明,由于不存在重复状态,故最终的状态图不用化简.
序列检测器的初态是指被检序列的第一位出现前的特定状态,此状态后如果输入的代码对检测有效(即被测序列的第一位),则相应次态为新的状态(第2个状态,它记住了被测序列的第一位),否则相应次态仍为初态.第2个状态是指被检序列的第一位出现后的特定状态,此状态后如果输入的代码对检测有效,(即被测序列的第2位)则相应次态为新的状态(第2个状态,它记住了被测序列的前2位),否则判断最近输入的代码是否是被检序列的第一位,是则相应次态仍为第2个状态,否则相应次态为初态.以次类推,第i个状态记住了被检序列的前i-1位,相应次态确定方法如下:
假设序列长度为n,当i<n时,如果第i个状态后输入的一位代码是被检序列的第i位,则次态为新的状态(记住了被检序列的前i位),否则次态按如下规则选择:从初态开始输入的i位代码中如果其中的后i-j位为被检序列的前i-j位,则次态为第i-j+1个状态(j=1,2,...,i-1,找到次态即停止),否则次态为初态.此时所有的外输出均为‘0’.
当i=n时,第n个状态已经记住了被检序列的前n-1位,此状态后输入的一位代码如果是被检序列的第n位,则外输出为‘1’,否则外输出为‘0’,其次态按如下规则选择:从初态开始输入的n位代码中如果其中的后n-j位为被检序列的前n-j位,则次态为第i-j+1个状态(j=1,2,...,n-1,找到次态即停止),当j=n时,次态为初态.
按上述方法构造的原始状态转移图中恰好含n个状态,且每个状态都有确定的含义,避免了其设计过程中,构造原始状态转移图繁杂,化简原始状态转移图麻烦的弊端,设计时既逻辑清晰,又不用化简,从而极大地简化了该类线路的设计.
收稿日期:2005-12-09
基金项目:河北省石家庄市科学研究与发展计划项目(05213570);河北师范大学青年基金资助(L2005Q02)
作者简介:李俊红(1971-),女,山西运城人,河北师范大学数学与信息科学学院讲师,硕士,研究方向:并行逻辑模拟,计算机系统结构.
图1
原始状态转移图
2序列检测器的构造
用D触发器设计“1011”序列检测器(已检内容可以重复利用),即在随机输入的序列中检测是否包含
有“1011”
,如果检测成功,输出‘1’.如:输入“011011”,输出“000001”.设计过程如下:2.1构造原始状态转移图
1)设A为初始状态,即开始接收输入的状态.
若A状态后输入的是‘0’,因序列的第一个有效字符为‘1’,‘0’对检测“1011”
无效,故检测器继续保持A状态.
若A状态后输入的是‘1’
,这恰好是序列的第一个有效字符,故检测器进入新状态B.2)B为接收了第一个有效输入‘1’以后的状态,即‘1’
状态.若B状态后输入的是‘1’,即此时连续输入了“11”,这不是“1011”的前2位,故检测器不应进入新状态,但是第二个‘1’可以用来做“1011”的第一个有效‘1’
状态,故检测器继续保持B状态.若B状态后输入的是‘0’,即此时连续输入了“10”,这恰好是“1011”的前2位,故检测器进入新状态C.3)C为在B状态的基础上又接收了第2个有效的输入‘0’以后的状态,即“10”状态.若C状态后输入的是‘1’,即此时连续输入了“101”,这恰好是“1011”的前3位,故检测器应进入新状态D.若C状态后输入的是‘0’,即此时连续输入了“100“,这不是“1011”的前3位,且后2位“00”也不是“1011”的前2位,最末位‘0’不是“1011”的第一位,即当前的3位输入“100”对检测序列“1011”
无用,故检测器进入A状态,等待有效输入‘1’.4)D为在C状态的基础上又接收了第3个有效的输入‘1’以后的状态,即“101”
状态.若D状态后输入的是‘1’,即此时连续输入了“1011”,这恰好是被检序列“1011”
,即已检测成功,外输出为‘1’,又因为“011”,“11”均不是“1011”的前3位及前2位,而‘1’是“1011”
的第一位,故检测器应进入B状态.若D状态后输入的是‘0’,即此时连续输入了“1000”,这不是“1011”,且后3位“000”,后2位“00”及末位‘0’也不是“1011”的前3位,前2位和第一位,即当前的输入“1000”对检测序列“1011”无用,故检测器进入A状态,等待有效输入‘1’.
至此,无新状态产生,原始状态转移图构造完成,如图1所示.2.2状态编码
上述4个状态含义均不相同,故无重复状态,不用化简,可直接编码.4个状态需两位编码,结果为:A:00,B:01,C:10,D:11.
2.3状态表
(如表1所示.其中一位外输入用x表示,一位外输出用z表示)2.4
控制函数及输出函数表达式
由表1知d1=Σm3(1,6)=xs1s0+xs1s0
d0=Σ
m3(4,5,6,7)=xz=Σm3(7)=xs1s02.5
电路图(如图2所示)
3
VHDL实现[5]
3.1
实体定义
entitypaperisport(clk:instd_logic:
data_in:inbit;data_out:outbit);
endpaper;3.2
主要实现
casestateis
注:1.箭头上方数字含义为输入/输出.
2.检测成功时,输出为“1”,其他输出全部为“0”
.石家庄学院学报2006年11月
64