十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AFDX仿真赛题深度解析:零硬件门槛背后的设计挑战

AFDX仿真赛题深度解析:零硬件门槛背后的设计挑战 每年赛题公布的时候总有一批人盯着“零硬件门槛”这几个字眼。中科亿海微的AFDX仿真赛题就是典型的“看起来谁都能报报了才知道坑不少”的题目。AFDX这个航空总线名词一出来很多人第一反应是那是飞机上用的东西跟我会不会写代码有什么关系等真把赛题下载下来才发现主办方给的是一个仿真环境不需要你买FPGA板子不需要你接触真实网络分析仪甚至连实验室都不用进线上把工程跑通、把波形交上去就行。但我要先泼一盆冷水零硬件门槛不等于零门槛。它把物理层的门槛拆掉了却把协议层、时序层、验证层的门槛全部原样留在那里甚至因为“反正你不用上板”评审对设计的完整性和规范性要求反而更高。这篇文章就围绕中科亿海微AFDX仿真赛题把那些藏在“零硬件”背后的真实门槛一个个拆开讲清楚。想冲奖的参赛者、想了解AFDX仿真怎么做的人、以及打算借这类比赛接触国产FPGA工具链的工程师都应该往下看。1. 先搞清楚这赛题的“零硬件门槛”是怎么回事1.1 AFDX是什么为什么会出现在竞赛里AFDX全称Avionics Full-Duplex Switched Ethernet中文通常叫航空电子全双工交换以太网标准化文档是ARINC 664 Part 7。在它之前航空电子系统里的数据总线是ARINC 429、1553B这些东西速率低、拓扑死板、扩展性差。AFDX的思路很直接把民用领域已经非常成熟的以太网硬件拿过来在协议层面做一套确定性传输机制让数据在网络里的行为变得可预测、可计算、有界延迟。它跟普通以太网最大的区别在于“确定性”三个字。普通以太网是尽最大努力交付节点多了就丢包延迟随机抖动这在办公环境没有问题但在飞控、导航、发动机监控这种场景里数据晚到几毫秒可能就是事故。AFDX通过虚拟链路VL、带宽分配间隙BAG、双冗余网络、流量整形这套机制把每条数据通道的带宽、时延、抖动全部约束住。你可以把它想象成普通以太网是高峰期没有公交专用道的马路AFDX则是给每条线路规定了“多少分钟发一班车、走哪条专用道、不到站不许超车”的公交调度系统。中科亿海微是国内FPGA厂商里比较早布局航空、工业等方向的一家。它把AFDX做成仿真赛题核心目标很明确让更多没有航空背景、没有硬件条件的学生也能接触到这条技术线。通过仿真选手不需要真实板卡就能完成端系统或交换机内部的关键逻辑设计这对普及国产FPGA工具链、储备航空总线方向的人才都是成本很低但覆盖面很大的方式。1.2 仿真赛题不等于低难度赛题很多人一听到“仿真”两个字第一反应是“是不是随便写点代码跑一下就行”。如果你真这么做大概率连初赛都过不了。仿真在这个语境下不是“装模作样”而是用一种低成本的方式考察和硬件设计几乎一样的能力。在真实AFDX产品开发中端系统End System和交换机的核心逻辑本来就是先通过RTL仿真验证确认功能无误后才进入FPGA综合、布局布线、上板调试。赛题把“上板调试”这一大段物理环节省掉了但不省掉协议实现、时序设计、验证完备性这些核心环节。换句话说仿真赛题专注考察的是“设计”能力而不是“调板子”能力。这里有一个很多新手容易误判的点仿真通过——比如波形里看到一个帧发出去了、接收端收到了——离设计正确还差得非常远。仿真里你可能会用理想时钟、理想复位、理想延时但评审在检查设计方案时看的是你有没有考虑到跨时钟域、带宽汇聚、FIFO溢出、冗余切换这些真实设计中一定存在的问题。你可以在没有硬件的情况下完成一个“功能正确”的设计但不一定能完成一个“工程正确”的设计。1.3 这类赛题通常长什么样中科亿海微的AFDX仿真赛题不同年份的具体要求会有差异但总体框架基本是固定的根据给定需求使用Verilog或VHDL完成AFDX端系统或交换机子模块的RTL设计在指定EDA环境中搭建testbench运行仿真验证帧发送、VL调度、接收校验、冗余管理等功能最终提交设计源码、仿真波形、设计文档和测试报告。常见考察点包括虚拟链路发送调度是否正确按照BAG参数周期性发送数据帧帧格式构造以太网MAC头、IP头、UDP头、AFDX序号SN是否正确接收完整性校验能否识别帧间隙、帧长错误、SN跳变冗余管理A/B双网收到重复帧时能否正确去重带宽预算多个不同BAG的VL汇聚时能否避免瞬时突发寄存器配置能否通过总线接口动态配置VL表、BAG、MAC地址等参数从这个列表能看出来这已经是一个完整的协议栈实现题不是hello world级别的东西。2. 第一道真实门槛AFDX协议本身没有“仿真模式”2.1 ARINC 664 Part 7给以太网装上时刻表ARINC 664 Part 7规范本身是一套好几百页的英文文档很多第一次接触的人光看目录就头大。但它的核心思想并不复杂在标准以太网帧的基础上用“虚拟链路”把网络带宽切成若干条逻辑通道每条通道独立预留带宽并由端系统统一调度发送。虚拟链路是AFDX最关键的概念。一条虚拟链路定义了一个逻辑上的单向连接从源端系统出发经过一个或多个交换机到达一个或多个目的端系统。所有属于同一条虚拟链路的帧在源MAC地址上具备唯一的标识。多条虚拟链路可以复用在同一条物理网线上但彼此在逻辑上完全隔离带宽互不侵占。为了让每条虚拟链路的带宽可计算AFDX引入了BAG参数全称Bandwidth Allocation Gap带宽分配间隙。它表示同一虚拟链路上两个连续帧之间的最小时间间隔。BAG的取值集合有严格规定只能是1ms、2ms、4ms、8ms、16ms、32ms、64ms、128ms而且必须是2的幂次。这意味着什么意味着你的RTL里要做计数器精确控制每个VL每隔BAG时间才能发一帧。这个设计本身不难但多个VL同时到期时如何错开就是调度问题了。赛题如果简单到只有一个VL那确实没难度一旦VL数量达到十几条、几十条调度器的设计直接决定作品的上限。2.2 虚拟链路、BAG与带宽计算一道必做的算术题很多参赛者直到写完代码都没有亲手算过自己设计的VL组合到底占了多少带宽。这在评审眼里是非常失分的。AFDX端系统发射方向有一个“带宽上限公式”可以估算每条VL在物理链路上占用的速率每条VL带宽 (最大帧长 20字节链路开销) × 8 / BAG其中最大帧长通常取1518字节20字节链路开销是8字节前导码加12字节帧间隙。用这个公式算一下BAG2ms的VL单条占用带宽就是(1518 20) × 8 / 0.002 12304000 bit/s约6.15 Mbps换一个BAG档位结果完全不同我整理了一个速查表BAG单条VL带宽上限100Mbps端口最多同档VL数量理论1ms12.304 Mbps82ms6.152 Mbps164ms3.076 Mbps328ms1.538 Mbps6516ms0.769 Mbps130128ms0.096 Mbps1040别急着直接用这些数字去堆VL。实际工程里还要扣除管理帧、配置协议、网络保留带宽以及双冗余网络A/B网各自占用一份带宽。比如一条端系统物理口是100Mbps你敢把VL总预算配到95Mbps交换机端流量管制一下冗余副本再一过瞬时突发分分钟丢帧。我见过不少仿真波形里出现帧间隔小于BAG的情况根因就是带宽预算没做多个VL的发送请求撞在同一个时刻。说到这必须强调一个最容易忽略的点BAG规定了“每个周期最多发一帧”但多个VL的周期起点是彼此独立的。如果所有VL都在复位后第0个周期同时发帧第一个时隙就会瞬间涌出N条帧完全违背了AFDX“平滑流量”的设计初衷。所以真正的端系统调度器要做的不是“周期性发帧”这么简单而是要在BAG约束的基础上为每个VL配置独立的发送时隙偏移让流量在时间轴上均匀铺开。评审拿到你的设计文档看到你有没有做偏移调度基本就能判断你是真的懂AFDX还是只是会写计数器。2.3 接收侧才是最容易翻车的区域完整性校验与冗余管理发送侧做周期性发帧很多新手两三天就能写出来。接收侧则完全是另一回事。AFDX接收端系统的核心功能有三个完整性校验、冗余管理、帧转发。完整性校验负责检查收到的帧在时序上是否符合预期——同一个VL的帧必须在BAG周期内到达帧间隔不能小于规定值帧长不能超限SN序号必须连续。任何一个检查项不通过该帧就不能进入上层协议栈。这里有个非常经典的坑SN回绕。AFDX的SN是两字节从0递增到65535后回绕到0。如果你的校验逻辑写的是“当前SN必须等于上一个SN加1”那在回绕边界必然误判。正确做法是使用环形序列空间比较而不是简单的等于判断。很多参赛者测试用例只跑到几百帧根本测不出回绕问题评审一眼就能看出验证不充分。冗余管理则是AFDX双网络的精髓。发送端会把同一帧复制成两份分别在A网和B网上发送接收端会收到两帧相同SN的数据。冗余管理模块需要根据SN序号把两个网络收到的帧进行去重保证上层只收到一个副本。如果A网丢了一帧B网的同序帧要能补上如果两个网络都收到了则按固定优先级丢弃第二个到达的副本。去重逻辑里最隐蔽的坑是“旧帧迟到”。比如A网先到SN100随后B网也到了SN100被正确丢弃接着下一帧SN101又到了。但如果在某些异常情况下A网重复发送了SN100的旧帧而B网已经收到并转发了SN101此时旧帧应该如何处置如果只是简单比较“是否等于上一个已提交SN”就会把旧帧误判为新帧重新提交导致上层数据乱序。正确的冗余管理必须维护一个滑动窗口对窗口外的旧帧直接丢弃窗口内的重复帧根据A/B网状态选择提交策略。这个逻辑写起来不难难的是把所有异常情况考虑全。赛题如果不上强度就算了一旦测试用例里出现“单网持续丢帧”“双网交叉丢帧”“SN回绕”“旧帧重复到达”这四类组合验证不充分的设计会在第一个复杂用例上当场崩溃。2.4 帧格式与字节序仿真波形里最隐蔽的“坑”AFDX在物理链路上使用的是标准以太网帧上层承载IP和UDP。SN序号放在UDP负载的最前面属于应用层数据的一部分。这个帧格式本身不难理解但字节序问题能把人折磨到崩溃。以太网帧在链路上是按大端方式逐字节传输的你从仿真波形里抓到的数据从左到右读取顺序就是线缆上的发送顺序。但很多人在testbench里构造帧时习惯把数据定义成32位整数然后按字节地址顺序写入如果处理器端是little-endian你就得在发包前做字节swap。我见过一个同学仿真里抓包发现目标MAC地址变成了“00:01:02:03:04:05”的反序“05:04:03:02:01:00”查了一整天最后发现是testbench构造数据时直接用32位寄存器拼接了MAC字节没有考虑字节顺序。这不是不会写代码而是对这个领域的基础约定不够敏感。帧间隙也是个容易出问题的地方。以太网规定两帧之间至少要留96比特时间的帧间隙。仿真里你可以在一个时钟周期内连续发出两个帧但真实接收端的MAC层会对帧间隙做检查间隙不足的帧会被当作错误帧丢弃。如果你的发送调度器在多个VL同时到期时一口气发了两条帧就要想办法在发送MAC前面加一个很小的发送调度队列确保任何情况下都不会背靠背连续发帧。有条件的话用AFDX交换机设计里的“流量管制”逻辑来思考这个问题比单纯从发送端思考要清晰很多。3. 第二道真实门槛仿真能跑通离“设计正确”还很远3.1 仿真环境掩盖了哪些时序问题仿真全程使用的都是理想时钟源时钟边沿清晰、没有偏差、没有抖动复位信号也是瞬间完成。这些便利性在功能调试时是好事但如果你的RTL从一开始就依赖这些理想条件后面一定会出问题。最典型的例子是异步复位。在仿真里只要复位信号拉低所有寄存器立即清零非常干净。但真实FPGA的复位释放时刻往往和时钟沿有随机相位差如果复位释放时间不满足寄存器的复位恢复时间就会导致部分寄存器先释放、部分后释放系统进入一个完全没有定义的状态。解决方法是做异步复位同步释放让复位信号经过两级同步器后再送到各个模块。这个做法大家都会说但真在RTL里实践的没几个。仿真赛题不会直接考你上板但设计文档里如果缺少复位同步策略评审问一句“你这个复位直接连到所有寄存器了吗”基本就哑火了。跨时钟域是另一个在仿真里特别容易被掩盖的问题。AFDX端系统里通常有多个时钟域MAC接收时钟来自PHY比如25MHz系统逻辑时钟可能是100MHz配置总线又是另一个时钟。仿真时你可以把所有模块都挂在同一个时钟下功能照样跑通。但真实AFDX端系统的MAC接收侧本来就工作在不同频率赛题如果想让你实现一个接近真实产品的端系统异步FIFO、握手同步、格雷码跨时钟域处理这些都要体现在你的RTL和设计文档里而不是说“赛题没有要求我就忽略了”。3.2 端系统RTL怎么拆模块划分与调度器实现一个AFDX端系统发送方向合理模块划分大概是这样的应用接口模块接收上层要发送的数据写入发送缓冲VL配置表存储每条虚拟链路的使能、BAG、目标MAC、最大帧长、时隙偏移发送调度器根据VL配置表周期性地产生发送请求发送MAC负责以太网帧头、IP头、UDP头、SN的拼接与CRC生成发送缓冲管理按VL划分FIFO避免不同VL之间互相阻塞用Verilog实现VL调度器核心就是一个按BAG周期循环的计数器。下面是我常用的模板思路// 单条虚拟链路的BAG调度计数器100MHz时钟BAG2ms // 2ms 200000个时钟周期对应计数器上限值 localparam integer BAG_CYCLES 200000; reg [31:0] bag_cnt; reg tx_req; always (posedge clk or negedge rst_n) begin if (!rst_n) begin bag_cnt 32d0; tx_req 1b0; end else if (bag_cnt BAG_CYCLES - 1) begin bag_cnt 32d0; tx_req 1b1; // 发出本周期唯一的发送请求 end else begin bag_cnt bag_cnt 1b1; tx_req 1b0; end end这只是一个VL的写法。多VL时不能简单地把每个计数器独立运行后把所有tx_req用或门拼起来否则就会出现多个VL同时请求发送的情况。正确做法是给每个VL一个“时隙偏移”参数让它的发送请求分布在不同的时间相位上。比如A VL偏移0个周期B VL偏移100个周期C VL偏移200个周期发送MAC按优先级仲裁。这样BAG约束没有被破坏同时峰值带宽也被限制住了。很多参赛者的设计文档里根本没有“为什么偏移取这几个数”的解释。评审更希望看到你写清楚这个端系统一共有多少VL、每个VL的BAG是多少、各自偏移多少、按最坏情况计算最大瞬时带宽是多少、是否低于物理链路速率。这些计算过程比源码本身更能体现工程能力。3.3 验证环境怎么搭激励、断言与覆盖率赛题要求提交仿真波形但光有一张“信号在跳”的波形截图是不够的。真正有价值的仿真是带自动比对、带断言、带覆盖率统计的。验证AFDX端系统至少要准备几类测试用例单VL基本发送验证帧格式、SN递增、BAG周期是否正确多VL调度验证时隙偏移是否生效有无瞬时带宽越限接收完整性构造帧间隙过小、SN跳变、帧超长、CRC错误等异常帧冗余管理A/B双网交错到达、单网持续丢帧、重复旧帧等场景边界场景SN从65535回绕到0、发送缓冲满、配置表动态修改testbench里建议使用断言来检查关键性质。比如“同一条VL的任意两个连续发送帧的间隔不小于BAG×9/10”把这类约束写成断言仿真过程中一旦违反立刻报错比手动盯波形高效得多。SystemVerilog里的assert property可以用在仿真验证中即使你的设计代码是Verilogtestbench也可以适当用系统函数做自动比对。覆盖率也要提一嘴。赛题评审未必要求行覆盖率到90%以上但你至少要在测试报告里说明状态机覆盖了哪些分支、哪些边界条件没有测到、为什么没有测到。能主动承认验证盲区的设计者比一个声称“全部通过”但证据不足的人更可信。3.4 从仿真到可综合中间差着一整套约束仿真赛题虽然不要求最终上板但评审不会只看功能。你提交的RTL应该具备“任意时刻都可以被综合到FPGA”的工程素养。判断标准有几个代码是否全部使用可综合语法initial块、延迟#、force/release是否只出现在testbench而不是设计代码是否有意识避免生成不必要的锁存器比如case语句缺省项没写全跨时钟域信号是否有同步处理时钟信号是否被逻辑门产生而不是统一连接到PLL或专用时钟引脚中科亿海微的FPGA平台对应的EDA工具链里综合、布局布线的报告和约束文件时钟约束、引脚约束、时序例外都是可以做的。你不需要真的把整个设计上板但在工程里建一个综合目标、把时序约束写好、看看综合后的最高频率能达到多少这本身就是对“仿真零硬件”门槛的一次主动突破。如果你交上去的设计代码综合后时序收敛不了说明这不是一个可持续的设计哪怕功能上“仿真全绿”也只能算半成品。4. 第三道真实门槛工具链与工程习惯4.1 换一套EDA工具比换赛题更花时间很多参赛者平时用的是某一家FPGA厂商的IDE界面、快捷键、IP核生成方式、仿真器配置都熟悉了。换到中科亿海微的EDA环境之后第一反应往往是“怎么工程结构都不一样”。国产FPGA工具链这些年进步很大但和国外主流工具相比在易用性、文档完整度、社区问答资料上还有差距。这不是贬低而是客观情况你用国外工具遇到问题随手一搜就是一堆答案用国产工具遇到问题可能需要自己读用户手册甚至靠反复尝试摸索。所以备赛的第一步不是写代码而是先花三到五天把工具链跑通。建议顺序是安装EDA工具、打开厂商提供的demo工程、跑一遍仿真、尝试修改一个小功能、重新仿真并检查波形。这个过程看起来和AFDX没关系但它决定了你后面所有开发工作的基础。这里有一个很重要的心态调整不要用“这个工具怎么这么难用”来消耗精力。工具是用来出结果的不是用来较劲的。如果仿真环境里IP核版本和demo工程不匹配先检查库路径和工程配置而不是急着改代码。把工具链的常见报错整理成自己的问题清单能大幅减少后面卡壳的时间。4.2 文档、配置表与代码规范评审直接看这些仿真赛题因为没有上板环节评审判断你工作量的主要依据就是三样东西源码、测试报告、设计文档。其中设计文档的作用经常被低估。一份好的设计文档至少要包含需求分析赛题要求的每一项功能如何分解、系统架构模块划分和接口定义、关键设计说明调度器、冗余管理的实现思路、验证计划测试用例列表和覆盖率统计、问题清单调试过程中遇到的问题及解决方式。文档不需要写得像论文但逻辑要完整让一个没有看过你代码的人也能理解你的设计思路。配置表管理也是一个容易被忽视的工程细节。AFDX端系统的VL配置表可能有几十个条目每个条目包含VL ID、BAG、偏移、目标MAC、最大帧长。手写在Verilog里当然可以但如果要改动就得一个个改还容易漏。建议用一个文本或CSV格式的配置表通过脚本转换成Verilog头文件这样设计文档和源码始终保持一致。评审看到你能用工具链自动生成配置头文件对工程化的认同感会明显不一样。代码规范更不用多说。模块命名、信号命名、文件头注释、状态机写法这些平时看起来是小问题但在评审眼里直接反映了你是否具备参与工业级项目的基本素养。很多作品功能实现完全没问题因为代码写得像一团乱麻拿不到应有的分数非常可惜。4.3 工程可维护性parameter化、命名与注释的威力写RTL和写普通软件有一点很像代码写出来是给人看的顺便给机器跑。赛题评审要读你的代码如果你的代码没有参数化、没有注释、信号命名全是a1、b2这种就算功能全对也很难拿到高分。BAG、最大帧长、MAC地址这类配置参数全部用parameter或localparam定义禁止在always块里直接写死。比如前面示例里的BAG_CYCLES如果换成BAG4ms只需要改一个常量而不是全文件搜索数字200000然后逐个替换。这种细节看起来不起眼但评审通过代码缩进、命名一致性、注释完整性很快就能判断出作者是不是有工程经验。命名方面建议所有信号名带上模块前缀比如vl_sched_tx_req、mac_tx_data、sn_current。这样在仿真波形里按信号名过滤时能一目了然也便于多人协作。注释不要写“这是计数器”这种废话而是写“为什么这里计数到BAG_CYCLES-1就清零为什么复位后第一个BAG会额外多出一拍延时”。5. 备赛路线与实操建议5.1 建议的备赛节奏六到八周足够如果你从零开始不建议压缩到两周内突击。这个题量的合理备赛周期是六到八周每周投入十到十五个小时。第一周和第二周属于“打地基”阶段。做的事情有通读赛题要求、把ARINC 664 Part 7的公开资料和中文导读看一遍、安装工具链并跑通厂商demo、搭建自己的testbench工程框架。这个阶段不写业务代码只解决“工具能用、工程能跑”的问题。第三周到第五周是“核心实现”阶段。按照模块划分依次完成发送调度器、发送MAC、接收MAC、完整性校验、冗余管理。每个模块写完必须立刻跑独立testbench验证不要攒到集成时一起查bug。每完成一个模块就把对应的验证用例和波形截图存档这些都是后面测试报告的素材。第六周到第七周是“系统集成与验证”阶段。把各个模块连起来构造完整帧收发链路跑异常注入测试统计断言覆盖率整理问题清单。这个阶段会暴露很多模块接口不匹配的问题比如发送MAC的握手信号时序和调度器预期不一致需要静下心排错。最后一周是“文档与收尾”阶段。整理设计文档、测试报告、PPT答辩材料。不要小看这周很多功能实现得不错的作品就是倒在文档上评审看不到你的设计思路自然给不出高分。5.2 哪些模块先做哪些坑提前排如果从易到难排序我建议的实现顺序是发送MAC、接收MAC、VL调度器、完整性校验、冗余管理。发送MAC是最基础的搭好之后就能产生标准以太网帧验证环境也随之跑通。接收MAC紧接着做因为它的帧解析逻辑可以复用发送端的组包思路两者一起调试效率最高。VL调度器需要有发送MAC做载体才能看到完整效果所以放在第三位。完整性和冗余管理需要接收端有帧进来才能测试所以放到最后。提前排坑方面有五个点值得注意字节序问题一定要从第一天就盯住构造帧时统一使用大端思路避免后面全部返工所有跨模块握手信号建议都用valid-ready协议不要用单脉冲加延时猜时序仿真时钟尽量贴近真实频率端系统100MHz、MAC时钟25MHz不同时钟域之间的异步FIFO从一开始就要设计进去不要过度依赖波形编辑器testbench里用断言和自动比对脚本比肉眼盯波形高效保留每一次调试出问题的原始波形这是测试报告里“问题分析”章节最好的素材5.3 怎么让作品在评审眼里“值高分”评审看一份赛题作品内核是看“作者是否真的理解了这个领域”。所以你在设计文档里最重要的不是罗列功能而是解释清楚几个关键决策为什么选择这种调度器结构它如何保证所有VL的BAG约束在带宽预算计算中你的VL配置占用了多少比例留出多少余量冗余管理模块如何处理SN回绕和旧帧迟到边界条件是怎么验证的如果这是一款真实产品的端系统你的设计距离可制造还有哪些差距这些都是开放性题目。没有标准答案但能看出作者有没有深入思考。我见过一个作品源码中规中矩但设计文档里有一张“最坏情况带宽波形图”用仿真数据画出了连续100个BAG周期内每个周期的瞬时占用率并和理论带宽上限做了对比。光这一张图就让评委在答辩环节多问了他十分钟。这十分钟里他聊的都是设计取舍最后拿了一等奖。6. 一点个人体会做了这么多年和航空总线、FPGA相关的项目我最大的感受是仿真赛题的“零硬件门槛”对真正想学东西的人来说是一件好事。它把参与成本降到了最低一台普通电脑加一套免费EDA环境就够了。但正因为门槛低竞争反而更激烈因为人人都能提交作品评审只能从设计深度上拉开差距。如果让我给一个最实在的建议那就是不要只奔着“功能跑通”去。仿真里的绿灯有很多办法可以点亮但设计文档里写不出来的理解才是这个赛题真正想考的。中科亿海微办这个赛题不只是想让学生把AFDX跑一遍更想让更多人通过AFDX这个具体场景学会怎么做协议栈、怎么做验证、怎么做可维护的RTL设计。这套能力放在任何数字IC和FPGA岗位上都是通用的。花六周时间把这条链路完整走一遍即便最后没有拿奖收获也远比刷几道编程题要大。
返回列表