0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA學習-序列檢測器

FPGA設(shè)計論壇 ? 來源:未知 ? 2023-08-29 10:20 ? 次閱讀

點擊上方藍字關(guān)注我們

一、前言

數(shù)字電路中,序列檢測器(Sequence Detector)是指一種特殊類型的電路,用于尋找輸入信號中一定模式的子序列。該模式可以是任意模式,包括重復(fù)模式、連續(xù)模式、間隔模式等等。通常的序列檢測方法有2種:有限狀態(tài)機法(FSM);移位寄存器法。

為什么需要設(shè)計序列檢測電路呢?

數(shù)字集成電路中,序列檢測電路可以用于檢測輸入信號序列中是否存在特定的模式和序列,以及判斷實際輸出和理論輸出是否存在差異。序列檢測器是確保數(shù)字系統(tǒng)的正確運行不可或缺的一部分!

那么數(shù)字IC中哪些部分需要設(shè)計呢?

數(shù)字集成電路(Digital Integrated Circuit,簡稱DIC)中需要設(shè)計序列檢測電路的部分主要包括以下幾個方面:

數(shù)據(jù)輸入端:序列檢測電路可以用于檢測輸入數(shù)據(jù)是否符合特定的格式要求,或者是否存在錯誤或干擾。在數(shù)字集成電路中,輸入數(shù)據(jù)通常是通過輸入端口輸入的,因此需要在輸入端口處設(shè)計序列檢測電路。

控制信號:數(shù)字集成電路中的控制信號通常是用于控制數(shù)字系統(tǒng)的操作序列,以確保系統(tǒng)按照預(yù)期的順序執(zhí)行操作。在這種情況下,序列檢測電路可以用于檢測控制信號是否按照預(yù)期的序列進行。

數(shù)據(jù)輸出端:序列檢測電路還可以用于檢測輸出數(shù)據(jù)是否符合特定的格式要求,或者是否存在錯誤或干擾。在數(shù)字集成電路中,輸出數(shù)據(jù)通常是通過輸出端口輸出的,因此需要在輸出端口處設(shè)計序列檢測電路。

內(nèi)部信號:數(shù)字集成電路中的內(nèi)部信號通常是在芯片內(nèi)部傳遞的信號,例如時鐘信號、地址信號、數(shù)據(jù)信號等。在這種情況下,序列檢測電路可以用于檢測內(nèi)部信號是否按照預(yù)期的序列進行。

IC設(shè)計的過程中,不同的部分的序列檢測器檢測的序列和發(fā)揮的具體作用不盡心相同。因此在數(shù)字集成電路中,需要根據(jù)具體的應(yīng)用場景,針對不同的部分設(shè)計相應(yīng)的序列檢測電路。

二、狀態(tài)機法和寄存器法

對于序列檢測器的設(shè)計,常規(guī)的設(shè)計方法有兩種:狀態(tài)機法和移位寄存器法。

狀態(tài)機法最重要的是明白狀態(tài)機狀態(tài)的轉(zhuǎn)移過程:在數(shù)據(jù)輸入之后判斷是否匹配,若匹配則進入下一狀態(tài),不匹配則根據(jù)輸入的數(shù)據(jù)具體判斷進入的下一狀態(tài)(也有可能保持在原來的狀態(tài))。狀態(tài)機設(shè)計過程一定要注重狀態(tài)的數(shù)量和狀態(tài)轉(zhuǎn)移以及狀態(tài)轉(zhuǎn)移條件,避免狀態(tài)的缺失以及狀態(tài)轉(zhuǎn)移的不合理循環(huán)。

移位寄存器法法基本原理是數(shù)據(jù)的移位和移位數(shù)據(jù)的對比:首先將對應(yīng)的初始數(shù)據(jù)緩存在寄存器中作為一個數(shù)組,數(shù)據(jù)輸入后置于于數(shù)組的末尾,數(shù)組其它元素左移,把最早輸入的數(shù)據(jù)移出,每輸入一個數(shù)據(jù)后刷新一次。然后將數(shù)組和目標序列對比,如果數(shù)組和目標序列相等,則說明出現(xiàn)目標序列。

2.1狀態(tài)機法2.11 使用狀態(tài)機檢測“1001”

題目:設(shè)計一個序列檢測器,用來檢測序列1001,用_狀態(tài)機完成電路,可重復(fù)檢測_序列1001(即本文第三部分的重疊檢測)。

第一步,分析狀態(tài)機狀態(tài)轉(zhuǎn)移,分析如下:

IDLE: 初始狀態(tài),代表目前沒有接收到滿足要求的數(shù)據(jù)。

seq_in = 1時,等于1001中的第一個數(shù),進入S1狀態(tài);

seq_in = 0時,保持狀態(tài)。

S1:代表目前已經(jīng)有了1個匹配的數(shù)據(jù)。

seq_in = 0時,當前序列為10,等于1001中的前兩個數(shù),進入S2狀態(tài);

seq_in = 1時,當前序列為11,不是1001的前兩個數(shù),但1是1001的第一個數(shù),所以保持S1狀態(tài)。

S2:代表目前已經(jīng)有了2個匹配的數(shù)據(jù)。

seq_in = 0時,當前序列為100,等于1001中的前三個數(shù),進入S3狀態(tài);

seq_in = 1時,當前序列為101,不是1001的前三個數(shù),但1是1001的第一個數(shù),所以進入S1狀態(tài)。

S3:代表目前已經(jīng)有了3個匹配的數(shù)據(jù)。

seq_in = 1時,當前序列為1001,與要求序列匹配,進入S4狀態(tài);

seq_in = 0時,當前序列為1000,與要求序列不配,0與初始狀態(tài)匹配,所以進入IDLE狀態(tài)。

S4:最終狀態(tài),代表目前已經(jīng)得到了匹配的序列,輸出信號翻轉(zhuǎn)。

seq_in = 1時,當前序列為10011,1與要求序列的第一個數(shù)匹配,所以進入S1狀態(tài);

seq_in = 0時,當前序列為10010,10與要求的前兩個數(shù)匹配,所以進入S2狀態(tài)。

第二步:根據(jù)流程轉(zhuǎn)換分析畫出狀態(tài)機的狀態(tài)轉(zhuǎn)移圖,如下圖所示:

chaijie_default.png

第三步:根據(jù)狀態(tài)機轉(zhuǎn)移圖用經(jīng)典三段式(或者二段式)寫出verilog代碼

2.12 verilog代碼//使用狀態(tài)機設(shè)計檢測“1001”的序列檢測器

//可重疊檢測序列“1001”

module sequence_detect01(

input clk,

input rst_n,

input seq_in,

output mismatch//檢驗序列是否匹配,匹配輸出0,不匹配輸出0

);

//采用獨熱碼編譯五個狀態(tài),初始IDLE狀態(tài)為待機狀態(tài)

//獨熱碼相比二進制碼和格雷碼,方便電路設(shè)計判斷、狀態(tài)轉(zhuǎn)移,且邏輯更簡單

parameter IDLE = 5'b00001;

parameter S1 = 5'b00010;

parameter S2 = 5'b00100;

parameter S3 = 5'b01000;

parameter S4 = 5'b10000;

//定義兩個寄存器表示狀態(tài)機的目前狀態(tài)和下一狀態(tài)

reg [4:0] curr_state;

reg [4:0] next_state;

//第一段使用時序邏輯描述狀態(tài)轉(zhuǎn)移

always@(posedge clk or negedge rst_n) begin

if(!rst_n) begin

curr_state <= IDLE;

end

else begin

curr_state <= next_state;

end

end

//第二段使用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件

always@(*) begin

if(!rst_n) begin

next_state <= IDLE;

end

else begin

case(curr_state)

IDLE :next_state = seq_in?S1:IDLE;

S1 :next_state = seq_in?S1:S2;

S2 :next_state = seq_in?S1:S3;

S3 :next_state = seq_in?S4:IDLE;

S4 :next_state = seq_in?S1:S2;

default:next_state = IDLE;//養(yǎng)成良好代碼風格,不能遺漏,防生成latch,也可以通過賦初值避免

endcase

end

end

//第三段描述狀態(tài)輸出(可以使用組合邏輯,也可以用時序邏輯)

//此處采用組合邏輯,同時也提供時序邏輯代碼示例

assign mismatch = (curr_state ==S4) ? 1'b0 : 1'b1;//組合邏輯描述輸出

/*

//時序邏輯描述輸出

always@(posedge clk or negedge rst_n) begin

if(!rst_n) begin

mismatch <= 1'b1;

end

else if(next_state == S4) begin

mismatch <= 1'b0;

end

else begin

mismatch <= 1'b1;

end

end

*/

endmodule

2.13 testbench`timescale 1ns/1ps//仿真時間單位1ns 仿真時間精度1ps

module sequence_detect01_tb();

//信號申明

reg clk;

reg rst_n;

reg seq_in;

wire mismatch;

//生成復(fù)位信號

//為時鐘信號和復(fù)位信號賦初值

initial begin

clk = 0;

rst_n = 1;

seq_in = 1;

#5 rst_n = 0;

#10 rst_n = 1;

end

always #6 seq_in = $random;//生成隨機數(shù)作為信號輸入

always #5 clk = ~clk;//生成時鐘信號

//模塊實例化(將申明的信號連接起來即可)

sequence_detect01 u_sequence_detect01

(.clk (clk),

.rst_n (rst_n),

.seq_in (seq_in),

.mismatch (mismatch)

);

endmodule

2.14仿真結(jié)果

)

Testbench中采用隨機數(shù)來驗證序列檢測器的準確性,當時間來到705ns,隨機數(shù)連續(xù)輸出1001,mismatch在接收四位數(shù)字進行信號翻轉(zhuǎn)。

2.2移位寄存器法2.21 使用移位寄存器法檢測1001

題目:設(shè)計一個序列檢測器,用來檢測序列 1001,用_移位寄存器_完成電路設(shè)計。

移位寄存器方法比較簡單。設(shè)置一個和序列等長的寄存器,在數(shù)據(jù)輸入后將輸入移入寄存器的最低位,并判斷寄存器中的值是否與序列相同。因為移位寄存器的工作原理,設(shè)計出來的序列檢測器可以重疊檢測序列。

2.22 verilog代碼//使用移位寄存器設(shè)計檢測“1001”的序列檢測器

//可重疊檢測序列“1001”

module sequence_detect02(

input clk,

input rst_n,

input seq_in,

output regmismatch//時序邏輯中需要定義為reg型

);

reg [3:0] seq_in_r;//定義一個寄存器緩存數(shù)據(jù)

//使用時序邏輯完成復(fù)位和移位寄存器移位過程

always@(posedge clk or negedge rst_n) begin

if (!rst_n) begin

seq_in_r <= 4'b0;//中間寄存器復(fù)位

end

else begin

seq_in_r <= {seq_in_r[2:0],seq_in};//輸入數(shù)據(jù)置于數(shù)組右端,移位寄存器左移位

end

end

//使用時序邏輯完成復(fù)位與輸出

always@(posedge clk or negedge rst_n) begin

if (!rst_n) begin

mismatch <= 1'b1;

end

else if (seq_in_r == 4'b1001) begin//若檢測到1001則將mismatch置1,表明檢測到序列1001

mismatch <= 1'b0;

end

else begin

mismatch <= 1'b1;//養(yǎng)成良好代碼風格,不能遺漏,防生成latch,可通過賦初值避免

end

end

endmodule

2.23 testbench`timescale 1ns/1ps//仿真時間單位1ns 仿真時間精度1ps

module sequence_detect02_tb;

//信號申明

regclk;

reg rst_n;

regseq_in;

wire mismatch;

//復(fù)位信號生成

//時鐘信號與復(fù)位信號賦初值

initial begin

clk = 0;

rst_n = 1;

seq_in = 1;

#5 rst_n = 0;

#10 rst_n = 1;

end

always #6 seq_in = $random;//生成隨機數(shù)作為信號輸入

always #5 clk = ~clk;//生成時鐘信號

//模塊實例化(將申明的信號連接起來即可)

sequence_detect01 u_sequence_detect01

(.clk (clk),

.rst_n (rst_n),

.seq_in (seq_in),

.mismatch (mismatch)

);

endmodule

2.24仿真結(jié)果

Testbench中采用隨機數(shù)來驗證序列檢測器的準確性,當時間來到705ns,隨機數(shù)連續(xù)輸出1001,mismatch在接收四位數(shù)字且在時鐘上升沿進行信號翻轉(zhuǎn)。

三、重疊檢測與非重疊檢測(檢測序列1001)

數(shù)字IC序列檢測中的重疊檢測和非重疊檢測是兩種不同的檢測方式。

重疊檢測是指在一個序列中,子序列之間會有部分重疊的情況,而重疊區(qū)域也需要進行檢測,并被判定為單獨的子序列。

非重疊檢測則是指在一個序列中,每個子序列之間沒有重疊部分,因此只需要檢測每個子序列本身是否滿足特定的條件即可。

3.1重疊檢測3.11 重疊檢測方法

題目:設(shè)計一個序列檢測器,用來檢測序列 1001,用_狀態(tài)機完成電路,可重復(fù)檢測_序列1001

第一步,分析狀態(tài)機狀態(tài)轉(zhuǎn)移,分析如下:

IDLE: 初始狀態(tài),代表目前沒有接收到滿足要求的數(shù)據(jù)。

seq_in = 1時,等于1001中的第一個數(shù),進入S1狀態(tài);

seq_in = 0時,保持狀態(tài)。

S1:代表目前已經(jīng)有了1個匹配的數(shù)據(jù)。

seq_in = 0時,當前序列為10,等于1001中的前兩個數(shù),進入S2狀態(tài);

seq_in = 1時,當前序列為11,不是1001的前兩個數(shù),但1是1001的第一個數(shù),所以保持S1狀態(tài)。

S2:代表目前已經(jīng)有了2個匹配的數(shù)據(jù)。

seq_in = 0時,當前序列為100,等于1001中的前三個數(shù),進入S3狀態(tài);

seq_in = 1時,當前序列為101,不是1001的前三個數(shù),但1是1001的第一個數(shù),所以進入S1狀態(tài)。

S3:代表目前已經(jīng)有了3個匹配的數(shù)據(jù)。

seq_in = 1時,當前序列為1001,與要求序列匹配,進入S4狀態(tài);

seq_in = 0時,當前序列為1000,與要求序列不配,0與初始狀態(tài)匹配,所以進入IDLE狀態(tài)。

S4:最終狀態(tài),代表目前已經(jīng)得到了匹配的序列,輸出信號翻轉(zhuǎn)。

seq_in = 1時,當前序列為10011,1與要求序列的第一個數(shù)匹配,所以進入S1狀態(tài);

seq_in = 0時,當前序列為10010,10與要求的前兩個數(shù)匹配,所以進入S2狀態(tài)。

第二步:根據(jù)流程轉(zhuǎn)換分析畫出狀態(tài)機的狀態(tài)轉(zhuǎn)移圖,如下圖所示:

第三步:根據(jù)狀態(tài)機轉(zhuǎn)移圖用經(jīng)典三段式(或者二段式)寫出verilog代碼

3.12verilog代碼//使用狀態(tài)機設(shè)計檢測“1001”的序列檢測器

//可重疊檢測序列“1001”

module sequence_detect03(

inputclk ,

inputrst_n,

inputseq_in,

output reg mismatch//檢驗序列是否匹配,匹配輸出0,不匹配輸出0

);

//采用獨熱碼編譯五個狀態(tài),初始IDLE狀態(tài)為待機狀態(tài)

//獨熱碼相比二進制碼和格雷碼,方便電路設(shè)計判斷、狀態(tài)轉(zhuǎn)移,且邏輯更簡單

parameterIDLE = 5'b00001;

parameter S1 = 5'b00010;

parameter S2 = 5'b00100;

parameter S3 = 5'b01000;

parameter S4 = 5'b10000;

//定義兩個寄存器表示狀態(tài)機的目前狀態(tài)和下一狀態(tài)

reg [4:0] curr_state;

reg [4:0] next_state;

//第一段使用時序邏輯描述狀態(tài)轉(zhuǎn)移

always@(posedge clk or negedge rst_n) begin

if(!rst_n) begin

curr_state <= IDLE;

end

else begin

curr_state <= next_state;

end

end

//第二段使用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件

always@(*) begin

if(!rst_n) begin

next_state <= IDLE;

end

else begin

case(curr_state)

IDLE :next_state = seq_in?S1:IDLE;

S1 :next_state = seq_in?S1:S2;

S2 :next_state = seq_in?S1:S3;

S3 :next_state = seq_in?S4:IDLE;

S4 :next_state = seq_in?S1:S2;

default:next_state = IDLE;//養(yǎng)成良好代碼風格,不能遺漏,防生成latch,也可以通過賦初值避免

endcase

end

end

//第三段描述狀態(tài)輸出(可以使用組合邏輯,也可以用時序邏輯)

//此處采用時序邏輯,同時也提供組合邏輯代碼示例

always@(posedge clk or negedge rst_n) begin//時序邏輯描述輸出

if(!rst_n) begin

mismatch <= 1'b1;

end

else if(next_state == S4) begin

mismatch <= 1'b0;

end

else begin

mismatch <= 1'b1;

end

end

//assign mismatch = (curr_state ==S4) ? 1'b0 : 1'b1;//組合邏輯描述輸出

endmodule

3.13Testbench`timescale 1ns/1ps//仿真時間單位1ns 仿真時間精度1ps

module sequence_detect03_tb();

//信號申明

regclk;

regrst_n;

regseq_in;

wiremismatch;

//復(fù)位信號生成

//輸入信號生成,輸入信號為“1001001001001”

//時鐘信號與復(fù)位信號賦初值

initial begin

clk = 0;

rst_n = 1;

#5 rst_n = 0;

#10 rst_n = 1;

seq_in = 1;#10;

seq_in = 0;#10;

seq_in = 0;#10;

seq_in = 1;#10;

seq_in = 0;#10;

seq_in = 0;#10;

seq_in = 1;#10;

seq_in = 0;#10;

seq_in = 0;#10;

seq_in = 1;#10;

seq_in = 0;#10;

seq_in = 0;#10;

seq_in = 1;#10;

end

//時鐘信號生成

always #5 clk = ~clk;

//模塊實例化(將申明的信號連接起來即可)

sequence_detect03 u_sequence_detect03(

.clk(clk),

.rst_n(rst_n),

.seq_in(seq_in),

.mismatch(mismatch)

);

endmodule

3.14仿真結(jié)果

輸入序列1001001001001,根據(jù)可重復(fù)檢測理論上可檢測四次信號翻轉(zhuǎn),從仿真結(jié)果可以看到mismatch發(fā)生四次翻轉(zhuǎn),且第二次翻轉(zhuǎn)的1001中的第一個1來自第一組1001中最后一個1,即發(fā)生重疊亦可檢測。

3.2非重疊檢測3.21 非重疊檢測方法

題目:設(shè)計一個序列檢測器,用來檢測序列 1001,用狀態(tài)機完成電路,可重復(fù)檢測序列1001

第一步,分析狀態(tài)機狀態(tài)轉(zhuǎn)移,分析如下:

IDLE: 初始狀態(tài),代表目前沒有接收到滿足要求的數(shù)據(jù)。

seq_in = 1時,等于1001中的第一個數(shù),進入S1狀態(tài);

seq_in = 0時,保持狀態(tài)。

S1:代表目前已經(jīng)有了1個匹配的數(shù)據(jù)。

seq_in = 0時,當前序列為10,等于1001中的前兩個數(shù),進入S2狀態(tài);

seq_in = 1時,當前序列為11,不是1001的前兩個數(shù),但1是1001的第一個數(shù),所以保持S1狀態(tài)。

S2:代表目前已經(jīng)有了2個匹配的數(shù)據(jù)。

seq_in = 0時,當前序列為100,等于1001中的前三個數(shù),進入S3狀態(tài);

seq_in = 1時,當前序列為101,不是1001的前三個數(shù),但1是1001的第一個數(shù),所以進入S1狀態(tài)。

S3:代表目前已經(jīng)有了3個匹配的數(shù)據(jù)。

seq_in = 1時,當前序列為1001,與要求序列匹配,進入S4狀態(tài);

seq_in = 0時,當前序列為1000,與要求序列不配,0與初始狀態(tài)匹配,所以進入IDLE狀態(tài)。

S4:最終狀態(tài),代表目前已經(jīng)得到了匹配的序列,輸出信號翻轉(zhuǎn)。

seq_in = 1時,當前序列為10011,1與要求序列的第一個數(shù)匹配,所以進入S1狀態(tài);

seq_in = 0時,當前序列為10010,10與要求的前兩個數(shù)匹配,但是要求非重疊檢測,所以進入IDLE狀態(tài)。

第二步:根據(jù)流程轉(zhuǎn)換分析畫出狀態(tài)機的狀態(tài)轉(zhuǎn)移圖,如下圖所示

第三步:根據(jù)狀態(tài)機轉(zhuǎn)移圖用經(jīng)典三段式(或者二段式)寫出verilog代碼

3.22verilog代碼//使用狀態(tài)機設(shè)計檢測“1001”的序列檢測器

//非重疊檢測序列“1001”

module sequence_detect04(

inputclk ,

inputrst_n,

inputseq_in,

output reg mismatch//檢驗序列是否匹配,匹配輸出0,不匹配輸出0

);

//采用獨熱碼編譯五個狀態(tài),初始IDLE狀態(tài)為待機狀態(tài)

//獨熱碼相比二進制碼和格雷碼,方便電路設(shè)計判斷、狀態(tài)轉(zhuǎn)移,且邏輯更簡單

parameter IDLE = 5'b00001;

parameter S1 = 5'b00010;

parameter S2 = 5'b00100;

parameter S3 = 5'b01000;

parameter S4 = 5'b10000;

//定義兩個寄存器表示狀態(tài)機的目前狀態(tài)和下一狀態(tài)

reg [4:0] curr_state;

reg [4:0] next_state;

//第一段使用時序邏輯描述狀態(tài)轉(zhuǎn)移

always@(posedge clk or negedge rst_n) begin

if(!rst_n) begin

curr_state <= IDLE;

end

else begin

curr_state <= next_state;

end

end

//第二段使用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件

always@(*) begin

if(!rst_n) begin

next_state <= IDLE;

end

else begin

case(curr_state)

IDLE :next_state = seq_in?S1:IDLE;

S1 :next_state = seq_in?S1:S2;

S2 :next_state = seq_in?S1:S3;

S3 :next_state = seq_in?S4:IDLE;

S4 :next_state = seq_in?S1:IDLE;

default:next_state = IDLE;//養(yǎng)成良好代碼風格,不能遺漏,防生成latch,也可以通過賦初值避免

endcase

end

end

//第三段描述狀態(tài)輸出(可以使用組合邏輯,也可以用時序邏輯)

//此處采用時序邏輯,同時也提供組合邏輯代碼示例

always@(posedge clk or negedge rst_n) begin//時序邏輯描述輸出

if(!rst_n) begin

mismatch <= 1'b1;

end

else if(next_state == S4) begin

mismatch <= 1'b0;

end

else begin

mismatch <= 1'b1;

end

end

//assign mismatch = (curr_state ==S4) ? 1'b0 : 1'b1;//組合邏輯描述輸出

endmodule

3.23Testbench`timescale 1ns/1ps//仿真時間單位1ns 仿真時間精度1ps

module sequence_detect04_tb();

//信號申明

regclk;

regrst_n;

regseq_in;

wiremismatch;

//復(fù)位信號生成

//輸入信號生成,輸入信號為“1001001001001”

//時鐘信號與復(fù)位信號賦初值

initial begin

clk = 0;

rst_n = 1;

#5 rst_n = 0;

#10 rst_n = 1;

seq_in = 1;#10;

seq_in = 0;#10;

seq_in = 0;#10;

seq_in = 1;#10;

seq_in = 0;#10;

seq_in = 0;#10;

seq_in = 1;#10;

seq_in = 0;#10;

seq_in = 0;#10;

seq_in = 1;#10;

seq_in = 0;#10;

seq_in = 0;#10;

seq_in = 1;#10;

end

//時鐘信號生成

always #5 clk = ~clk;

//模塊實例化(將申明的信號連接起來即可)

sequence_detect04 u_sequence_detect04(

.clk(clk),

.rst_n(rst_n),

.seq_in(seq_in),

.mismatch(mismatch)

);

endmodule

3.24仿真結(jié)果

輸入序列1001001001001,根據(jù)可不重疊檢測理論上可檢測兩次信號翻轉(zhuǎn),從仿真結(jié)果可以看到mismatch發(fā)生兩次翻轉(zhuǎn),且第二組的1001中的第一個1來自第一組1001中最后一個1,即發(fā)生重疊不可檢測,所以相比于重疊檢測少了第二次翻轉(zhuǎn)(同理第四次翻轉(zhuǎn)同樣不可發(fā)生)。

四、總結(jié)

狀態(tài)機法序列檢測器:一句話概括就是設(shè)計復(fù)雜、不易擴展但是檢測模式靈活。相比使用移位寄存器來說的話,狀態(tài)機稍稍復(fù)雜些,主要體現(xiàn)在不易擴展(重新檢測不同序列需重新設(shè)計狀態(tài)轉(zhuǎn)移)和狀態(tài)機的狀態(tài)轉(zhuǎn)移判斷上;但是這樣也給狀態(tài)機帶來了優(yōu)點 ,就是靈活性好,可以靈活處理輸入和輸出,因為狀態(tài)機具有可編程性。同時可以處理較為復(fù)雜的序列檢測任務(wù),因為狀態(tài)機可以支持多個狀態(tài)和轉(zhuǎn)換。

移位寄存器法:一句話概括就是設(shè)計簡單、易于擴展但是檢測模式呆板。相比于使用狀態(tài)機來說的話,只能處理簡單的序列檢測任務(wù),因為它沒有狀態(tài)機的多狀態(tài)和轉(zhuǎn)換功能。且輸入和輸出的靈活性差,因為寄存器序列移位寄存器是固定的,檢測模式固定。但是優(yōu)勢很明顯,就是設(shè)計和開發(fā)相對簡單,只需要幾個寄存器和邏輯門。且易于擴展,如果要檢測另一個序列,只需要修改輸入數(shù)據(jù)。

模式選擇:前言部分提到了檢測模式包括重疊模式、連續(xù)模式、間隔模式等等。本文著重分析重疊與非重疊檢測模式,結(jié)論是重疊檢測模式可以用狀態(tài)機和移位寄存器設(shè)計,非重疊檢測模式可以用靈活的狀態(tài)機設(shè)計;本文都是基于默認的連續(xù)檢測模式設(shè)計,如果采用間隔檢測模式,處理方法是添加指示信號使能端,可以用狀態(tài)機和移位寄存器設(shè)計。因為設(shè)計邏輯簡單,所以這部分省略,可自行參照第二部分代碼設(shè)計。

綜上所述,狀態(tài)機序列檢測器適用于處理較為復(fù)雜的序列檢測任務(wù),而寄存器序列移位寄存器適用于處理簡單的序列檢測任務(wù)。在實際應(yīng)用中,應(yīng)根據(jù)具體的需求來選擇合適的序列檢測方法。

有你想看的精彩 至芯科技FPGA就業(yè)培訓(xùn)班——助你步入成功之路、8月12號西安中心開課、歡迎咨詢! FPGA學習:阻塞賦值和非阻塞賦值的可綜合性 FPGA學習:條件語句的可綜合性

掃碼加微信邀請您加入FPGA學習交流群

歡迎加入至芯科技FPGA微信學習交流群,這里有一群優(yōu)秀的FPGA工程師、學生、老師、這里FPGA技術(shù)交流學習氛圍濃厚、相互分享、相互幫助、叫上小伙伴一起加入吧!

點個在看你最好看


原文標題:FPGA學習-序列檢測器

文章出處:【微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598901

原文標題:FPGA學習-序列檢測器

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    高效液相色譜儀的檢測器有哪些

    高效液相色譜儀(HPLC)是一種廣泛應(yīng)用于化學分析、生物醫(yī)藥、環(huán)境監(jiān)測等領(lǐng)域的分離和檢測技術(shù)。HPLC的檢測器是整個系統(tǒng)的關(guān)鍵部分,它能夠?qū)⑸V柱分離出的組分轉(zhuǎn)化為可測量的信號,從而實現(xiàn)對樣品的定量
    的頭像 發(fā)表于 08-08 10:43 ?318次閱讀

    熒光檢測器用的是什么燈光

    熒光檢測器是一種利用熒光現(xiàn)象進行物質(zhì)檢測的儀器,廣泛應(yīng)用于生物、化學、醫(yī)學等領(lǐng)域。熒光檢測器的核心部件是熒光光源,它為熒光檢測提供了必要的激發(fā)光。 一、熒光
    的頭像 發(fā)表于 08-08 10:38 ?280次閱讀

    熒光檢測器適用范圍有哪些

    、材料科學等多個方面。 一、生物分子檢測 核酸檢測 熒光檢測器在核酸檢測中具有重要應(yīng)用,如DNA測序、基因表達分析、基因突變檢測等。熒光標記
    的頭像 發(fā)表于 08-08 10:35 ?283次閱讀

    熒光檢測器用來檢測什么物質(zhì)

    熒光檢測器是一種利用熒光現(xiàn)象進行物質(zhì)檢測的儀器,廣泛應(yīng)用于化學、生物學、醫(yī)學、環(huán)境科學等領(lǐng)域。 一、熒光檢測器的工作原理 熒光檢測器的工作原理基于熒光現(xiàn)象。熒光是一種特殊的光致發(fā)光現(xiàn)象
    的頭像 發(fā)表于 08-08 10:34 ?312次閱讀

    電流檢測器有什么和什么組成

    電流檢測器是一種用于檢測電流大小的電子設(shè)備,廣泛應(yīng)用于電力系統(tǒng)、工業(yè)自動化、家用電器等領(lǐng)域。 一、電流檢測器的組成 電流檢測器主要由以下幾個部分組成: 電流傳感
    的頭像 發(fā)表于 07-19 17:12 ?342次閱讀

    電路檢測器和電流檢測器的區(qū)別

    1. 引言 電路檢測器和電流檢測器是電子工程中常用的工具,它們幫助工程師和技術(shù)人員診斷和監(jiān)測電子設(shè)備的性能。 2. 電路檢測器 定義和功能 :電路檢測器是一種用于
    的頭像 發(fā)表于 07-19 16:34 ?348次閱讀

    微功率磁感應(yīng)檢測)技術(shù)的庫門異動檢測器產(chǎn)品優(yōu)勢

    雙模地磁檢測器 一類用于PIS和PDS應(yīng)用的一體化NB-IoT無線地磁感應(yīng)檢測器,在地磁算法的基礎(chǔ)上,結(jié)合超低功耗雷達識別技術(shù),進一步提高檢測器的識別準確率。雙模地磁車位檢測器IDM-
    發(fā)表于 07-10 09:01

    手機檢測器電路圖 手機檢測器的功能和應(yīng)用

    手機檢測器是一種通過發(fā)射基波信號,接收來自目標再輻射的2次、3次甚至是更高次的諧波/組合波信號,并對目標手機進行判斷、識別和探測的設(shè)備。與定位手機信號的設(shè)備相比,手機檢測器不僅能獲取目標手機的基波
    的頭像 發(fā)表于 06-28 17:19 ?732次閱讀
    手機<b class='flag-5'>檢測器</b>電路圖 手機<b class='flag-5'>檢測器</b>的功能和應(yīng)用

    微波檢測器的原理是什么 微波檢測器的工作原理和用途

    微波檢測器是一種利用微波技術(shù)進行檢測的設(shè)備,廣泛應(yīng)用于通信、雷達、遙感、醫(yī)療等領(lǐng)域。本文將詳細介紹微波檢測器的原理、工作原理和用途。 一、微波檢測器的原理 微波
    的頭像 發(fā)表于 05-27 16:09 ?628次閱讀

    微波檢測器的工作原理 微波檢測器的性能參數(shù)

    微波檢測器是一種利用微波技術(shù)進行目標檢測的設(shè)備。它廣泛應(yīng)用于軍事、航空、航天、通信、交通等領(lǐng)域。本文將介紹微波檢測器的工作原理、性能參數(shù)以及應(yīng)用場景。 微波檢測器的工作原理 微波
    的頭像 發(fā)表于 05-27 15:45 ?511次閱讀

    微波檢測器優(yōu)缺點 微波檢測器的功能和作用

    微波檢測器是一種利用微波技術(shù)對物體進行檢測的設(shè)備。它廣泛應(yīng)用于軍事、工業(yè)、醫(yī)療、交通等領(lǐng)域。本文將詳細介紹微波檢測器的優(yōu)缺點、功能和作用。 一、微波檢測器的優(yōu)點 高頻特性:微波
    的頭像 發(fā)表于 05-27 15:42 ?835次閱讀

    過零檢測器的原理和作用

    過零檢測器(Zero Crossing Detector,ZCD)是一種用于檢測信號波形過零點的電子設(shè)備。在許多應(yīng)用中,如同步、相位鎖定環(huán)路(PLL)和頻率檢測等,過零檢測器都發(fā)揮著重
    的頭像 發(fā)表于 02-01 14:12 ?1677次閱讀
    過零<b class='flag-5'>檢測器</b>的原理和作用

    檢測器電路圖分享

    檢測器是指能檢測色譜柱流出組分及其量的變化的器件。檢測器通常分為積分型和微分型兩類。對檢測器的要求是:靈敏度高,線性范圍寬,重現(xiàn)性好,穩(wěn)定性好,響應(yīng)速度快,對不同物質(zhì)的響應(yīng)有規(guī)律性及可
    的頭像 發(fā)表于 01-10 15:47 ?5340次閱讀
    <b class='flag-5'>檢測器</b>電路圖分享

    熒光檢測器原理

    熒光檢測器原理? 熒光檢測器是一種常用的分析儀器,可以通過測量物質(zhì)在紫外或可見光激發(fā)下發(fā)出的熒光強度來分析樣品的組分和濃度。它在生物醫(yī)學、環(huán)境監(jiān)測、化學分析等領(lǐng)域有著廣泛的應(yīng)用。熒光檢測器的工作原理
    的頭像 發(fā)表于 12-08 15:47 ?2438次閱讀

    如何用VHDL設(shè)計同步序列發(fā)生檢測器?

    如何用VHDL設(shè)計同步序列發(fā)生檢測器
    發(fā)表于 10-18 08:07