HDLBITS笔记35:独热编码状态机,ps/2数据包解析器,ps/2数据包和数据路径
目錄
題目1:Fsm onehot(熱編碼的有限狀態(tài)機(jī))
?題目2:Fsm ps2(ps/2數(shù)據(jù)包解析器)
題目3:Fsm ps2data(ps/2數(shù)據(jù)包解析器和數(shù)據(jù)路徑)
題目1:Fsm onehot(熱編碼的有限狀態(tài)機(jī))
給定以下?tīng)顟B(tài)機(jī),具有 1 個(gè)輸入和 2 個(gè)輸出:
假設(shè)此狀態(tài)機(jī)使用單熱編碼,其中狀態(tài)[0]通過(guò)狀態(tài)[9]分別對(duì)應(yīng)于狀態(tài)S0和S9。除非另有指定,否則輸出為零。
實(shí)現(xiàn)狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換邏輯和輸出邏輯部分(但不是狀態(tài)觸發(fā)器)。在狀態(tài)[9:0]中,您將獲得當(dāng)前狀態(tài),并且必須產(chǎn)生next_state[9:0]和兩個(gè)輸出。通過(guò)檢查假設(shè)一熱編碼來(lái)推導(dǎo)邏輯方程。(測(cè)試平臺(tái)將使用非一個(gè)熱輸入進(jìn)行測(cè)試,以確保您不會(huì)嘗試執(zhí)行更復(fù)雜的操作)。
模塊聲明
module top_module(input in,input [9:0] state,output [9:0] next_state,output out1,output out2);提示:一熱狀態(tài)轉(zhuǎn)換邏輯的邏輯方程可以通過(guò)查看狀態(tài)轉(zhuǎn)換圖的邊緣來(lái)推導(dǎo)。
根據(jù)狀態(tài)流程圖寫(xiě)出邏輯關(guān)系,輸出也是一樣的道理。
module top_module(input in,input [9:0] state,output [9:0] next_state,output out1,output out2);parameter s0 =4'd0,s1 = 4'd1,s2 = 4'd2,s3 = 4'd3,s4 = 4'd4,s5 = 4'd5,s6 = 4'd6,s7 = 4'd7,s8 = 4'd8,s9 = 4'd9;//狀態(tài)邏輯assign next_state[s0] = !in &( state[s0] | state[s1] | state[s2] | state[s3] | state[s4] | state[7] | state[s8] | state[s9]);assign next_state[s1] = in &( state[s0] | state[s8] | state[s9]);assign next_state[s2] = in &( state[s1]);assign next_state[s3] = in & state[s2] ;assign next_state[s4] = in & state[s3] ;assign next_state[s5] = in & state[s4] ;assign next_state[s6] = in & state[s5] ;assign next_state[s7] = in & (state[s6] | state[7]);assign next_state[s8] = !in & state[s5] ;assign next_state[s9] = !in & state[s6] ;//輸出邏輯assign out1 = state[8]|state[9];assign out2 = state[7]|state[9]; endmodule仿真結(jié)果:
?題目2:Fsm ps2(ps/2數(shù)據(jù)包解析器)
PS/2 鼠標(biāo)協(xié)議發(fā)送長(zhǎng)度為 3 個(gè)字節(jié)的消息。但是,在連續(xù)字節(jié)流中,消息的開(kāi)始和結(jié)束位置并不明顯。唯一的指示是,每個(gè)三字節(jié)消息的第一個(gè)字節(jié)始終具有?bit[3]=1(但其他兩個(gè)字節(jié)的位 [3] 可能是 1 或 0,具體取決于數(shù)據(jù))。
我們想要一個(gè)有限的狀態(tài)機(jī),當(dāng)給定輸入字節(jié)流時(shí),它將搜索消息邊界。我們將使用的算法是丟棄字節(jié),直到我們看到一個(gè)位[3]=1的字節(jié)。然后,我們假設(shè)這是消息的字節(jié) 1,并在收到所有 3 個(gè)字節(jié)(完成)后發(fā)出接收消息的信號(hào)。
FSM 應(yīng)在成功接收到每條消息的第三個(gè)字節(jié)后立即在周期內(nèi)發(fā)出信號(hào)。
一些時(shí)序圖來(lái)解釋所需的行為
在無(wú)差錯(cuò)條件下,每三個(gè)字節(jié)形成一條消息:
發(fā)生錯(cuò)誤時(shí),搜索字節(jié) 1:
請(qǐng)注意,這與?1xx?序列識(shí)別器不同。此處不允許使用重疊序列:
模塊聲明
module top_module(input clk,input [7:0] in,input reset, // Synchronous resetoutput done);代碼編寫(xiě)如下:
module top_module(input clk,input [7:0] in,input reset, // Synchronous resetoutput done); //reg [1:0] state,next_state;parameter s0 = 2'd0,s1 = 2'd1,s2 = 2'd2,s3 = 2'd3;// State transition logic (combinational),組合邏輯always @(*)begincase(state)s0:begin;if(!in[3])next_state = s0;elsenext_state = s1;ends1: next_state = s2;s2: next_state = s3;s3:beginif(!in[3])next_state = s0;elsenext_state = s1;endendcaseend// State flip-flops (sequential),時(shí)序邏輯always @(posedge clk)beginif(reset)state <= s0;elsestate <= next_state;end// Output logic,輸出邏輯assign done = (state==s3);endmodule題目3:Fsm ps2data(ps/2數(shù)據(jù)包解析器和數(shù)據(jù)路徑)
另請(qǐng)參見(jiàn):PS/2 數(shù)據(jù)包解析器。
現(xiàn)在,您已經(jīng)有了一個(gè)狀態(tài)機(jī),它將識(shí)別 PS/2 字節(jié)流中的三字節(jié)消息,請(qǐng)?zhí)砑右粋€(gè)數(shù)據(jù)路徑,該數(shù)據(jù)路徑還將在收到數(shù)據(jù)包時(shí)輸出 24 位(3 字節(jié))消息(out_bytes[23:16]?是第一個(gè)字節(jié),out_bytes[15:8]?是第二個(gè)字節(jié),依此類(lèi)推)。
每當(dāng)斷言完成信號(hào)時(shí),out_bytes都需要有效。您可以在其他時(shí)間輸出任何內(nèi)容(即,不要在乎)。
模塊聲明?
module top_module(input clk,input [7:0] in,input reset, // Synchronous resetoutput [23:0] out_bytes,output done);分析:觀察所給的圖例,當(dāng)done=1,in位1時(shí),輸出24位才有效。當(dāng)in為1,done為1,輸出out——bytes才依次從高8位,中8位,低8位輸出。當(dāng)done為0時(shí),不關(guān)心輸出。
代碼如下:
module top_module(input clk,input [7:0] in,input reset, // Synchronous resetoutput [23:0] out_bytes,output done); //reg [1:0] state,next_state;parameter [1:0] s0 = 2'd0,s1 = 2'd1,s2 = 2'd2 ,s3 = 2'd3;// FSM from fsm_ps2always @(*)begincase(state)s0:beginif(!in[3])next_state = s0;elsenext_state = s1;ends1:next_state = s2;s2:next_state = s3;s3:beginif(!in[3])next_state = s0;elsenext_state = s1;endendcaseend// New: Datapath to store incoming bytes.always @(posedge clk)beginif(reset)state <= s0;elsestate <= next_state ;endalways @(posedge clk)beginif(next_state == s1) beginout_bytes[23:16] <= in;endelse if(next_state == s2)beginout_bytes[15:8] <= in;endelse if(next_state == s3)beginout_bytes[7:0] <= in;endelse beginout_bytes <= 24'b0;endendassign done = (state == s3);endmodule仿真結(jié)果如下:
總結(jié)
以上是生活随笔為你收集整理的HDLBITS笔记35:独热编码状态机,ps/2数据包解析器,ps/2数据包和数据路径的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 雅致古典山水中国风PPT模板
- 下一篇: 2019年度中职组“网络空间安全”赛项赣