Verilog HDL設計進階:有限狀態機的設計原理及其代碼風格

2020-12-08 電子產品世界

由於Verilog HDL和 VHDL 行為描述用於綜合的歷史還只有短短的幾年,可綜合風格的Verilog HDL 和VHDL的語法只是它們各自語言的一個子集。又由於HDL的可綜合性研究近年來非常活躍,可綜合子集的國際標準目前尚未最後形成,因此各廠商的綜合器所支持的HDL子集也略有所不同。

本文引用地址:http://www.eepw.com.cn/article/201610/308584.htm

本書中有關可綜合風格的Verilog HDL的內容,我們只著重介紹RTL級、算法級和門級邏輯結構的描述,而系統級(數據流級)的綜合由於還不太成熟,暫不作介紹。

由於寄存器傳輸級(RTL)描述是以時序邏輯抽象所得到的有限狀態機為依據的,所以把一個時序邏輯抽象成一個同步有限狀態機是設計可綜合風格的Verilog HDL模塊的關鍵。

在本章中我們將通過各種實例由淺入深地來介紹各種可綜合風格的Verilog HDL模塊,並把重點放在時序邏輯的可綜合有限狀態機的Verilog HDL設計要點。至於組合邏輯,因為比較簡單,只需閱讀典型的用Verilog HDL描述的可綜合的組合邏輯的例子就可以掌握。

為了更好地掌握可綜合風格,還需要較深入地了解阻塞和非阻塞賦值的差別和在不同的情況下正確使用這兩種賦值的方法。只有深入地理解阻塞和非阻塞賦值語句的細微不同,才有可能寫出不僅可以仿真也可以綜合的Verilog HDL模塊。

只要按照一定的原則來編寫代碼就可以保證Verilog模塊綜合前和綜合後仿真的一致性。符合這樣條件的可綜合模塊是我們設計的目標,因為這種代碼是可移植的,可綜合到不同的FPGA和不同工藝的ASIC中,是具有智慧財產權價值的軟核。

4.4.1 有限狀態機(FSM)設計原理

有限狀態機是由寄存器組和組合邏輯構成的硬體時序電路。有限狀態機的狀態(即由寄存器組的1和0的組合狀態所構成的有限個狀態)只可能在同一時鐘跳變沿的情況下才能從一個狀態轉向另一個狀態。

有限狀態機的下一個狀態不但取決於各個輸入值,還取決於當前所在狀態。這裡指的是米裡Mealy型有限狀態機,而莫爾Moore型有限狀態機的下一個狀態只決於當前狀態。

Verilog HDL中可以用許多種方法來描述有限狀態機,最常用的方法是用always語句和case語句。如圖4.1所示的狀態轉移圖表示了一個有限狀態機,例4.1的程序就是該有限狀態機的多種Verilog HDL模型之一。

圖4.1的狀態轉移圖表示了一個四狀態的有限狀態機。它的同步時鐘是Clock,輸入信號是A和Reset,輸出信號是F和G。

狀態的轉移只能在同步時鐘(Clock)的上升沿時發生,往哪個狀態的轉移則取決於目前所在的狀態和輸入的信號(Reset和A)。下面的例子是該有限狀態機的Verilog HDL模型之一。

例4.1:Gray碼有限狀態機模型1。

module fsm (Clock, Reset, A, F, G); //模塊聲明
input Clock, Reset, A;
output F,G;
reg F,G;
reg [1:0] state ;

parameter //狀態聲明
Idle = 2』b00, Start = 2』b01,
Stop = 2』b10, Clear = 2』b11;

always @(posedge Clock)
if (!Reset) begin
state = Idle; F=0; G=0; //默認狀態
end
else case (state)
idle: begin //Idle狀態
if (A) begin
state = Start;
G=0;
end
elsestate = idle;
end
start: //Start狀態
if (!A) state = Stop;
else state = start;
Stop: begin //Stop狀態
if (A) begin
state = Clear;
F = 1;
end
else state = Stop;
end
Clear: begin //Clear狀態
if (!A) begin
state =Idle;
F =0; G =1;
end
else state = Clear;
end
endcase
endmodule

也可以用下面的Verilog HDL模型來表示同一個有限狀態。


例4.2:獨熱碼有限狀態和模型。

module fsm (Clock, Reset, A, F, G); //模塊聲明
input Clock, Reset, A;
output F,G;
reg F,G;
reg [3:0] state ;

parameter //狀態聲明
Idle = 4』b1000,
Start = 4』b0100,
Stop = 4』b0010,
Clear = 4』b0001;

always @(posedge clock)
if (!Reset) begin
state = Idle; F=0; G=0; //默認狀態
end
else case (state)
Idle: begin //Idel狀態
if (A) begin
state = Start;
G=0;
end
else state = Idle;
end
Start: //Start狀態
if (!A) state = Stop;
else state = Start;
Stop: begin //Stop狀態
if (A) begin
state = Clear;
F = 1;
end
else state = Stop;
end
Clear: begin //Clear狀態
if (!A) begin
state =Idle;
F=0; G=1;
end
else state = Clear;
end
default: state =Idle; //默認狀態
endcase
endmodule


例4.2與例4.1的主要不同點是狀態編碼方式。例4.2採用了獨熱編碼,而例4.1則採用Gray碼,究竟採用哪一種編碼好要看具體情況而定。


對於用FPGA實現的有限狀態機建議採用獨熱碼。因為雖然採用獨熱編碼多用了兩個觸發器,但所用組合電路可省下許多,因而使電路的速度和可靠性有顯著提高,而總的單元數並無顯著增加。


採用了獨熱碼後有了多餘的狀態,就有一些不可到達的狀態,為此在CASE語句的最後需要增加default分支項,以確保多餘狀態能回到Idle狀態。


另外還可以用另一種風格的Verilog HDL模型來表示同一個有限狀態。在這個模型中,我們用always語句和連續賦值語句把狀態機的觸發器部分和組合邏輯部分分成兩部分來描述,如下所示。


例4.3:有限狀態機模型3

module fsm (Clock, Reset, A, F, G); //模塊聲明
input Clock, Reset, A;
output F,G;
reg [1:0] state ;
wire [1:0] Nextstate;

parameter //狀態聲明
Idle = 2』b00, Start = 2』b01,
Stop = 2』b10, Clear = 2』b11;

always @(posedge Clock)
if (!Reset) begin
state = Idle; //復位狀態
end
else
state = Nextstate; //狀態轉換

assign Nextstate = //狀態變換條件
(state == Idle ) ? (A ? Start : Idle):
(state==Start ) ? (!A ? Stop : Start ):
(state== Stop ) ? (A ? Clear : Stop ):
(state== Clear) ? (!A ? Idle : Clear) : Idle;

assign F = (( state == Stop) A ); //狀態輸出
assign G = (( state == Clear) (!A || !Reset)) //狀態輸出
endmodule

下面是第4種風格的Verilog HDL模型來表示同一個有限狀態。在這個模型中,我們分別用沿觸發的always語句和電平敏感的always語句把狀態機的觸發器部分和組合邏輯部分分成兩部分來描述。


例4.4:有限狀態機模型4。

module fsm (Clock, Reset, A, F, G); //模塊聲明
input Clock, Reset, A;
output F,G;
reg [1:0] state, Nextstate;

parameter //狀態聲明
Idle = 2』b00, Start = 2』b01,
Stop = 2』b10, Clear = 2』b11;

always @(posedge Clock)
if (!Reset) begin
state = Idle; //默認狀態
end
else
state = Nextstate; //狀態轉換

always @( state or A ) begin
F=0;
G=0;
if (state == Idle) begin //處於Idel狀態時,對A判斷
if (A)
Nextstate = Start; //Start狀態
else
Nextstate = Idle; //保持Idel狀態
G=1;
end
else if (state == Start) //處於Start狀態時,對!A判斷
if (!A)
Nextstate = Stop; //Stop狀態
else
Nextstate = Start; //保持Start狀態
else if (state == Stop) //處於Stop狀態時,對A判斷
if (A)
Nextstate = Clear; //Clear狀態
else
Nextstate = Stop; //保持Stop狀態
else if (state == Clear) begin //處於Clear狀態時,對!A判斷
if (!A)
Nextstate = Idle; //Idel狀態
else
Nextstate = Clear; //保持Clear狀態
F=1;
end
else
Nextstate= Idle; //默認狀態
End
endmodule

上面4個例子是同一個狀態機的4種不同的Verilog HDL模型,它們都是可綜合的,在設計複雜程度不同的狀態機時有它們各自的優勢。如用不同的綜合器對這4個例子進行綜合,綜合出的邏輯電路可能會有些不同,但邏輯功能是相同的。


下面講解有限狀態機設計的一般步驟。


(1)邏輯抽象,得出狀態轉換圖。
就是把給出的一個實際邏輯關係表示為時序邏輯函數,可以用狀態轉換表來描述,也可以用狀態轉換圖來描述,這就需要完成以下任務。


① 分析給定的邏輯問題,確定輸入變量、輸出變量以及電路的狀態數。通常是取原因(或條件)作為輸入變量,取結果作為輸出變量。
② 定義輸入、輸出邏輯狀態的含意,並將電路狀態順序編號。
③ 按照要求列出電路的狀態轉換表或畫出狀態轉換圖。
這樣,就把給定的邏輯問題抽象到一個時序邏輯函數了。


(2)狀態化簡。
如果在狀態轉換圖中出現這樣兩個狀態,它們在相同的輸入下轉換到同一狀態去,並得到一樣的輸出,則稱它們為等價狀態。顯然等價狀態是重複的,可以合併為一個。電路的狀態數越少,存儲電路也就越簡單。狀態化簡的目的就在於將等價狀態儘可能地合併,以得到最簡的狀態轉換圖。


(3)狀態分配。
狀態分配又稱狀態編碼。通常有很多編碼方法,編碼方案選擇得當,設計的電路可以很簡單。反之,若編碼方案選得不好,則設計的電路就會複雜許多。


實際設計時,需綜合考慮電路複雜度與電路性能之間的折衷。在觸發器資源豐富的FPGA或ASIC設計中,採用獨熱編碼(one-hot-coding)既可以使電路性能得到保證,又可充分利用其觸發器數量多的優勢。


(4)選定觸發器的類型並求出狀態方程、驅動方程和輸出方程。


(5)按照方程得出邏輯圖。

用Verilog HDL來描述有限狀態機,可以充分發揮硬體描述語言的抽象建模能力,使用always塊語句和case(if)等條件語句及賦值語句即可方便實現。具體的邏輯化簡及邏輯電路到觸發器映射均可由計算機自動完成。上述設計步驟中的第(2)、(4)、(5)步不再需要很多的人為幹預,使電路設計工作得到簡化,效率也有很大的提高。


4.4.2 FSM設計實例


例4.5:宇宙飛船控制器的狀態機。

module statmch1( launch_shuttle, land_shuttle, start_countdown,
start_trip_meter, clk, all_systems_go,
just_launched, is_landed, cnt, abort_mission
);
// I/O說明
output launch_shuttle, land_shuttle, start_countdown,start_trip_meter;
input clk, just_launched, is_landed, abort_mission,all_systems_go;
input [3:0] cnt;
reg launch_shuttle, land_shuttle, start_countdown,start_trip_meter;
reg [4:0] present_state, next_state;
//設置獨熱碼狀態的參數
parameter HOLD=5'h1, SEQUENCE=5'h2, LAUNCH=5'h4;
parameter ON_MISSION=5'h8, LAND=5'h10;

always @(negedge clk or posedge abort_mission) begin
//把輸出設置成某個預設值,在下面的case語句中就不必再設置輸出的預設值
{launch_shuttle, land_shuttle, start_trip_meter, start_countdown} = 4'b0;
//檢查異步reset的值,即abort_mission的值
if(abort_mission)
next_state = LAND;
else begin
//如果abort_mission為零,把next_state賦值為present_state
next_state = present_state;
//根據 present_state 和輸入信號,設置 next_state和輸出output
case ( present_state )
HOLD: //HOLD狀態
if(all_systems_go) begin
next_state = SEQUENCE;
start_countdown = 1;
end
SEQUENCE: //SEQUENCE狀態
if(cnt==0)
next_state = LAUNCH;
LAUNCH: begin //LAUNCH狀態
next_state = ON_MISSION;
launch_shuttle = 1;
end
ON_MISSION: //ON_MISSION狀態
if(just_launched)
start_trip_meter = 1; //取消使命前,一直留在使命狀態
LAND: //LAND狀態
if(is_landed)
next_state = HOLD;
else land_shuttle = 1;
default: next_state = 'bx;//把預設狀態設置為'bx(無關)或某種已
//知狀態,使其在做仿真時,在復位前就
//與實際情況相一致
endcase
end // if-else語句結束
present_state = next_state; //把當前狀態變量設置為下一狀態,
//待下一有效時鐘沿來到時,當前狀
//態變量已設置了正確的狀態值
end //always塊結束
endmodule


4.4.3 設計可綜合狀態機的指導原則
(1)獨熱碼。
因為大多數FPGA內部的觸發器數目相當多,又加上獨熱碼狀態機(one hot state machine)的解碼邏輯最為簡單,所以在設計採用FPGA實現的狀態機時,往往採用獨熱碼狀態機(即每個狀態只有一個寄存器置位的狀態機)。


(2)case語句。
建議採用case、casex或casez語句來建立狀態機的模型。因為這些語句表達清晰明了,可以方便地從當前狀態分支轉向下一個狀態並設置輸出。


採用這些語句設計狀態機時,不要忘記寫上case語句的最後一個分支default,並將狀態變量設為'bx。這就等於告知綜合器:case語句已經指定了所有的狀態。這樣綜合器就可以刪除不需要的解碼電路,使生成的電路簡潔,並與設計要求一致。


如果將預設狀態設置為某一確定的狀態(例如:設置default:state = state1),行不行呢?」這樣做有一個問題需要注意:因為儘管綜合器產生的邏輯和設置「default:state='bx」時相同,但是狀態機的Verilog HDL模型綜合前和綜合後的仿真結果會不一致。


為什麼會是這樣呢?因為啟動仿真器時,狀態機所有的輸入都不確定,因此立即進入default狀態。如果通過設置將狀態變量設為state1,但是實際硬體電路的狀態機在通電之後,進入的狀態是不確定的,很可能不是state1的狀態,這樣就會產生不必要的衝突。


因此,還是設置「default:state='bx」與實際硬體電路相一致。但在有多餘狀態的情況下還是應將預設狀態設置為某一確定的有效狀態,因為這樣做能使狀態機若偶然進入多餘狀態後仍能在下一時鐘跳變沿時返回正常工作狀態,否則會引起死鎖。


(3)復位。
狀態機應該有一個異步或同步復位端,以便在通電時將硬體電路復位到有效狀態,也可以在操作中將硬體電路復位(大多數FPGA結構都允許使用異步復位端)。


(4)惟一觸發。
目前大多數綜合器往往不支持在一個always塊中由多個事件觸發的狀態機(即隱含狀態機,implicit state machines)。因此為了能綜合出有效的電路,用Verilog HDL描述的狀態機應明確地由惟一時鐘觸發。


(5)異步狀態機。
異步狀態機是沒有確定時鐘的狀態機,它的狀態轉移不是由惟一的時鐘跳變沿所觸發。目前大多數綜合器不能綜合採用Verilog HDL描述的異步狀態機。


因此應儘量不要使用綜合工具來設計異步狀態機。因為目前大多數綜合工具在對異步狀態機進行邏輯優化時會胡亂地簡化邏輯,使綜合後的異步狀態機不能正常工作。如果一定要設計異步狀態機,建議採用電路圖輸入的方法,而不要用Verilog HDL輸入的方法。


(6)狀態賦值。
Verilog HDL中,狀態必須明確賦值,通常使用參數parameters或宏定義define語句加上賦值語句來實現。


使用參數parameters語句賦狀態值如下所示:

parameter state1 = 2 'h1, state2 = 2 'h2;
...
current_state = state2; //把current state設置成 2'h2
...

使用宏定義define語句賦狀態值如下所示:

'define state1 2 'h1
'define state2 2 'h2
...
current_state = 'state2; //把current state設置成 2 'h2

相關焦點

  • Verilog HDL設計進階:有限狀態機的設計原理及其代
    由於寄存器傳輸級(RTL)描述是以時序邏輯抽象所得到的有限狀態機為依據的,所以把一個時序邏輯抽象成一個同步有限狀態機是設計可綜合風格的Verilog HDL模塊的關鍵。在本章中我們將通過各種實例由淺入深地來介紹各種可綜合風格的Verilog HDL模塊,並把重點放在時序邏輯的可綜合有限狀態機的Verilog HDL設計要點。
  • 初學者對有限狀態機(FSM)的設計的認識
    有限狀態機(FSM)是一種常見的電路,由時序電路和組合電路組成。設計有限狀態機的第一步是確定採用Moore狀態機還是採用Mealy狀態機。(Mealy型:狀態的轉變不僅和當前狀態有關,而且跟各輸入信號有關;Moore型:狀態的轉變只和當前狀態有關)。
  • 硬體描述語言Verilog HDL設計進階之: 典型實例-狀態機應用
    狀態機,顧名思義,就是一系列狀態組成的一個循環機制,這樣的結構使得編程人員能夠更好地使用HDL語言,同時具有特定風格的狀態機也能提高程序的可讀性和調試性。本實例通過設計一個狀態機來控制紅色颶風II代Xilinx開發板上面的8個LED燈循環閃爍。在本實例狀態機的設計過程中,讀者需要著重注意狀態機設計的一些特性。·FSM設計方法(米勒型和摩爾型)。
  • 用STATECAD快速設計有限狀態機
    控制單元的實現方式有: 有限狀態機、控制寄存器和微代碼控制器等。有限狀態機在時間尺度上對其控制信號進行離散化控制, 利用狀態轉移使控制信號在有限狀態機的狀態節拍控制下變化, 以實現對被控對象的控制。有限狀態機設計的關鍵是如何把一個實際的時序邏輯關係抽象成一個時序邏輯函數,傳統的電路圖輸入法通過直接設計寄存器組來實現各個狀態之間的轉換, 而用硬體描述語言來描述有限狀態機, 往往是通過充分發揮硬體描述語言的抽象建模能力,通過對系統在系統級或寄存器傳輸級進行描述來建立有限狀態機。EDA 工具的快速發展,使通過CAD快速設計有限狀態機自動化成為可能。
  • 如何以面向對象的思想設計有限狀態機
    狀態機的概念有限狀態機又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學計算模型,用英文縮寫也被簡稱為 FSM。FSM 會響應「事件」而改變狀態,當事件發生時,就會調用一個函數,而且 FSM 會執行動作產生輸出,所執行的動作會因為當前系統的狀態和輸入的事件不同而不同。
  • 基於有限狀態機的飛行器自毀系統時序控制設計
    分析飛行器自毀系統工作原理,採用複雜可編程邏輯器件(CPLD)實現了飛行器自毀系統設計,結合CPLD的特點,提出一種基於改進型有限狀態機的飛行器自毀系統時序控制的設計方法,並在CPLD中予以實現。仿真及實驗表明,基於有限狀態機的飛行器自毀系統定時精度達到納秒級,可以有效地控制自毀信號輸出並消除毛刺現象,很好地滿足系統性能要求。該方法具有結構簡單緊湊、成本低、可靠性高、精度高等優點。
  • 基於VHDL的MTM總線主模塊有限狀態機設計
    摘要:為了能夠更簡潔嚴謹地描述MTM總線的主模塊有限狀態機的狀態轉換,同時減少FPGA晶片功耗,提高系統穩定性,文中在分析MTM總線結構和主模塊有限狀態機模型的基礎上,基於VHDL語言採用「單進程」式對該有限狀態機進行了設計,並在QuartusⅡ開發軟體中實現了對語言代碼的編譯及程序的時序仿真和功能仿真
  • 利用有限狀態機的交通燈控制系統設計與仿真
    摘要:基於硬體電路設計軟體化的思想,根據路口交通燈控制功能要求,以可編程邏輯器件(FPGA)為硬體基礎,以有限狀態機為設計基礎,通過對系統狀態及其轉移關係的定義,運用多進程方式描述硬體模塊的邏輯關係,用VHDL語言編程實現了交通燈控制系統,經仿真,並在實驗箱上進行功能測試
  • 有限狀態機的FPGA設計
    有限狀態機是一種常見的電路,由於時序電路和組合電路組成,設計有限狀態機的第一步是確定採用Moore狀態機還是採用Mealy狀態機。Mealy狀態機的狀態轉變不僅和當前狀態有關,而且和各輸入信號有關;Moore狀態機的轉變只和當前狀態有關。
  • 基於Verilog的順序狀態邏輯FSM設計與仿真
    這在設計過程中,進行邏輯結構部分設計時可以將行為結構和層次化結構混合起來;為確認正確性還可以將描述進行模擬,並提供一些用於自動設計的綜合工具。因而Verilog語言為設計者進行大型複雜數字系統的設計提供了途徑。超大規模集成電路設計的典型流程如圖1所示。   本文將以順序狀態邏輯有限狀態機的設計為例介紹用Verilog語言設計數字電路的一般過程。
  • 用VHDL設計有限狀態機的方法
    受控部分通常是設計者們所熟悉的各種功能電路,設計較為容易。主要任務是設計控制器,而其控制功能可以用有限狀態機來實現。因而有必要深入探討有限狀態機的設計方法。本文引用地址:http://www.eepw.com.cn/article/150667.htm1 狀態機設計的一般方法  傳統的設計方法是首先繪製出控制器的狀態圖,並由此列出狀態表,再合併消除狀態表中的等價狀態項。在完成狀態寄存器的分配之後,根據狀態表求出次態及輸出方程,最後畫出設計原理圖。
  • 基於FPGA與有限狀態機的高精度測角系統的設計與實
    本文介紹的有限狀態機方法,在FPGA上可以有效消除抖動引起的計數幹擾,提高計數的精度[1]。1 方案設計1.1 系統組成雷射跟蹤測量系統的核心處理模塊主要由ARM處理器,FPGA組成。2 理論分析與算法2.1 有限狀態機原理在編碼器的一個輸出周期內
  • 賽靈思Verilog(FPGA/CPLD)設計小技巧
    以下是一個在設計中常犯的錯誤列表這些錯誤常使得你的設計不可靠或速度較慢為了提高你的設計性能和提高速度的可靠性你必須確定你的設計通過所有的這些檢查。  可靠性  **為時鐘信號選用全局時鐘緩衝器BUFG  • 不選用全局時鐘緩衝器的時鐘將會引入偏差 。
  • 基於Verilog HDL的SVPWM算法的設計與仿真
    目前常用的SVPWM算法實現工具是單片機或者DSP晶片,但SVPWM算法對處理速度、實時性、可靠性方面要求較高,基於硬體的FPGA/CPLD晶片恰能更好地滿足這些要求,據此本文利用硬體描述語言Verilog HDL實現SVPWM算法,根據三相兩級PMSM的物理模型以及兩電平電壓型逆變器的原理,設計24矢量7段式實現方法,並仿真轉速調節和轉矩調節時的 SVPWM波形。
  • 產品經理不得不知的——有限狀態機
    直到某天我看到有限狀態機的原理,才知道我太天真了。比如騰訊公司在深圳的地址,有如下的各種寫法:廣東省深圳市騰訊大廈廣東省518075深圳市南山區科技園騰訊大廈深圳市510875科技園騰訊大廈深圳市南山區科技園騰訊大廈廣東省深圳市科技園中一路騰訊公司…這些地址寫得都有點不清楚,那麼程序是如何準確地識別這些信息呢?下圖所示的是一個識別中國地址有限狀態機的例子。
  • 各大公司IC設計筆試試題
    與門陣列等其它ASIC(Application Specific IC)相比,它們又具有設計開發周期短、設計製造成本低、開發工具先進、標準產品無需測試、質量穩定以及可實時在線檢驗等優點 3、什麼叫做OTP片、掩膜片,兩者的區別何在?(仕蘭微面試題目) 4、你知道的集成電路設計的表達方式有哪幾種?(仕蘭微面試題目) 5、描述你對集成電路設計流程的認識。
  • 12進位計數器設計方案匯總(五款模擬電路設計原理及程序分享)
    打開APP 12進位計數器設計方案匯總(五款模擬電路設計原理及程序分享) 發表於 2018-01-17 15:05:38 本文為大家帶來五種不同的
  • ST推出LIS3DSH內置2個有限狀態機的三軸高解析度加速度計
    打開APP ST推出LIS3DSH內置2個有限狀態機的三軸高解析度加速度計 愛好者 發表於 2011-11-07 23:33:20
  • 一種RFID標籤晶片數字部分狀態機的設計
    嵌入式CPU設計較為靈活,能實現較為複雜的加密算法,但是功耗較大、成本高;而狀態機則功耗低、成本低,因而在注重功耗和成本的RFID市場獲得了廣泛應用,也為本文所採用。  1 VICC數字部分的構成  VICC數字部分的組成模塊如圖1所示。
  • 簡單的狀態機入門!
    大家晚上好,今天給大家分享一個篇關於狀態機的學習。為啥突然會寫這個話題,因為今天要看文章和視頻學習的時候,突然看到了「狀態機」三個字,也突然讓我想起了,在剛入職一家公司的時候,看產品的原始碼畫出整個軟體框架流程圖來,現在我還清晰的記得當時公司產品裡面就有用到這個狀態機的用法,但是當時我剛接觸到這個東西,看了老半天那個源碼嗎,沒看懂,因為那時候第一次看那麼大的工程量代碼,說實話腦袋有點暈暈的,不是很習慣。