《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于KMP串模式匹配算法的序列檢測器的FPGA設計
基于KMP串模式匹配算法的序列檢測器的FPGA設計
2016年微型機與應用第06期
吳朝暉
(安徽師范大學 物理與電子信息學院,安徽 蕪湖 241000 )
摘要: 基于FPGA設計一個能夠檢測出重疊匹配串的序列檢測器。首先從KMP字符串模式匹配算法出發,推導出next函數值與序列檢測器狀態之間的關系,并針對匹配串重疊的情況進行修改,得到有限狀態機的狀態轉換圖,最后用VHDL語言描述并仿真驗證。
Abstract:
Key words :

  吳朝暉

 ?。ò不諑煼洞髮W 物理與電子信息學院,安徽 蕪湖 241000 )

      摘要:基于FPGA設計一個能夠檢測出重疊匹配串的序列檢測器。首先從KMP字符串模式匹配算法出發,推導出next函數值與序列檢測器狀態之間的關系,并針對匹配串重疊的情況進行修改,得到有限狀態機的狀態轉換圖,最后用VHDL語言描述并仿真驗證。

  關鍵詞KMP模式匹配算法;序列檢測器;FPGA;VHDL

0引言

  序列檢測器是將一個指定的序列從數字流中檢測出來,在通信系統中是常用的電路[1],有傳統設計方法,也有基于現場可編程門陣列(FPGA)的EDA設計方法。EDA設計方法是以硬件描述語言為主,它可優化設計,提高設計效率,具有在系統編程的特點。序列檢測器可用移位寄存器實現,也可以有限狀態機(FSM)來實現。用硬件描述語言(如VHDL)設計的有限狀態機具有相對固定的語句和程序表達方式,電路構建簡單,運行速度快,還可使用各種容錯技術保證系統性能穩定可靠。

  設計序列檢測器的狀態轉換圖是設計有限狀態機的主要任務,本文采用KMP字符串模式匹配算法來設計序列檢測器的狀態轉換圖,并且很容易實現一些特殊要求的序列檢測器,比如能夠檢測出匹配串重疊的序列檢測器。

1KMP串模式匹配算法

  KMP串的模式匹配算法是由KNUTH D E與PRATT V R和MORRIS J H同時發現的,此算法可以在O(n+m)的時間復雜度完成串的模式匹配操作。本文首先討論此算法的一般情況[2]。

  假設主串為 S1S2…Sn ,模式串為P1P2…Pm[3]。經典的BF匹配算法的思想是將主串S的第1個字符與模式串P的第1個字符匹配,若相等,則繼續比較S的第2個字符和P的第2個字符;若不相等,則回溯指針到S的第2個字符再重新與P的第1個字符進行比較。以此類推,直到全部能夠匹配為止。但實際上在“失配”時,S和P前面部分的字符串已比較過,是相等的,這種已知信息說明不需要重新開始匹配。KMP算法在此作了改進,即不回溯指針,此時當主串中第i個字符與模式串的第j個字符失配時,主串中第i個字符應重新與模式串中第next[j]個字符相比較。模式串的next函數的定義如式(1)所示[3]。

  E519DB)%DBL32WEXROX(~3A.jpg

  從定義可推導出求next[j]的算法,在有多個重復字符的情況下,還需進一步修正。 修正之后求next[j]的C#實現代碼如下:

  private static int[] GetNextVal(string T)

  {

  int j = 1, k = 0;

  int[] nextVal = new int[T.Length];

  nextVal[0] = 0;

  while (j < T.Length - 1)

  {

  if(k == 0 || T[j] == T[k])

  {

  j++; k++;

  if(T[j]!=T[k])//修正時所加的代碼行

  nextVal[j]=k;

  else//修正時所加的代碼行

  nextVal[j] = nextVal[k];//修正時所加的代碼行

  }

  else

  k = nextVal[k];

  }

  return nextVal;

  }

  由于C#字符串下標是從0開始的,因此字符串的第0位不使用。假設模式串為“11010011”,則通過GetNextVal("B11010011"),計算出next的函數值,如表1所示。

003.jpg

2序列檢測器狀態轉換圖

  本文設計的序列檢測器能夠從連續接收到的一組串行二進制序列中檢測出所需的二進制序列(即模式串)“11010011”,雖是一串二進制數,但可以看成字符串的特例。又假設待檢測的輸入的二進制序列為 11101001101 001101001100000000000……。對于這樣的輸入串一般只會檢測出2個匹配串,即串中的陰影部分。但有時卻需要檢測出中間斜體部分的串(與其他匹配串重疊),即檢測出3個匹配串,本文設計的就是這種特殊的序列檢測器。

  設計狀態轉換圖之前,先定義狀態。當輸入串的數位與模式串沒有匹配時狀態設為S0態,匹配了1個數位時設為S1態,連續匹配了n個數位時設為Sn態。 如果進入S8態,模式串就檢測到了。因此可定義S0、S1、S2、S3、S4、S5、S6、S7、S8共9種狀態。

  初始時S0態,當輸入串到來時,按次序一位一位地檢測是否與模式串匹配。如果輸入串的第1個數位與模式串的第1數位(j=1) 匹配,則進入S1次態。如果不匹配,就重新與模式串中第next[j]個數位相比較,因為此時next[j]=next[1]=0,比較結果會進入S0次態。 依此類推,當j=3時,說明比較前已匹配兩個數位,初態S2態,如果現在輸入是“0”, 與該位(“0”)匹配,則進入S3次態;如果輸入的是“1”,則與該位不匹配,因為此時next[3]=2,所以重新與模式串的第2位比較,此時結果一定相等(原因是KMP算法已修正,而二進制值只有0和1),所以進入S2次態。由此可得表2。

004.jpg

  結論:初態為Sj-1態時,輸入序列的數位與當前模式串的j位比較,如果匹配,進入Sj態;如果不匹配,進入Snext[j]態。然后再比較輸入序列的下一個數位,以此類推。

  對于檢測非重疊匹配串,S8狀態與S0狀態等價。但對于需要檢測出重疊匹配串的情況,S8的次態分兩種情況:一是輸入串數位為‘1’, 可在模式串末尾加‘0’(與‘1’表2模式串“11010011”的next函數值與狀態的關系j12345678模式串11010011修正的next[j]00202100初態S0S1S2S3S4S5S6S7匹配時進入次態S1S2S3S4S5S6S7S8不匹配時進入次態S0S0S2S0S2S1S0S0不匹配),求末尾一位next值,就是次態的下標; 二是輸入串數位為‘0’,可在模式串末尾加‘1’(與‘0’不匹配),求末尾一位next值,就是次態的下標。例如本例: GetNextVal(“B110100111”) ,求出的next[9]=3,則表示輸入串的數位為‘0’時進入S3次態。GetNextVal(“B110100110”) ,求出的next[9]=2,則表示輸入串的數位為‘1’時進入S2次態。最后得到完全的狀態轉換圖如圖1所示?!?/p>

001.jpg

  3序列檢測器的VHDL描述

  該狀態機屬于米勒型有限狀態機,它包含狀態說明部分、主控時序進程、主控組合進程和輔助進程幾個部分,其中說明部分用文字符號定義各狀態元素[4]。設電路數據輸入信號為din,時鐘信號為clk,復位信號為rst,輸出信號為sout。電路VHDL實現代碼如下。

  library ieee; use ieee.std_logic_1164.all;

  entity xl is

  port(din,rst,clk: in std_logic; sout: out std_logic);

  end;

  architecture  bhv  of  xl  is

  type states is (s0,s1,s2,s3,s4,s5,s6,s7,s8);

  signal st: states:=s0;

  begin

  process(clk,rst) begin

  if rst='1' then st<=s0;

  elsif clk'event and clk='1' then

  case st is

  when s0 => if din='1' then sout<='0'; st<= s1;

  else sout<='0'; st<=s0; end if;

  when s1 => if din='1' then sout<='0'; st<= s2; else sout<='0'; st<=s0; end if;

  when s2 => if din='0' then sout<='0'; st<= s3; else sout<='0'; st<= s2; end if;

  when s3 => if din='1' then sout<='0'; st<= s4; else sout<='0'; st<= s0; end if; 圖2序列檢測器仿真波形圖

  when s4 => if din='0' then sout<='0'; st<= s5; else sout<='0'; st<= s2; end if;

  when s5 => if din='0' then sout<='0'; st<= s6; else sout<='0'; st<= s1;end if;

  when s6 => if din='1' then sout<='0'; st<= s7; else sout<='0'; st<= s0; end if;

  when s7 => if din='1' then sout<='1'; st<= s8; else sout<='0'; st<= s0; end if;

  --s8態

  when s8 => if din='0' then sout<='0'; st<= s3; else sout<='0'; st<= s2; end if;

  when others => sout<='0'; st<=s0;

  end case;

  end if;

  end process;end;

  電路仿真波形圖如圖2所示。由圖可見信號sout輸出3次高電平,說明檢測到3個模式串。

002.jpg

4結論

  本文將KMP字符串模式匹配算法應用到二進制序列檢測器的有限狀態機設計。由于采用修正的KMP算法,并且是特定的二進制序列,因此只需一次比較就可知次態。如果將KMP算法也用VHDL描述,電路會更有通用性。

參考文獻

 ?。?] 李瑞,孫顯龍,劉寶娟.基于FPGA和VHDL的序列檢測器設計[J].微處理機,2012,33(5):46.

 ?。?] Hou Xianfeng, Yan Yubao, Xia Lu. Hybrid patternmatching algorithm based on BMKMP algorithm[J]. International Conference on Advanced Computer Theory & Engineering, 2010, 5(8):310313.

 ?。?] 嚴蔚敏,吳偉民.數據結構(C語言版)[M].北京:清華大學出版社,2011.

 ?。?] 潘松,黃繼業.EDA技術實用教程VHDL版(第五版)[M].北京:科學出版社, 2013.


此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          精品白丝av| 香蕉久久a毛片| 一区二区欧美激情| 亚洲二区在线视频| 久久国产视频网站| 欧美喷水视频| 欧美亚洲成人精品| 国产一区二区欧美日韩| 亚洲另类自拍| 欧美日韩无遮挡| 国产精品国色综合久久| 国产精品都在这里| 欧美激情综合色| 欧美理论片在线观看| 国产精品美腿一区在线看| 亚洲第一网站| 亚洲欧美成人综合| 久久久www成人免费精品| 亚洲一区二区在线观看视频| 欧美sm极限捆绑bd| 亚洲欧洲在线一区| 亚洲无吗在线| 美女视频网站黄色亚洲| 亚洲国产欧美在线| 国产综合久久久久影院| 亚洲四色影视在线观看| 国产精品白丝黑袜喷水久久久| 亚洲国产精品小视频| 亚洲国产另类精品专区| 狠狠色综合网站久久久久久久| 亚洲无线视频| 韩国视频理论视频久久| 久久综合色综合88| 最新国产乱人伦偷精品免费网站| 久久久国产精彩视频美女艺术照福利| 国产精品大全| 欧美一乱一性一交一视频| 欧美日韩一区免费| 欧美日韩在线精品一区二区三区| 欧美精品 国产精品| 久久―日本道色综合久久| 国产色产综合产在线视频| 在线看日韩欧美| 蜜臀av国产精品久久久久| 欧美理论大片| 在线看不卡av| 亚洲精品小视频| 亚洲第一区在线| 亚洲一区二区欧美| 欧美一级视频一区二区| 欧美三级韩国三级日本三斤| 亚洲午夜电影| 亚洲国产影院| 国产精品99久久久久久久vr| 国产色产综合产在线视频| 国内精品免费午夜毛片| 欧美视频一区二区在线观看| 一本一本久久| 欧美破处大片在线视频| 91久久久在线| 亚洲免费高清视频| 亚洲国产欧美日韩| 国产精品高潮在线| 国产精品久久久久久久久久免费| 91久久精品国产| 国产精品久久久一本精品| 国产欧美一区二区三区在线老狼| a91a精品视频在线观看| 欧美激情亚洲视频| 在线观看视频亚洲| 欧美69视频| 国产精品高潮视频| 国产精品一区二区三区久久| 欧美激情一区二区三区在线视频| 亚洲黄色片网站| 国产视频一区免费看| 亚洲黄网站黄| 亚洲国产精品黑人久久久| 亚洲精品国产拍免费91在线| 欧美日韩亚洲高清| 国产一区91精品张津瑜| 欧美日韩免费看| 亚洲视频精品| 亚洲电影第三页| 久久精品一区二区三区不卡牛牛| 亚洲第一在线综合在线| 亚洲欧美另类综合偷拍| 欧美无乱码久久久免费午夜一区| 欧美手机在线视频| 国产精品综合色区在线观看| 国产精品腿扒开做爽爽爽挤奶网站| 欧美在线免费观看| 久久婷婷激情| 欧美午夜精品电影| 国产精品视频内| 亚洲综合另类| 久久精品噜噜噜成人av农村| 欧美三级黄美女| 一区二区三区在线观看视频| 国产精品久久久久77777| 欧美mv日韩mv国产网站| 91久久久国产精品| 欧美在线免费看| 久久精品国产精品亚洲综合| 午夜日韩激情| 欧美国产日本韩| 狠狠色综合网站久久久久久久| 99爱精品视频| 欧美一区不卡| 免费成人av| 亚洲视屏在线播放| 欧美影院在线| 美女主播精品视频一二三四| 欧美日韩和欧美的一区二区| 久久国产精品毛片| 99riav1国产精品视频| 国产精品久久久久久久久动漫| 国产一区二区精品久久99| 欧美成人精品1314www| 亚洲第一精品在线| 欧美一区二区免费观在线| 狠狠网亚洲精品| 亚洲午夜在线观看视频在线| 久久av一区二区三区亚洲| 欧美日韩国产在线看| 久久精品在线观看| 一本一本久久| 麻豆91精品91久久久的内涵| 欧美日韩国产电影| 久久精品论坛| 亚洲激情在线观看| 亚洲国产日韩一区二区| 欧美日韩情趣电影| 亚洲国产91色在线| 亚洲二区精品| 久久免费偷拍视频| 国产乱人伦精品一区二区| 尤物九九久久国产精品的分类| 久久婷婷一区| 欧美怡红院视频一区二区三区| 欧美视频不卡中文| 欧美日韩美女一区二区| 亚洲一区免费视频| 亚洲欧美一区二区在线观看| 韩日在线一区| 久久久91精品国产一区二区三区| 亚洲第一二三四五区| 激情自拍一区| 亚洲欧洲精品一区二区精品久久久| 欧美精品久久一区| 欧美日韩国产色综合一二三四| 国产久一道中文一区| 久久国产精品第一页| 欧美日韩亚洲一区二区| 永久免费毛片在线播放不卡| 在线成人黄色| 欧美日韩国产免费观看| 欧美日韩国产综合新一区| 亚洲视频二区| 欧美一级成年大片在线观看| 国产精品一区一区三区| 欧美精品videossex性护士| 亚洲私拍自拍| 99精品国产在热久久下载| 亚洲深爱激情| 99精品视频免费全部在线| 猛男gaygay欧美视频| 欧美日韩一区二区国产| 亚洲激情视频在线观看| 亚洲精品精选| 国产一区二区三区在线播放免费观看| 免费在线观看日韩欧美| 国产一区二区av| 欧美久久精品午夜青青大伊人| 国产精品无码永久免费888| 亚洲一区二区三区欧美| 欧美激情四色| 欧美日韩另类丝袜其他| 欧美高清视频在线播放| 欧美华人在线视频| 在线免费不卡视频| 久久国产精品黑丝| 久久综合综合久久综合| 国产精品视频yy9299一区| 免费观看30秒视频久久| 一区二区三区www| 亚洲一区制服诱惑| 久久久99爱| 亚洲一区二区三区在线视频| 伊人精品在线| 美国三级日本三级久久99| 亚洲一级影院| 欧美日韩色一区| 欧美日韩精品久久| 国产午夜精品理论片a级探花| 国产一区二区电影在线观看| 久久精品国产精品| 伊人色综合久久天天五月婷| 国产欧美日韩精品在线| 欧美国产亚洲精品久久久8v| 欧美综合国产精品久久丁香| 黄色免费成人| 亚洲电影激情视频网站| 国产日韩在线亚洲字幕中文| 国产精品一区在线播放| 欧美无砖砖区免费| 亚洲精品视频啊美女在线直播| 国产在线欧美日韩| 精品福利免费观看| 亚洲一级高清| 亚洲欧美在线磁力| 欧美精品一卡| 欧美日韩亚洲在线| 一区久久精品| 欧美亚州在线观看| 又紧又大又爽精品一区二区| 欧美日韩高清免费| 亚洲性色视频| 久久一区二区三区四区| 精品69视频一区二区三区| 国产精品草莓在线免费观看| 亚洲综合成人在线| 99在线热播精品免费| 久久九九精品99国产精品| 欧美在线影院| 欧美日韩一区视频| 亚洲欧美一区二区三区久久| 久久不射电影网| 99re6这里只有精品视频在线观看| 欧美日韩mp4| 久久视频在线免费观看| 欧美精品在线一区| 亚洲国产精品99久久久久久久久| 另类天堂视频在线观看| 欧美一区二区三区视频免费播放| 欧美一区二区高清在线观看| 亚洲性色视频| 久久久999精品| 亚洲午夜一区二区| 国产精品久久久久999| 国产日韩欧美在线观看| 欧美电影打屁股sp| 亚洲黄色免费网站| 亚洲综合色视频| 欧美一区二区三区啪啪| 亚洲高清视频的网址| 正在播放欧美视频| 亚洲精品在线免费观看视频| 亚洲高清在线观看| 久久国产免费看| 国产亚洲欧美激情| 激情自拍一区| 欧美国产日韩在线观看| 欧美性一二三区| 亚洲成人直播| 久久久久久久久综合| 欧美一区中文字幕| 亚洲欧美日韩国产成人精品影院| 亚洲精品久久久久久久久久久| 亚洲影音先锋| 在线综合亚洲| 校园春色综合网| 老巨人导航500精品| 欧美日韩美女| 国产欧美在线观看一区| 欧美日韩一区二区视频在线| 久久久999成人| 国产精品日韩在线一区| 欧美绝品在线观看成人午夜影视| 久久国产精品久久精品国产| 亚洲欧美国产精品桃花| 欧美人与禽猛交乱配| 国产亚洲免费的视频看| 久久久久国产精品一区| 国产精品视频导航| 在线观看91久久久久久| 99re66热这里只有精品4| 国产欧美精品一区二区三区介绍| 日韩一级裸体免费视频| 亚洲综合好骚| 欧美精品久久99久久在免费线| ●精品国产综合乱码久久久久| 一本色道久久综合亚洲精品小说| 欧美日韩激情小视频| 国产丝袜美腿一区二区三区| 亚洲午夜女主播在线直播| 美女被久久久| 久久国产精品久久久| 欧美午夜免费| 亚洲精品国产品国语在线app| 国产精品一区久久久| 亚洲欧美日韩成人高清在线一区| 亚洲一区二区高清视频| 久久久噜噜噜久久中文字幕色伊伊| 亚洲黄色免费| 国产农村妇女精品一二区| 艳妇臀荡乳欲伦亚洲一区| 亚洲国产视频a| 好看的av在线不卡观看| 欧美手机在线| 欧美成人一区二区三区| 欧美激情一区二区三区在线| 亚洲精品在线二区| 韩日成人在线| 国产精品国产精品国产专区不蜜| 国产精品视频福利| 欧美国产日韩一二三区| 99国产精品视频免费观看一公开| 欧美精品在线观看播放| 欧美日韩高清不卡| 欧美日本一区二区三区| 91久久久在线| 中日韩男男gay无套| 欧美粗暴jizz性欧美20| 黄色一区二区在线| 久久夜色精品国产| 裸体丰满少妇做受久久99精品| 国产欧美日韩精品一区| 欧美在线综合视频| 欧美偷拍另类| 国产精品草草| 一区在线电影| 欧美一区精品| 亚洲色图在线视频| 亚洲午夜精品一区二区三区他趣| 久久riav二区三区| 亚洲精品视频免费在线观看| 国内精品免费在线观看|