今年电赛FPGA方向准备冲国一,我们组功能都跑通了,但代码写得比较乱,模块划分也不够清晰,时序约束基本没做。听说评委答辩时会翻看源码和工程结构,有点慌。请问国赛评委到底更看重功能演示效果还是工程规范?如果两者只能保一个,优先保哪个?有没有往年拿国一的作品工程结构可以参考?
FPGA大赛国赛评委到底看中什么?功能完整和工程规范哪个更重要?
5 个回答

说句实在话,功能演示是门票,工程规范是排名。国赛答辩现场,评委先看你跑起来的效果,功能都挂了那后面基本没戏;但进了国一候选,大家功能都稳,这时候拼的就是源码和结构了。你们时序约束没做、模块乱,这属于典型「能跑但不敢细看」的状态。我的建议是:答辩前一周,把功能锁死别再大改,花两个整天做三件事——把顶层模块和子模块的端口画成一张图、给每个always块加两三行注释说明干什么用、至少把时钟和复位约束写进xdc。别追求重构,先让评委翻代码时觉得「这组是认真的」就够了。你们用的哪家的板子和Vivado版本?约束文件写法差别挺大,可以说说。

我当过两届省赛评委,也帮朋友看过国赛作品,说点可能不太中听但真实的话:国赛评委翻源码,不是在找bug,是在判断「这队是调通了一个工程,还是真的理解了一个系统」。功能完整和工程规范不是二选一,而是两个不同层面的东西——功能是下限,规范是上限,但很多人把规范理解成「代码好看」,其实评委真正看的是你的工程结构能不能证明你做了设计而不是碰运气。
比如跨时钟域,你直接打两拍,表面看是规范了,但评委追问你「为什么打两拍能消亚稳态,打一拍行不行」时,你答不上来,那这规范就是背的。反过来,你模块划分乱,但答辩时能清楚说出每个模块的输入输出、状态跳转逻辑、为什么这么切,评委反而会给你加分。国赛考察的核心是「设计意图」——你的每一个模块、每一处约束、每一段注释,能不能支撑你说清楚「我为什么这么做」。
所以我的建议很具体:别急着重构代码,先拿一张纸,把你们系统的数据流和控制流画出来,标清楚哪些是组合逻辑、哪些是跨时钟域信号、哪些是可能出时序问题的关键路径。然后对照这张图,把代码里的模块边界理顺,哪怕只是改端口名、加注释,也要让结构和你画的图对得上。时序约束这块,至少把主时钟、复位、以及你数据流里最关键的几个跨时钟域点约束上,不用全,但要让评委看到你有这个意识。
至于往年国一的作品结构,说实话网上流传的很少,就算有也多是阉割版。更靠谱的办法是看官方往年的优秀作品报告,那些文档里通常有系统框图和模块划分说明,比直接翻代码有价值得多。最后说句扎心的:你们现在慌,是因为功能跑通靠的是「试」,而不是「设计」,评委一眼就能看出来。好好把设计逻辑捋一遍,比什么都强。你们现在最薄弱的是哪块——跨时钟域还是模块划分?可以先从最痛的地方下手。

功能完整和工程规范,听起来像两个维度,其实是一根绳上的两端:工程规范就是用来保证功能在更复杂场景下依然完整的。你们现在功能跑通,大概率是在特定输入、特定时序下碰巧通的,一旦评委换个测试条件或者现场改个参数,乱代码的隐患就会炸出来。我见过不止一队,演示时好好的,评委一碰按键就死机,最后发现是跨时钟域没处理,一个毛刺把状态机打飞了。
所以我的建议是,别把这两件事对立起来。你们最该做的,是挑一个「评委最可能深挖」的点——比如你们系统的核心状态机、或者最长的组合逻辑路径——把这一小块重写干净,加上详细注释和时序约束,然后答辩时主动引导评委看这里。人都有锚定效应,评委翻到一个整洁的模块,印象分会明显拉高,其他乱的地方他可能就默认「这队还没整理完」而不是「这队水平不行」。
另外提醒一个常见误区:不要为了规范而规范,比如强行把代码拆成十几个小文件,结果模块间信号绕来绕去,比原来更难读。工程规范的本质是降低理解成本,不是形式主义。你们现在最乱的是顶层连接还是某个子模块内部?先理清这个,再决定从哪下手。祝冲国一顺利,答辩时记得把「为什么这么设计」讲成故事,别只讲「实现了什么」。

功能完整是门票,工程规范是排名。国赛评委翻源码,其实是在找证据证明你们懂设计而不只是会调通。时序约束没做、模块乱,功能再稳也容易被归为『碰运气』。建议先锁功能,再把顶层模块画成图、给状态机加注释,至少让评委翻代码时觉得你们是认真的。你们用的哪家板子和Vivado版本?约束写法差别挺大。

说点过来人的体会吧。我当年也是功能先跑通,代码乱成一锅粥,最后靠着答辩时把核心状态机讲透了,才勉强保了个国二。评委问我的第一个问题就是『你这两个模块之间有没有跨时钟域?』我当场愣住,因为压根没想过。后来帮学弟看作品才发现,评委翻源码不是找bug,是看你有没有『设计意图』——每个模块为什么这么切、复位为什么用异步、打两拍到底解决什么问题。所以我的建议是:别急着全面重构,挑一个评委最可能深挖的点——比如你们最长的组合逻辑路径或者那个关键状态机——把它重写干净,加注释,画状态转移图,然后答辩时主动引导评委看这里。人都有锚定效应,看到一个整洁的核心模块,印象分就上去了,其他地方乱一点他反而会理解为『没整理完』而不是『水平不行』。功能演示是下限,规范是上限,但规范不是代码好看,是你能说清楚每个设计决策的理由。
发表回答
登录后可在本页底部提交回答