亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求助高手幫幫幫小白的verilog吧,下面內容總是報錯,請問該怎么解決?

求助高手幫幫幫小白的verilog吧,下面內容總是報錯,請問該怎么解決?

module traffic_light(ncr,cp,en,r1,r2,r3,l1,l2,l3);input ncr,cp;input [1:0]en;output r1,r2,r3,l1,l2,l3;reg r1,r2,r3,l1,l2,l3;reg [1:0] current_state1,next_state1,current_state2,next_state2;parameter normal=2'b00,stop=2'b01,left=2'b10,right=2'b11;always /*beginr1=0;r2=0;r3=0;l1=0;l2=0;l3=0;end*/case(en)normal:begin {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0}; endstop:beginalways@(cp)if(~ncr) {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};else if (cp){r1,r2,r3,l1,l2,l3}={1,1,1,1,1,1};else {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};endleft:beginalways @(posedge cp)beginif(~ncr) {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};s1=00;elsecurrent_state1=next_state1;endalways@(current_state1)begincase(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;endcaseendright:beginalways @(posedge cp)beginif(~ncr) {r1,r2,r3,l1,l2,l3}={0,0,0,0,0,0};s1=00;elsecurrent_state2=next_state2;endalways@(current_state2)begincase(current_state2) 2’b00:{r1,r2,r3}={1,0,0};next_state2=2’b01;2’b01:{r1,r2,r3}={1,1,0};next_state2=2’b10;2’b10:{r1,r2,r3}={1,1,1};next_state2=2’b11;2’b11: {r1,r2,r3}={0,0,0};next_state2=2’b00;endcaseendendmodule
查看完整描述

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程序,看下別人怎么組織語言的

查看完整回答
反對 回復 2022-01-10
?
慕虎7371278

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:
...。。。。
。。。。



查看完整回答
反對 回復 2022-01-10
  • 2 回答
  • 0 關注
  • 271 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號