2 回答

TA貢獻1921條經驗 獲得超9個贊
你對于verilog的寫法有很多不符合規范的
比如你的狀態機在left:begin end之后接了一個時序邏輯然后又判斷right;
比如你進入狀態之后還在進行時序判斷;
比如你的
case(current_state1)
2’b00:{l1,l2,l3}={1,0,0};next_state1=2’b01;
2’b01:{l1,l2,l3}={1,1,0};next_state1=2’b10;
2’b10:{l1,l2,l3}={1,1,1};next_state1=2’b11;
2’b11: {l1,l2,l3}={0,0,0};next_state1=2’b00;
endcase
這段程序里面,同一個狀態下的兩條語句需要加begin end括起來用;
建議:1、看一下狀態機的寫法,分為一段,兩段,三段式的,建議二段或者三段式寫法,容易規劃,別人看也容易些
2、寫verilog要記得,你寫的東西就是電路,在腦袋里面要有電路的概念;
3、建議先看下成熟的verilog程序,看下別人怎么組織語言的

TA貢獻1802條經驗 獲得超4個贊
太亂了,怎么把always寫到case里了?always塊里怎么能嵌套always呢?狀態機的狀態跳一般這樣寫:
always @(posedge clk or negedge rst_n)
if(!rst_n)
cureent_state<=normal;
else
cureent_state<=next_state;
然后再寫狀態機主體;
always @(posedge clk or negedge rst_n)
if(!rst_n)
……
……
else
case(en)
normal: begin
.........
next_state<=stop;
end
stop: begin
.........
next_state<=left;
end
left:
...。。。。
。。。。
- 2 回答
- 0 關注
- 271 瀏覽
添加回答
舉報