chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

FPGA學(xué)習(xí)-序列檢測器

FPGA設(shè)計論壇 ? 來源:未知 ? 2023-08-29 10:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

一、前言

數(shù)字電路中,序列檢測器(Sequence Detector)是指一種特殊類型的電路,用于尋找輸入信號中一定模式的子序列。該模式可以是任意模式,包括重復(fù)模式、連續(xù)模式、間隔模式等等。通常的序列檢測方法有2種:有限狀態(tài)機(jī)法(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ù)期的序列進(jìn)行。

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

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

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

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

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

狀態(tài)機(jī)法最重要的是明白狀態(tài)機(jī)狀態(tài)的轉(zhuǎn)移過程:在數(shù)據(jù)輸入之后判斷是否匹配,若匹配則進(jìn)入下一狀態(tài),不匹配則根據(jù)輸入的數(shù)據(jù)具體判斷進(jìn)入的下一狀態(tài)(也有可能保持在原來的狀態(tài))。狀態(tài)機(jī)設(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ù)組和目標(biāo)序列對比,如果數(shù)組和目標(biāo)序列相等,則說明出現(xiàn)目標(biāo)序列。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

chaijie_default.png

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

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

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

module sequence_detect01(

input clk,

input rst_n,

input seq_in,

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

);

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

//獨熱碼相比二進(jìn)制碼和格雷碼,方便電路設(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)機(jī)的目前狀態(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)成良好代碼風(fē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;//生成隨機(jī)數(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中采用隨機(jī)數(shù)來驗證序列檢測器的準(zhǔn)確性,當(dāng)時間來到705ns,隨機(jī)數(shù)連續(xù)輸出1001,mismatch在接收四位數(shù)字進(jìn)行信號翻轉(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)成良好代碼風(fē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;//生成隨機(jī)數(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中采用隨機(jī)數(shù)來驗證序列檢測器的準(zhǔn)確性,當(dāng)時間來到705ns,隨機(jī)數(shù)連續(xù)輸出1001,mismatch在接收四位數(shù)字且在時鐘上升沿進(jìn)行信號翻轉(zhuǎn)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

module sequence_detect03(

inputclk ,

inputrst_n,

inputseq_in,

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

);

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

//獨熱碼相比二進(jìn)制碼和格雷碼,方便電路設(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)機(jī)的目前狀態(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)成良好代碼風(fē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)機(jī)完成電路,可重復(fù)檢測序列1001

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

module sequence_detect04(

inputclk ,

inputrst_n,

inputseq_in,

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

);

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

//獨熱碼相比二進(jìn)制碼和格雷碼,方便電路設(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)機(jī)的目前狀態(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)成良好代碼風(fē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)機(jī)法序列檢測器:一句話概括就是設(shè)計復(fù)雜、不易擴(kuò)展但是檢測模式靈活。相比使用移位寄存器來說的話,狀態(tài)機(jī)稍稍復(fù)雜些,主要體現(xiàn)在不易擴(kuò)展(重新檢測不同序列需重新設(shè)計狀態(tài)轉(zhuǎn)移)和狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移判斷上;但是這樣也給狀態(tài)機(jī)帶來了優(yōu)點 ,就是靈活性好,可以靈活處理輸入和輸出,因為狀態(tài)機(jī)具有可編程性。同時可以處理較為復(fù)雜的序列檢測任務(wù),因為狀態(tài)機(jī)可以支持多個狀態(tài)和轉(zhuǎn)換。

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

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

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

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

掃碼加微信邀請您加入FPGA學(xué)習(xí)交流群

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

點個在看你最好看


原文標(biāo)題:FPGA學(xué)習(xí)-序列檢測器

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


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

    關(guān)注

    1654

    文章

    22273

    瀏覽量

    629918

原文標(biāo)題:FPGA學(xué)習(xí)-序列檢測器

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    FPGA和GPU加速的視覺SLAM系統(tǒng)中特征檢測器研究

    特征檢測是SLAM系統(tǒng)中常見但耗時的模塊,隨著SLAM技術(shù)日益廣泛應(yīng)用于無人機(jī)等功耗受限平臺,其效率優(yōu)化尤為重要。本文首次針對視覺SLAM流程開展硬件加速特征檢測器的對比研究,通過對比現(xiàn)代SoC平臺
    的頭像 發(fā)表于 10-31 09:30 ?282次閱讀
    <b class='flag-5'>FPGA</b>和GPU加速的視覺SLAM系統(tǒng)中特征<b class='flag-5'>檢測器</b>研究

    汽車沖壓產(chǎn)線疊料檢測應(yīng)用--阿童木單探頭金屬雙張檢測器

    檢測器
    阿童木(廣州)智能科技有限公司
    發(fā)布于 :2025年08月26日 14:53:36

    雙張檢測器檢測瓶蓋墊片

    檢測器
    阿童木(廣州)智能科技有限公司
    發(fā)布于 :2025年08月08日 16:13:39

    表面貼裝混頻/檢測器肖特基二極管 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()表面貼裝混頻/檢測器肖特基二極管相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有表面貼裝混頻/檢測器肖特基二極管的引腳圖、接線圖、封裝手冊、中文資料、英文資料,表面貼裝混頻
    發(fā)表于 07-17 18:32
    表面貼裝混頻<b class='flag-5'>器</b>/<b class='flag-5'>檢測器</b>肖特基二極管 skyworksinc

    表面貼裝混頻檢測器肖特基二極管 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()表面貼裝混頻檢測器肖特基二極管相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有表面貼裝混頻檢測器肖特基二極管的引腳圖、接線圖、封裝手冊、中文資料、英文資料,表面貼裝混頻
    發(fā)表于 07-17 18:31
    表面貼裝混頻<b class='flag-5'>器</b>和<b class='flag-5'>檢測器</b>肖特基二極管 skyworksinc

    帶功率檢測器的 2.4 GHz 功率放大器 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()帶功率檢測器的 2.4 GHz 功率放大器相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有帶功率檢測器的 2.4 GHz 功率放大器的引腳圖、接線圖、封裝手冊、中文資料、英文資料,帶功率檢測器
    發(fā)表于 07-01 18:29
    帶功率<b class='flag-5'>檢測器</b>的 2.4 GHz 功率放大器 skyworksinc

    帶功率檢測器的 5 GHz 功率放大器 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()帶功率檢測器的 5 GHz 功率放大器相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有帶功率檢測器的 5 GHz 功率放大器的引腳圖、接線圖、封裝手冊、中文資料、英文資料,帶功率檢測器的 5
    發(fā)表于 06-30 18:35
    帶功率<b class='flag-5'>檢測器</b>的 5 GHz 功率放大器 skyworksinc

    帶功率檢測器的 5 GHz 前端模塊 skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()帶功率檢測器的 5 GHz 前端模塊相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有帶功率檢測器的 5 GHz 前端模塊的引腳圖、接線圖、封裝手冊、中文資料、英文資料,帶功率檢測器的 5 GHz 前端模塊真值表,帶功率
    發(fā)表于 06-19 18:35
    帶功率<b class='flag-5'>檢測器</b>的 5 GHz 前端模塊 skyworksinc

    Analog Devices Inc. ADL5507對數(shù)射頻功率檢測器數(shù)據(jù)手冊

    Analog Devices ADL5507對數(shù)射頻功率檢測器設(shè)計用于測量10MHz至12GHz頻率范圍內(nèi)的射頻信號。完整的低功耗寬帶對數(shù)ADL5507射頻功率檢測器經(jīng)過優(yōu)化,可在55dB動態(tài)范圍
    的頭像 發(fā)表于 06-06 14:42 ?625次閱讀
    Analog Devices Inc. ADL5507對數(shù)射頻功率<b class='flag-5'>檢測器</b>數(shù)據(jù)手冊

    汽車產(chǎn)線疊料檢測應(yīng)用案例-阿童木8200S雙張檢測器

    檢測器
    阿童木(廣州)智能科技有限公司
    發(fā)布于 :2025年04月08日 14:34:54

    汽車行業(yè)專用雙張檢測器防雙張檢測-阿童木金屬雙張檢測器# 汽車#雙料

    檢測器
    阿童木(廣州)智能科技有限公司
    發(fā)布于 :2025年03月12日 14:12:32

    小家電部件沖壓疊料檢測應(yīng)用案例-阿童木金屬雙張檢測器# 家電# 沖壓# 傳感# 金屬雙張檢測器

    檢測器
    阿童木(廣州)智能科技有限公司
    發(fā)布于 :2025年02月17日 15:28:29

    壓力檢測器有哪些優(yōu)勢

    在現(xiàn)代工業(yè)與基礎(chǔ)設(shè)施管理中,壓力檢測器作為監(jiān)測與控制系統(tǒng)的關(guān)鍵組件,扮演著重要的角色。壓力檢測器集高精度、高穩(wěn)定性與便捷操作于一體,在供水、排水、消防水系統(tǒng)、輸油管道、輸氣管道等多個領(lǐng)域,為設(shè)備的穩(wěn)定運行與工業(yè)安全提供有力保障。
    的頭像 發(fā)表于 01-07 17:09 ?1098次閱讀

    鎳片單雙片檢測-阿童木雙張檢測器

    檢測器
    阿童木(廣州)智能科技有限公司
    發(fā)布于 :2025年01月02日 16:48:42

    小單探頭金屬單雙張檢測器

    檢測器
    阿童木(廣州)智能科技有限公司
    發(fā)布于 :2024年12月24日 15:03:14