[問題] 用Verilog寫FSM以及一個blocking的問題
如題,想請問一下FSM的幾個問題
以下是我要問的CODE的主要部分
always@(negedge clk or posedge reset)begin
if(reset)current_state<=s0;
else current_state<=next_state;
end
always@(*)begin
case(current_state)
s0:
begin
if(count==3)next_state=s1;
else next_state=s0;
end
endcase
end
always@(posedge clk or posedge reset)begin
if(reset)begin
count<=0;
end
else begin
case(current_state)
s0:
begin//read_input_data
if(!count)begin
count<=count+1'b1;
end
else if(count==1)begin
count<=count+1'b1;
end
else if(count==2)begin
count<=count+1'b1;
end
else count<=2'b00;
end
endcase
end
end
大概的功能是在第一個狀態S0的時候會連續讀取三個輸入資料
,所以我用一個Count的變數上數並在等於3的時候轉換到S1。
這時我的第一個always block裡面的觸發是CLK的負緣,
我一開始是使用正緣觸發但是會有個問題,就是當Count等於3
的時候不會立刻轉態而會延遲一個CLK。
想請問的是我第一個BLOCK用負緣觸發這是一個好的寫法嗎?
若是錯誤的觀念,不知道該怎麼改才好?
另外我想請教一下blocking的問題,在always@(posedge clk)
裡面到底可不可以用blocking,很多人都說sequence circuit
裡面要使用nonblocking才是對的,但是我一開始使用bloking
的寫法,模擬出來的功能一樣是正常的。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.91.129
※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1444198813.A.C3A.html
推
10/08 10:15, , 1F
10/08 10:15, 1F
→
10/08 10:15, , 2F
10/08 10:15, 2F
推
10/08 10:20, , 3F
10/08 10:20, 3F
→
10/08 12:34, , 4F
10/08 12:34, 4F
→
10/08 12:36, , 5F
10/08 12:36, 5F
→
10/08 12:42, , 6F
10/08 12:42, 6F
→
10/08 19:59, , 7F
10/08 19:59, 7F
→
10/08 19:59, , 8F
10/08 19:59, 8F
推
10/09 22:29, , 9F
10/09 22:29, 9F