verilog异步复位jk触发器_HDLBits: 在线学习Verilog(Problem 120-126)
這幾天在刷HDLBits,參考的是HDLBits中文導學專欄:HDLBits中文導學,刷到120題的時候發現缺少了中間的120題到126題的解析,就打算自己邊寫邊記錄一下。也方便其他的同學進行參考。
Problem 120 Simple FSM 1s
牛刀小試
一個很簡單的狀態機的題目,給定一個輸入,兩種狀態,一個輸出。注意復位的時候復位成B狀態,復位采用同步復位。
解答與分析
這里我們采用三段式的寫法來描述這個簡單的狀態機。
三段式狀態機基本格式是:
- 采用組合邏輯判斷狀態轉移條件
- 狀態觸發器實現
- 描述輸出邏輯(既可以用組合電路輸出,也可以用時序電路輸出)
狀態轉移條件:根據輸入信號以及當前的狀態確定次態。
always @(*) begincase(state)B:next_state=in?B:A;A:next_state=in?A:B;endcaseend狀態觸發器實現,在時鐘邊沿實現狀態寄存器的跳變以及狀態復位
always @(posedge clk) beginif(reset) state<=B;else state<=next_state;end輸出邏輯,根據當前狀態實現輸出
assign out=state?1:0;Problem 121 Simple FSM 2
牛刀小試
一個很簡單的狀態機的題目,給定兩個輸入,兩種狀態,一個輸出。兩種狀態分別為開,關。復位的時候復位成OFF狀態。復位采用異步復位,OFF狀態輸出0,ON狀態輸出1。
解答與分析
狀態轉移條件:根據輸入信號以及當前的狀態確定次態。
always @(*) begincase(state)OFF:next_state=j?ON:OFF;ON:next_state=k?OFF:ON;endcaseend狀態觸發器實現,在時鐘邊沿實現狀態寄存器的跳變以及狀態復位
always @(posedge clk, posedge areset) beginif(areset) state<=OFF;else state<=next_state;end輸出邏輯,根據當前狀態實現輸出
assign out=state?1:0;Problem 122 Simple FSM 1s
牛刀小試
跟上題類似,只是復位方式不同而已,不再贅述。
Problem 123 Simple state transitions 3
牛刀小試
如圖所示,一共有A,B,C,D四種狀態。需要在滿足特定輸出的情況下進行狀態轉移和輸出,state、next_state此時作為輸入輸出信號而不是內部信號。
解答與分析
如圖所示,一共有A,B,C,D四種狀態。狀態轉移邏輯和輸出也很清晰的告訴了我們了。我們只要用狀態機進行實現就可以了。
狀態轉移條件:根據輸入信號以及當前的狀態確定次態。
always @(*) begincase(state)A:next_state=in?B:A;B:next_state=in?B:C;C:next_state=in?D:A;D:next_state=in?B:C;endcaseend輸出邏輯,根據當前狀態實現輸出
assign out=(state==D)?1:0;Problem 124 Simple one-hot state transitions 3
牛刀小試
解答與分析
獨熱碼狀態機的正確寫法。獨熱碼狀態機僅使用單bit表示狀態,是否處在某一狀態僅跟一個bit有關,而下個狀態的轉移也僅與一個bit有關。與其他bit無關。因此我們要按下面的寫法寫狀態轉移條件。
狀態轉移條件:根據輸入信號以及當前的狀態確定次態。
assign next_state[A] = state[A]&(in == 0) | state[C] & (in == 0);assign next_state[B] = state[A]&in | state[B]&in | state[D]∈assign next_state[C] = state[B]&(in == 0) | state[D]&(in == 0);assign next_state[D] = state[C] & in;輸出邏輯,根據當前狀態實現輸出
assign out=(state[D])?1:0;Problem 125 Simple FSM 3
牛刀小試
同樣是一道狀態機的題目,給定一個輸入,四種狀態,一個輸出。復位采用異步復位,復位成A狀態。D狀態輸出1,其他狀態輸出0
解答與分析
狀態轉移條件:根據輸入信號以及當前的狀態確定次態。
always @(*) begincase(state)A:next_state=in?B:A;B:next_state=in?B:C;C:next_state=in?D:A;D:next_state=in?B:C;endcaseend狀態觸發器實現,在時鐘邊沿實現狀態寄存器的跳變以及狀態復位
always @(posedge clk, posedge areset) beginif(areset) state<=A;else state<=next_state;end輸出邏輯,根據當前狀態實現輸出
assign out=(state==D)?1:0;Problem 126 Simple FSM 3s
牛刀小試
解答與分析
跟上題類似,只是復位方式不同而已,不再贅述。直接給出代碼
module top_module(input clk,input in,input reset,output out); //reg [1:0] state,next_state;parameter A=0,B=1,C=2,D=3;always @(*) begincase(state)A:next_state=in?B:A;B:next_state=in?B:C;C:next_state=in?D:A;D:next_state=in?B:C;endcaseendalways @(posedge clk) beginif(reset) state<=A;else state<=next_state;endassign out=(state==D)?1:0; endmodule總結
以上是生活随笔為你收集整理的verilog异步复位jk触发器_HDLBits: 在线学习Verilog(Problem 120-126)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: n个骰子的点数 java_n个骰子的点数
- 下一篇: linux隐藏tomcat版本_Ubun