已解决
HDLbits:Lemmings4
来自网友在路上 170870提问 提问时间:2023-10-14 04:34:33阅读次数: 70
最佳答案 问答题库708位专家为你答疑解惑
这道题目并不难,我想的太难了。只需要在前一道题目的基础上做下面几个步骤:
1、lemming多加一个状态DEAD
2、加一个always块记录下落时间
3、把这个下落时间引入到FALLING落地状态转换的判断里
PS:容易出错的地方:1、计数器到达19是完整的20s时间 2、不仅重置的时候计数器需要清零,除了下落之外的其他状态也要清零。
module top_module(input clk,input areset, // Freshly brainwashed Lemmings walk left.input bump_left,input bump_right,input ground,input dig,output walk_left,output walk_right,output aaah,output digging ); parameter LEFT=7'b0000001, RIGHT=7'b0000010, LEFT_FALLING=7'b0000100, RIGHT_FALLING=7'b0001000, LEFT_DIGGING=7'b0010000, RIGHT_DIGGING=7'b0100000, DEAD=7'b1000000, DEAD_TIME=32'd19;reg [6:0] state,next_state;reg [31:0] falltime_counter;always@(*)begincase(state)LEFT: next_state = ground?(dig?LEFT_DIGGING:(bump_left?RIGHT:LEFT)):LEFT_FALLING; RIGHT: next_state = ground?(dig?RIGHT_DIGGING:(bump_right?LEFT:RIGHT)):RIGHT_FALLING; LEFT_FALLING: next_state = ground?(falltime_counter>DEAD_TIME?DEAD:LEFT):LEFT_FALLING;RIGHT_FALLING: next_state = ground?(falltime_counter>DEAD_TIME?DEAD:RIGHT):RIGHT_FALLING;LEFT_DIGGING: next_state = ground?LEFT_DIGGING:LEFT_FALLING;RIGHT_DIGGING: next_state = ground?RIGHT_DIGGING:RIGHT_FALLING;DEAD: next_state = DEAD;default: next_state = LEFT;endcase endalways@(posedge clk or posedge areset)beginif(areset)state <= LEFT;elsestate <= next_state;endalways@(posedge clk or posedge areset )beginif(areset)falltime_counter <= 0;else if(state == RIGHT_FALLING || state == LEFT_FALLING)falltime_counter <= falltime_counter + 1;elsefalltime_counter <= 0;endassign walk_left = (state == LEFT);assign walk_right = (state == RIGHT);assign aaah = (state == LEFT_FALLING || state == RIGHT_FALLING);assign digging = (state == RIGHT_DIGGING || state == LEFT_DIGGING); endmodule
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"HDLbits:Lemmings4":http://eshow365.cn/6-19384-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!