2025年全国大学生嵌入式芯片与系统设计竞赛——FPGA创新设计赛道决赛于11月30日在南京江北新区顺落下帷幕。

笔者的朋友和笔者拿到了国二。

项目连接:(Github)

FPGA实现的功能和演示视频(部分功能)链接:(bilibili)

我们在录制视频的时候是11月初,那个时候截止视频提交,但是这个赛事允许我们继续完善作品。视频截止后一周出国测名单,第二周飞江北新区,因此我们有一些创新和功能完善是没有包含在视频演示里的,详情参考视频简介和评论区。

这次比赛让我认识到CLI Vibe Coding的重要性,以及Git多人协同操作,共同管理分支的重要性。

首先是赛题

9.2.png

9.1.jpg

我无法想象我如果没有AI,生在没有AI的时代,去翻看那老旧的介绍文档(有了AI也得看0.0)得有多耗费精力。我觉得也正是因为如此,我们飞去南京答辩之前得先通过一次verilog代码编写测试题,来考验你是不是真的会。不能使用网络的前提下,考的就是思维层面的东西了:

二、带冷却中断的自动交通灯控制系统 

设计背景: 
    模拟智能十字路口交通灯。系统在默认情况下按固定周期自动循环(主干道红/绿/黄交替)。 
    同时设有行人过街按钮,该按钮作为“中断源”,在主干道绿灯期间可触发中断,强制系统提前进入黄灯变灯流程。为防止滥用,中断触发后具有冷却保护期。 

功能要求: 

(1) 信号定义: 
    输入:clk, rst_n, ped_btn(行人按钮,脉冲)。 
    输出:main_light(主干道指示灯 0:绿, 1:黄, 2:红),ped_light(人行道指示灯 0:红, 1:绿)。 
    复位 (rst_n=0) 结束后,系统必须从主干道红灯(行人绿灯)状态开始运行。 
    *人行道指示灯仅在主干道指示灯为红灯时为绿灯。 

(2) 自动循环流程(基准时序): 
·主干道绿灯(行人红灯):默认持续 10 个时钟周期。若无中断,时间到后主干道进入黄灯。 
·主干道黄灯(行人红灯):持续 3 个时钟周期。时间到后主干道进入红灯。 
·主干道红灯(行人绿灯):持续 10 个时钟周期。时间到后主干道回到绿灯。 

(3) 中断与冷却机制: 
中断触发: 
    仅在主干道绿灯状态下有效。 
    当 ped_btn 有效且不在冷却期时,无视主干道绿灯的剩余时间,立即 (ped_btn 有效的下一个时钟上升沿) 跳转到主干道黄灯状态,开始变灯流程。 
冷却保护: 
    当 ped_btn 按下后会进入冷却期,之后的 18 个时钟周期内,系统必须忽略任何 ped_btn 信号(即不能触发中断)。 

程序头:

module traffic_button_ctrl( 

input clk, 
input rst_n, 
input ped_btn, 
output reg [1:0] main_light, // 0:Green, 1:Yellow, 2:Red 
output reg [1:0] ped_light // 0:Red, 1:Green 

); 
endmodule

题目有个Testbench,仿真通过就行。

​ 名单公布的时候我在武汉和朋友游玩,逛哆啦A梦的全球展,我想我会把那个瞬间记得很清楚,异乡异客,但是能把那条街,那个红绿灯,那棵树记得一清二楚。虽然说每个阶段有不同的成功有不同的成就,但是收获成功的那份喜悦是近乎相同的。平淡下来之后,很快地意识到我们其实已经在做一个研发开发的领域了,并不是说我们产出的这个产品它就很完善,但相当于是努力得到了这个领域的认可,那时候我对我的未来是充满着信心。

​ 直到我去南京线下看了其他人的作品。

​ 四海八方来的大学生,talent,就怎么说,每个人的作品都有可取之处。而且,在题目的束缚下,每个人都能求同存异有相同也有不同。甚至可以做到我们不询问就知道对方的作品是怎么解决了这个问题的。大概就是,看一眼的程度。深刻的感受到了自己的渺小,与此同时,这个场馆里面是没有人在意你的,每个人都付出了很多。每个人都熬过数不清的夜,为了一个bug而争论不休。而且我深刻的感觉到,在这个地方,没有人会去关注你出身如何,你有什么背景,你的专业是什么/学校是不是985,真的只有对未来的渴望,对创新独到的见解,还有期望这一切结束之后的休息。

​ 协作,是一门艺术,在三人赛里面,1+1+1通常不等于3,如果能大于2都是万幸了。我所做的当然是在不给队友添堵的情况下,去用心完成我该做的那一部分。这里就牵扯到本文的主题了。Github是世界上最伟大的工具之一,我们初期开发了一个共同版本,然后由main作三个个人的分支出去,各自在各自的分支开发,有人推送了就即使pull。听起来挺简单是不是?在本科生阶段,我可以明确的指出,电子信息专业的90%本科学生没有自己的github账号。那他们怎么协作呢?我见过我同龄的人使用u盘拷贝整个工程😨。这自然是不可取的我说白了,先不说路径依赖什么的,根本就是天方夜谭,效率极其低下。我们三个接触过github的人在第一次接触协作的时候就搞出来过好几个幺蛾子,要么就是怎么推都推不上去报错,要么就是听信生成式AI谗言,执行了不可逆的操作,还有一言不合就合并,直接不用审查,没有多方验证,之前写的功能直接报废。然后当吾之队友犯错的时候再去一条条看git指令,发现啊,原来每一条指令都是有他存在的道理的。

​ 这也是我第二次到访南京这座城市,我对她的印象很好。很多时候我认为自己不是一个喜欢分享的人,写下文字的目的是为了之后回忆起来更舒服,但总是有意无意地去假设有人在看,无论是先辈还是后辈。这个问题我也和ika讨论过一次。今天已经是26年的3月份了,直到这么久之后我才回过神来,原来做自己喜欢的事情是多么幸福的一件事情。