我今年第一次带队参加集创赛,作品是用紫光FPGA做的实时图像处理,全程Verilog手写。答辩时评委直接问:现在HLS这么成熟,你为什么还坚持用Verilog?我当场有点懵,只说了句HLS资源利用率低。回去越想越觉得回答太浅,想请教有经验的学长学姐,评委问这个问题的真实意图是什么?从哪些角度回答能体现工程思维而不是只会写代码?
2026年FPGA大赛,评委问我的设计为什么不用HLS而用Verilog手写,怎么回答显得有工程深度?
3 个回答

评委问这个,其实不是真想听你背一遍HLS和Verilog的对比表,他是在看你有没有自己的判断框架。你只说一句资源利用率低,等于把结论摆出来但没给推理过程。我建议你下次从三个层次讲:第一层,资源可控性。你用的是紫光FPGA,LUT、BRAM、DSP这些是硬约束,HLS在算法映射阶段会做循环展开和流水线优化,但生成的中间逻辑经常比手写多出20%到40%的LUT,BRAM的bank划分也未必贴合你的图像行缓冲结构。第二层,时序可预测性。实时图像处理有固定的行场同步约束,手写RTL你清楚每一级流水线的延迟周期,能精确算出来一帧数据从进来到出去经过多少个时钟;HLS要看调度结果,而且不同版本的编译器调度策略会变,你没法拍胸脯说某个时序路径一定收敛。第三层,调试可追溯性。你的设计在板子上出了波形异常,用Verilog你直接拉出状态机和数据通路就能定位是哪个使能信号晚了一拍;HLS你得先看C仿真,再对照生成的RTL,中间多一层转换,排查起来绕路。最后可以补一句:我不是否定HLS,算法探索阶段用HLS快速验证滤波器参数确实省时间,但我们是参赛作品,要保证在指定器件上稳定跑出效果,手写RTL的风险更可控。说完这些,评委基本能感觉到你是真的被时序逼过、被资源卡过,而不是只会抄代码。对了,你们那款紫光器件的具体型号是哪个系列?如果方便说,我可以帮你想想有没有更具体的资源对比数据能拿来当佐证。

你被问懵,说明你心里其实没有把这个问题当成一个工程决策问题,而是当成一个技术站队问题。评委问HLS为什么不用,潜台词是:你知不知道你在放弃什么、又得到了什么?如果你能把这个账算清楚,哪怕结论还是选Verilog,他也会觉得你有工程判断力。我给你一条主线,你顺着这条线往深里想。主线是:你的设计里,最贵的资源是什么?不是LUT,不是BRAM,是你在调试和验证上花的时间。图像处理链路里,最怕的不是算法复杂,而是时序边界出问题——比如某一行像素的使能信号在跨时钟域时丢了一拍,或者行缓存读写的地址在帧边界处错位。这些问题在HLS里会变成C代码和RTL行为之间的语义鸿沟,你很难在仿真里复现,因为C模型默认是理想时序,而你的工程里到处都是非理想的握手信号。你手写Verilog,虽然代码量大,但每个信号都是你自己拉出来的,你天然知道数据流在哪一拍对齐、在哪一拍冲突。这带来的好处是:你可以用最原始的波形对比法,把每个中间信号和参考模型逐拍比对,定位到具体的寄存器。另一个角度是工具链的成熟度。紫光的开发环境对HLS的支持一般不如对传统RTL流程成熟,你如果用HLS,可能还要处理编译器版本、IP核兼容性这些外部变量,而手写Verilog配合标准综合布线流程,工具链的坑少很多。你把这些想透了,答辩的时候不用背稿子,就讲一个具体的例子:比如你设计中那个中值滤波模块,用HLS做循环优化时,编译器为了并行度会复制出一堆移位寄存器,BRAM占用直接翻倍;而你改成手写滑动窗口,用一组寄存器链和两个计数器,资源省了三分之一,而且每一拍读哪个像素你心里都有数。这比空谈资源利用率高有说服力得多。最后你可以主动说:我其实也评估过HLS,但在这个设计里,它的优势是快速迭代算法,我的瓶颈不在算法迭代,而在时序收敛和板上调试,所以选择不同工具是权衡后的结果,不是我不会用。这样就把评委的问题从技术选择变成了你的决策方法论,档次就上去了。你回去可以整理一下你们设计里最耗时的是哪一段,是算法调试还是时序收敛?这能帮你判断下次是不是该换个思路。

评委问这个,真正的坑不在于HLS和Verilog哪个好,而在于你有没有把设计当成一个完整的工程系统来思考。你只回了资源利用率低,等于把一道论述题答成了判断题。我给你一条更深的线索:你的实时图像处理链路里,最贵的东西不是LUT也不是BRAM,而是你调试和验证花掉的时间。手写Verilog时,每个使能信号、每个行缓冲的读写地址都是你自己拉出来的,出了波形异常你能顺着RTL一层层追到根因;但HLS生成的RTL对你来说是个黑盒,C模型里默认的时序是理想的,而你的工程里到处都是跨时钟域握手、帧边界错位这种非理想情况。一旦板子上出现某一行像素错位,你很难在仿真里复现,因为C代码和RTL行为之间的语义鸿沟让你根本不知道去哪一行代码里找问题。所以你可以这样回答:我承认HLS在算法探索阶段效率很高,但我的设计瓶颈不在算法映射,而在时序边界和验证闭环,这两件事手写RTL有绝对的可控性。然后补一个具体数字,比如你的行缓冲用BRAM,手写你可以精确控制bank划分和读写端口,HLS的自动分配很可能多占30%的BRAM或者多出两级流水延迟。最后再收一句:如果算法迭代频繁,我会用HLS做原型验证,但交付版本我会手写RTL,因为我要对每一拍时钟负责。这样评委看到的是你把工具当作手段而不是信仰。你现在的紫光器件具体是哪一款?不同系列的LUT结构和DSP布局差异挺大,这会影响你举例时的说服力。
发表回答
登录后可在本页底部提交回答