練習8 利用有限狀態機進行時序邏輯設計

2021-09-25 16:36:20 字數 3277 閱讀 9081

`timescale 1ns / 1ps

//// company:

// engineer:

// // create date: 18:29:57 07/29/2019

// design name:

// module name: seqdet_test

// project name:

// target devices:

// tool versions:

// description:

//// dependencies:

//// revision:

// revision 0.01 - file created

// additional comments:

////

module seqdet_test(

x,z,

clk,

rst,

state

);input x,clk,rst;

output z;

output [2:0]state;

reg [2:0]state;

wire z;

parameter idle = 'd0,a = 'd1,b = 'd2,

c = 'd3,d = 'd4,

e = 'd5,f = 'd6,

g = 'd7;

assign z = (state == e && x == 0)?1:0;

//當x序列10010最後乙個0剛到時刻,時鐘沿立刻將狀態變成e,此時z應該變成高

always @(posedge clk)

if(!rst)

begin

state <= idle;

endelse

ca***(state)

idle : if(x == 1)

begin

state <= a; //第乙個碼位正確,記為a

enda : if(x == 0)

begin

state <= b; //第二個碼位正確,記為b

endb : if(x == 0)

begin

state <= c; //第三個碼位正確,記為c

endelse

begin

state <= f; //前功盡棄,101,記為f,有問題,為何不是a

endc : if(x == 1)

begin

state <= d; //第四個碼位正確,記為d

endelse

begin

state <= g;//前功盡棄,1000,記為g

endd : if(x == 0)

begin

state <= e;//第五個碼位正確,記為e

endelse

begin

state <= a;

//第五個碼位不對,10011但是剛進入的1位有用,所以回到第乙個碼位對應位置,即為a狀態

ende : if(x == 0)

begin

state <= c;

//連著前面輸入的x序列,考慮10010,又輸入了0碼位可以認為第三個碼位已對,記為狀態c

endelse

begin

state <= a;//前功盡棄,只有剛輸入的1碼位有用,記為a狀態

endf : if(x == 1)

begin

state <= a;

endelse //輸入的0碼位正確,記為b

begin

state <= b;

endg : if(x == 1)

begin

state <= f; //書中是f,為何不是a

enddefault : state = idle; //預設為初始狀態

endcase

endmodule

`timescale 1ns / 1ns

// company:

// engineer:

//// create date: 19:39:38 07/29/2019

// design name: seqdet_test

// module name: d:/fpga/project/seqdet_test/testbench/vtf_seqdet_test.v

// project name: seqdet_test

// target device:

// tool versions:

// description:

//// verilog test fixture created by ise for module: seqdet_test

//// dependencies:

// // revision:

// revision 0.01 - file created

// additional comments:

// module vtf_seqdet_test;

// inputs

// reg x;

reg clk;

reg rst;

reg [23:0]data;

// outputs

wire x,z;

wire [2:0] state;

assign x = data[23];

always #10 clk = ~clk;

always @(posedge clk)

data = ; //資料向左移動

有限狀態機

有限狀態機 finite state machine,fsm 又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。狀態儲存關於過去的資訊,就是說 它反映從系統開始到現在時刻的輸入變化。轉移指示狀態變更,並且用必須滿足來確使轉移發生的條件來描述它。動作是在給...

有限狀態機

以前,只碰到過 陣列中所有數字只出現2次,只有乙個出現1次,找這個數的問題 每次迴圈異或陣列中元素,最後的結果就是single one。這次換作出現3次就懵逼了,主要原因,沒有使用過有限狀態機,應該說是連概念都沒有,所以這次一定要好好記錄一下 關於這道題的解釋discussion中woshidais...

有限狀態機

需要掌握的名詞 數字系統有兩大類有限狀態機 finite state machine,fsm moore狀態機和mealy狀態機。狀態機名 次態輸出 moore摩爾 f 現狀,輸入 g 現狀 mealy公尺粒 f 現狀,輸入 g 現狀,輸入 mealy型狀態機 下一狀態不但與當前狀態有關,還與當前輸...