reset or switch

本文探讨了从旧环境过渡到新环境时的心态调整和个人成长。作者分享了如何克服习惯性的思维定势,实现思维模式的切换,并通过自我激励来迎接新的挑战。

 

站在一个新的起点。

 

以前的许多已经成为了习惯,成为了思维的一部分。遇到一件事情,首先想到的不是现在要做的事情,不是现在的搭档。空间变了,思维仍然停留在另一个地方和另一群人。

 

不是将思维清零,而是切换,尽快切换。

 

这时候,也需要一个总结 for four years。

 

重新开始,总是要苦一点,那表明我正在进步,也表明我以前有一点松散。

 

 这个过程好像比我想象的更漫长一些,还好,这几年的经历使我更加有耐心,内心也更加平静一些。

 

苦的时候就想想冯仑的话:“伟大是熬出来的”,慢慢熬吧:(

Error (12007): Top-level design entity "Key_drive_module" is undefined Info (144001): Generated suppressed messages file D:/my_project/output_files/Key_drive_module.map.smsg Error: Quartus II 64-Bit Analysis & Synthesis was unsuccessful. 1 error, 0 warnings Error: Peak virtual memory: 4609 megabytes Error: Processing ended: Mon Jun 30 10:34:48 2025 Error: Elapsed time: 00:00:02 Error: Total CPU time (on all processors): 00:00:00 Error (293001): Quartus II Full Compilation was unsuccessful. 3 errors, 0 warnings //按键驱动模块 //实现功能:检测按键并转换状态。按键按下为0 //输入信号:系统时钟、复位、翻页按键、数码管闪烁选择按键、加一按键 //输出信号:翻页选择状态、数码管闪烁选择状态、时分秒和年月日和闹钟时分秒的加一脉冲信号 //当按下翻页按键时,转换翻页状态、当按下数码管闪烁选择按键时转换当前数码管闪烁选择状态、当按下加一按键时生成每个部分的专属增一脉冲信号(秒分时....的增一信号都分开) //显示状态有三个(一共有三页)状态转换为:00-->01-->10 //数码管显示状态有四个(一个没选中和三个不同得选择)状态转换:00-->01-->10-->11(00是谁也没选的状态) module key_drive_module(system_clk,reset,key_turn,key_switch,key_add,flag_switch,flag_turn,second_add,minute_add,hour_add,day_add,month_add,year_add,alarm_second_add,alarm_minute_add,alarm_hour_add,select_sign); input key_turn,key_switch,key_add,system_clk,reset; output [1:0] flag_switch,flag_turn; output select_sign; output second_add,minute_add,hour_add,day_add,month_add,year_add,alarm_second_add,alarm_minute_add,alarm_hour_add; reg [3:0] flag_add=0; reg second_add,minute_add,hour_add,day_add,month_add,year_add,alarm_second_add,alarm_minute_add,alarm_hour_add; reg [1:0] flag_turn=0,turn_state=0,turn_next_state=0; //翻页状态机(分别是输出、现态、次态) reg [1:0] flag_switch=0,switch_state=0,switch_next_state=0;//当前选择数码管状态机 assign select_sign=(flag_add==4'b0000); //页面切换的状态机 //次态电路 always@(negedge key_turn or negedge reset) //敏感信号为页面切换按键(按下按键切换状态) 页面切换状态:00-->01-->10 begin if(!reset) turn_next_state=2'b00; else case(turn_state) 2'b00:turn_next_state=2'b01; 2'b01:turn_next_state=2'b10; 2'b10:turn_next_state=2'b00; default:turn_next_state=2'b00; endcase end //次态到现态转换 always@(posedge system_clk or negedge reset) begin if(!reset) turn_state<=2'b00; else turn_state<=turn_next_state; end //输出电路 always@(reset or turn_state) begin if(!reset) flag_turn= 2'b00; else case(turn_state) 2'b00:flag_turn=2'b00; 2'b01:flag_turn=2'b01; 2'b10:flag_turn=2'b10; default:flag_turn=2'b00; endcase end //数码管闪烁选择的状态机 //次态电路 always@(negedge key_switch or negedge reset) //敏感信号为选项切换按键(按下按键切换状态) 页面切换状态:00-->01-->10-->11 begin if(!reset) switch_next_state=2'b00; else case(switch_state) 2'b00:switch_next_state=2'b01; 2'b01:switch_next_state=2'b10; 2'b10:switch_next_state=2'b11; 2'b11:switch_next_state=2'b00; default:switch_next_state=2'b00; endcase end //次态-->现态转换 always@(posedge system_clk or negedge reset) begin if(!reset) switch_state<=2'b00; else switch_state<=switch_next_state; end //输出电路 always@(reset or switch_state) begin if(!reset) flag_switch= 2'b00; else case(switch_state) 2'b00:flag_switch=2'b00; 2'b01:flag_switch=2'b01; 2'b10:flag_switch=2'b10; 2'b11:flag_switch=2'b11; default:switch_next_state=2'b00; endcase end //增一选择项目 always@(turn_state or switch_state or reset) //敏感信号为当前页面状态、数码管闪烁选择状态(当选择项目变动时,增一选择项目也随之变化) begin if(!reset) flag_add=4'b0000;//0000代表空状态(都没选) else case(turn_state)//当前页面 2'b00: //第一页(时分秒) case(switch_state)//当前数码管闪烁选择 2'b00:flag_add=4'b0000; 2'b01:flag_add=4'b0001;//选中秒 2'b10:flag_add=4'b0010;//选中分 2'b11:flag_add=4'b0011;//选中时 endcase 2'b01: //第二页(年月日) case(switch_state) 2'b00:flag_add=4'b0000; 2'b01:flag_add=4'b0101;//选中日 2'b10:flag_add=4'b0110;//选中月 2'b11:flag_add=4'b0111;//选中年 endcase 2'b10: //第三页(闹钟) case(switch_state) 2'b00:flag_add=4'b0000; 2'b01:flag_add=4'b1001;//选中闹钟秒 2'b10:flag_add=4'b1010;//选中闹钟分 2'b11:flag_add=4'b1011;//选中闹钟时 endcase default:flag_add=4'b0000; endcase end //生成增一的专属信号 always@(key_add)//敏感信号为增一按键,当按键按下时,专属增一脉冲为0;当按键抬起时,专属增一脉冲为1; begin case(flag_add) 4'b0001:second_add=key_add; 4'b0010:minute_add=key_add; 4'b0011:hour_add=key_add; 4'b0101:day_add=key_add; 4'b0110:month_add=key_add; 4'b0111:year_add=key_add; 4'b1001:alarm_second_add=key_add; 4'b1010:alarm_minute_add=key_add; 4'b1011:alarm_hour_add=key_add; default:; //其它的都什么也不执行 endcase end endmodule
07-01
下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值