当前位置:首页 >> 信息与通信 >>

FPGA学习经验总结


是什么? 现状? FPGA? FPGA 是什么?FPGA 现状?怎样学习 FPGA? FPGA 是什么?
FPGA 是什么?FPGA 现状?怎样学习 FPGA? FPGA 是什么介绍 FPGA 是现场可编程门阵列的简称,FPGA 的应用领域最初为通信领域,但目前,随着信息产业和微电子技术的发展,可编程逻辑嵌入式系统设 计技术已经成为信息产业最热门的技术之一,应用范围遍及

航空航天、医疗、通讯、网络通讯、安防、广播、汽车电子、工业、消费类市场、测量 测试等多个热门领域。并随着工艺的进步和技术的发展,向更多、更广泛的应用领域扩展。越来越多的设计也开始以 ASIC 转向 FPGA, FPGA 正以 各种电子产品的形式进入了我们日常生活的各个角落。 FPGA 人才需求 中国每年对于 FPGA 设计人才的需求缺口巨大,FPGA 设计人才的薪水也是行业内最高的。目前,美国已有 FPGA 人才 40 多万,中国台湾地区也有 7 万多,而中国内地仅有 1 万左右,可见中国渴望有更多的 FPGA 人才涌现出来。 如何学习 FPGA? FPGA 对我们如此重要,那么对于初学者来说,到底该如何学习 FPGA 呢?学习一门技术最好有合适的指导老师,这样对掌握 FPGA 技术更容易, 可惜的是大部分的学校还未开设相关的课程,也缺少具有实践经验的老师,那么如何才能找到一种捷径帮助初学者快速学会如此具有竞争力的技术 呢? (1)掌握 FPGA 的编程语言 在学习一门技术之前我们往往从它的编程语言开始,如同学习单片机一样,我们从 C 语言开始入门,当掌握了 C 语言之后,开发单片机应用程 序也就不是什么难事了。学习 FPGA 也是如此,FPGA 的编程语言有两种:VHDL 和 Verilog,这两种语言都适合用于 FPGA 的编程,VHDL 是由美国军 方组织开发的,在 1987 年就成为了 IEEE 的标准;而 Verilog 则是由一家民间企业的私有财产转移过来的,由于其优越性特别突出,于是在 1995 年也成为了 IEEE 标准。VHDL 在欧洲的应用较为广泛,而 Verilog 在中国、美国、日本、台湾等地应用较为广泛,作者比较推崇是 Verilog,因为 它非常易于学习,很类似于 C 语言,如果具有 C 语言基础的人,只需要花很少的时间便能迅速掌握 Verilog,而 VHDL 则较为抽象,学习的时间较长。 作为在校大学生,学习 Verilog 的最好时期是在大学二年级开设《电子技术基础(数字部分)》时同步学习,不仅能够理解数字电路实现的方式, 更能通过 FPGA 将数字电路得以实现。大三、大四的学生还可以进一步强化学习 Verilog,建议以北京航天航空大学出版社出版的由夏宇闻教授编写 的《Verilog 数字系统设计教程(第二版)》作为蓝本,本书比较全面地、详细地介绍了 Verilog 的基本语法。如果是其他初学者,可以直接借助 《Verilog 数字系统设计教程(第二版)》和本书即能全面掌握 Verilog 的语法,这是学习 FPGA 的第一步,也是必不可少的一步。 (2)FPGA 实验尤为重要 除了学习编程语言以外,更重要的是实践,将自己设计的程序能够在真正的 FPGA 里运行起来,这时我们需要选一块板子进行实验,一般的红 色飓风的板子基本上可以满足大家的需求,大家感兴趣的不妨买一块做做实验。 (3)FPGA 培训不可忽视 在有条件的情况下,参加 FPGA 的培训可以在短时间内大幅提升自己的水平,因为有老师带着可以省去了很多弯路。笔者在网上发现一个北京 至芯科技 FPGA 培训班 http://www.zxopen.com/ 感兴趣的朋友可以去看看,网上也有很多的视频资源,也可下下来看看. 我想只要大家想学 FPGA,想从事 FPGA 工作,总会有办法找到适合自己的方法

如何学习 FGPA 第一步:学习了解 FPGA 结构,FPGA 到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程。很多开发板的程序写 的很烂,我也做过一段时间的开发板设计,我觉得很大程度上,开发板在误人子弟。不过原厂提供的正品开发板,代码很优秀的,可以借鉴。只有 了解了 FPGA 内部的结构才能明白为什么写 Verilog 和写 C 整体思路是不一样的。 第二步:掌握 FPGA 设计的流程。了解每一步在做什么,为什么要那么做。很多人都是不就是那几步吗,有什么奇怪的?呵呵,我想至少有一 半以上的人不知道 synthesize 和 traslate 的区别吧。 了解了 FPGA 的结构和设计流程才有可能知道怎么去优化设计,提高速度,减少资源,不要急躁,不要去在为选择什么语言和选择哪个公司的 芯片上下功夫。语言只是一个表达的方式,重要的是你的思维,没有一个好的指导思想,语言用得再好,不过是个懂语言的人。 第三步:开始学习代码了。我建议要学代码的人都去 Altera 或 Xilinx 的网站上下原厂工程师的代码学习。不要一开始就走入误区

做 fpga 主要是要有电路的思想: 作为初学者,往往对器件可能不是熟悉,那么应该对于数字电路的知识很熟悉吧,fpga 中是由触发器和查找表以及互联线等基本结构组成的, 其实在我们在代码里面能够看到的就是与非门以及触发器,不要把 verilog 和 c 语言等同起来,根本就是不同的东西,没有什么可比性,在写一句 程序的时候应该想到出来的是一个什么样的电路,计数器 选择器 三态门等等,理解时序,逻辑是一拍一拍的东西,在设计初期想的不是很清楚的 时候可以画画时序图,这样思路会更加的清晰,还有就是仿真很重要,不要写完程序就去往 fpga 中去加载,首先要仿真,尤其是对比较大型一点 的程序,想象自己是在做 asic,是没有二次机会的,所以一定要把仿真做好,还有很多新手对于语言的学习不知道选 vhdl 好还是 verilog 好,个 人偏好 verilog,当然不是说 vhdl 不好,反正写出来的都是电路,那当然就不要在语言的语法上面花太多的功夫了,verilog 言简意赅 assign always case if else 掌握这些几乎可以写出 90%的电路了,

Verilog 经验谈
规范很重要 工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的。逻辑设计也是这样: 如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,更不要说检错了;如果一个项目做了一半一个 人走了,接班的估计得从头开始设计;如果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用性。在逻辑方面,我觉 得比较重要的规范有这些: 1.设计必须文档化。要将设计思路,详细实现等写入文档,然后经过严格评审通过后才能进行下一步的工作。这样做乍看起来很花时间,但是从整个 项目过程来看,绝对要比一上来就写代码要节约时间,且这种做法可以使项目处于可控、可实现的状态。 2.代码规范。 a.设计要参数化。比如一开始的设计时钟周期是 30ns,复位周期是 5 个时钟周期,我 们可以这么写: parameter parameter parameter ... rst_n = 1'b0; # RST_TIME rst_n = 1'b1; ... # CLK_PERIOD/2 clk <= ~clk; 如果在另一个设计中的时钟是 40ns,复位周期不变,我们只需对 CLK_PERIOD 进行重新例化就行了,从而使得代码更加易于重用。 b.信号命名要规范化。 1) 信号名一律小写,参数用大写。 2) 对于低电平有效的信号结尾要用_n 标记,如 rst_n。 3) 端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪个模块去的关系排列,这样在后期仿真验证找错时后 如: module a( //input clk, rst_n, wren, rden, avalon_din, sdi, //output //related to avalon bus //related to serial port input //globle signal 方便很多。 CLK_PERIOD = 30; RST_MUL_TIME = 5; RST_TIME = RST_MUL_TIME * CLK_PERIOD;

data_ready, avalon_dout, //related to avalon bus ... ); 4) 一个模块尽量只用一个时钟,这里的一个模块是指一个 module 或者是一个 entity。在多时钟域的设计中涉及到跨时钟域的设计中最好有专门一 个模块做时钟域的隔离。这样做可以让综合器综合出更优的结果。 5) 尽量在底层模块上做逻辑,在高层尽量做例化,顶层模块只能做例化,禁止出现任何胶连逻辑(glue logic),哪怕仅仅是对某个信号取反。理 由同上。 6) 在 FPGA 的设计上禁止用纯组合逻辑产生 latch,带 D 触发器的 latch 的是允许的,比如配置寄存器就是这种类型。 7) 一般来说,进入 FPGA 的信号必须先同步,以提高系统工作频率(板级)。 8)所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也是极有好处的。 9) 除非是低功耗设计,不然不要用门控时钟--这会增加设计的不稳定性,在要用到门控时钟的地方,也要将门控信号用时钟的下降沿 打一拍再输 出与时钟相与。 clk_gate_en -------Q |------------------| ---\ gate_clk

-----------------|D _out | ------o|> clk |

|

---------|

)--------

|

| |

| ----

/

--------

-----------------------------------10)禁止用计数器分频后的信号做其它模块的时钟,而要用改成时钟使能的方式,否则这种时钟满天飞的方式对设计的可靠性极为不利,也大大增加 了静态时序分析的复杂性。如 FPGA 的输入时钟是 25M 的,现在系统内部要通过 RS232 与 PC 通信,要以 rs232_1xclk 的速率发送数据。不要这样做: always (posedge rs232_1xclk or negedge rst_n) begin ... end 而要这样做: always (posedge clk_25m or negedge rst_n) begin ... else if ( rs232_1xclk == 1'b1 ) ... end 11)状态机要写成 3 段式的(这是最标准的写法),即 ... always @(posedge clk or negedge rst_n) ... current_state <= next_state; ... always @ (current_state ...) ... case(current_state) ...

s1: if ... next_state = s2; ... ... always @(posedge clk or negedge rst_n) ... else a <= 1'b0; c <= 1'b0; c <= 1'b0; case(current_state) s1: a <= 1'b0; s2: b <= 1'b1; s3: c <= 1'b1; default: ... ... 3.ALTERA 参考设计准则 1) Ensure Clock, Preset, and Clear configurations are free of glitch es. 2) Never use Clocks consisting of more than one level of combinatori al logic. 3) Carefully calculate setup times and hold times for multi-Clock sy stems. 4) Synchronize signals between flipflops in multi-Clock systems when the setup and hold time requirements cannot be met. 5) Ensure that Preset and Clear signals do not contain race conditio ns. 6) Ensure that no other internal race conditions exist. 7) Register all glitch-sensitive outputs. Synchronize all asynchronous inputs. 9) Never rely on delay chains for pin-to-pin or internal delays. 10)Do not rely on Power-On Reset. Use a master Reset pin to clear al l flipflops. 11)Remove any stuck states from state machines or synchronous logic. 其它方面的规范一时没有想到,想到了再写,也欢迎大家补充。 //由于上面赋了默认值,这里就不用再对 b、c 赋值了(b、c 在该状态为 0,不会产生锁存器,下同) //赋默认值

==================================================================================== 时序是设计出来的

我的 boss 有在华为及峻龙工作的背景,自然就给我们讲了一些华为及 altera 做逻辑的一些东西,而我们的项目规范,也基本上是按华为的那一套去 做。在工作这几个月中,给我感触最深的是华为的那句话:时序是设计出来的,不是仿出来的,更不是湊出来的。 在我们公司,每一个项目都有很严格的评审,只有评审通过了,才能做下一步的工作。以做逻辑为例,并不是一上来就开始写代码,而是要先写总体 设计方案和逻辑详细设计方案,要等这些方案评审通过,认为可行了,才能进行编码,一般来说这部分工作所占的时间要远大于编码的时间。 总体方案主要是涉及模块划分,一级模块和二级模块的接口信号和时序(我们要求把接口信号的时序波形描述出来)以及将来如何测试设计。在这一 级方案中,要保证在今后的设计中时序要收敛到一级模块(最后是在二级模块中)。什么意思呢?我们在做详细设计的时候,对于一些信号的时序肯定会 做一些调整的,但是这种时序的调整最多只能波及到本一级模块,而不能影响到整个设计。记得以前在学校做设计的时候,由于不懂得设计时序,经常因 为有一处信号的时序不满足,结果不得不将其它模块信号的时序也改一下,搞得人很郁闷。在逻辑详细设计方案这一级的时候,我们已经将各级模块的接 口时序都设计出来了,各级模块内部是怎么实现的也基本上确定下来了。由于做到这一点,在编码的时候自然就很快了,最重要的是这样做后可以让设计 会一直处于可控的状态,不会因为某一处的错误引起整个设计从头进行。 如何提高电路工作频率 对于设计者来说,我们当然希望我们设计的电路的工作频率(在这里如无特别说明,工作频率指 FPGA 片内的工作频率)尽量高。我们也经常听说用资 源换速度,用流水的方式可以提高工作频率,这确实是一个很重要的方法,今天我想进一步去分析该如何提高电路的工作频率。 我们先来分析下是什么影响了电路的工作频率。 我们电路的工作频率主要与寄存器到寄存器之间的信号传播时延及 clock skew 有关。在 FPGA 内部如果时钟走长线的话,clock skew 很小,基本上可 以忽略, 在这里为了简单起见,我们只考虑信号的传播时延的因素。信号的传播时延包括寄存器的开关时延、走线时延、经过组合逻辑的时延(这样划 分或许不是很准确,不过对分析问题来说应该是没有可以的),要提高电路的工作频率,我们就要在这三个时延中做文章,使其尽可能的小。 我们先来看开关时延,这个时延是由器件物理特性决定的,我们没有办法去改变,所以我们只能通过改变走线方式和减少组合逻辑的方法来提高工作 频率。 1.通过改变走线的方式减少时延。 以 altera 的器件为例,我们在 quartus 里面的 timing closure floorplan 可以看到有很多条条块块,我们可以将条条块块按行和按列分,每一个条 块代表 1 个 LAB,每个 LAB 里有 8 个或者是 10 个 LE。它们的走线时延的关系如下:同一个 LAB 中(最快) < 同列或者同 行 < 不同行且不同列。我们通过给综合器加适当的约束(不可贪心,一般以加 5%裕量较为合适,比如电路工作在 100Mhz,则加约束加到 105Mhz 就可以了, 贪心效果反而不好,且极大增加综合时间)可以将相关的逻辑在布线时尽量布的靠近一点,从而减少走线的时延。(注:约束的实现不完全是通过改进布 局布线方式去提高工作频率,还有其它的改进措施) 2.通过减少组合逻辑的减少时延。 上面我们讲了可以通过加约束来提高工作频率,但是我们在做设计之初可万万不可将提高工作频率的美好愿望寄托在加约束上,我们要通过合理的设 计去避免出现大的组合逻辑,从而提高电路的工作频率,这才能增强设计的可移植性,才可以使得我们的设计在移植到另一同等速度级别的芯片时还能使 用。 我们知道,目前大部分 FPGA 都基于 4 输入 LUT 的,如果一个输出对应的判断条件大于四输入的话就要由多个 LUT 级联才能完成,这样就引入一级组合 逻辑时延,我们要减少组合逻辑,无非就是要输入条件尽可能的少,,这样就可以级联的 LUT 更少,从而减少了组合逻辑引起的时延。 我们平时听说的流水就是一种通过切割大的组合逻辑(在其中插入一级或多级 D 触发器,从而使寄存器与寄存器之间的组合逻辑减少)来提高工作频率 的方法。比如一个 32 位的计数器,该计数器的进位链很长,必然会降低工作频率,我们可以将其分割成 4 位和 8 位的计数,每当 4 位的计数器计到 15 后 触发一次 8 位的计数器,这样就实现了计数器的切割,也提高了工作频率。 在状态机中,一般也要将大的计数器移到状态机外,因为计数器这东西一般是经常是大于 4 输入的,如果再和其它条件一起做为状态的跳变判据的话, 必然会增加 LUT 的级联, 从而增大组合逻辑。 以一个 6 输入的计数器为例, 我们原希望当计数器计到 111100 后状态跳变, 现在我们将计数器放到状态机外, 当计数器计到 111011 后产生个 enable 信号去触发状态跳变,这样就将组合逻辑减少了。 上面说的都是可以通过流水的方式切割组合逻辑的情况,但是有些情况下我们是很难去切割组合逻辑的,在这些情况下我们又该怎么做呢? 状态机就是这么一个例子,我们不能通过往状态译码组合逻辑中加入流水。如果我们的设计中有一个几十个状态的状态机,它的状态译码逻辑将非常 之巨大,毫无疑问,这极有可能是设计中的关键路径。那我们该怎么做呢?还是老思路,减少组合逻辑。我们可以对状态的输出进行分析,对它们进行重 新分类, 并根据这个重新定义成一组组小状态机, 通过对输入进行选择(case 语句)并去触发相应的小状态机, 从而实现了将大的状态机切割成小的状态机。 在 ATA6 的规范中(硬盘的标准),输入的命令大概有 20 十种,每一个命令又对应很多种状态,如果用一个大的状态机(状态套状态)去做那是不可 想象的,我们可以通过 case 语句去对命令进行译码,并触发相应的状态机,这样做下来这一个模块的频率就可以跑得比较高了。 总结:提高工作频率的本质就是要减少寄存器到寄存器的时延,最有效的方法就是避免出现大的组合逻辑,也就是要尽量去满足四输入的条件,减少

LUT 级联的数量。我们可以通过加约束、流水、切割状态的方法提高工作频率。 =================================================================================== 做逻辑的难点在于系统结构设计和仿真验证 刚去公司的时候 BOSS 就和我讲,做逻辑的难点不在于 RTL 级代码的设计,而在于系统结构设计和仿真验证方面。目前国内对可综合的设计强调的比较 多,而对系统结构设计和仿真验证方面似乎还没有什么资料,这或许也从一个侧面反映了国内目前的设计水平还比较低下吧。 以前在学校的时候,总是觉得将 RTL 级代码做好就行了,仿真验证只是形式而已,所以对 HDL 的行为描述方面的语法不屑一顾,对 testbench 也一直不 愿意去学--因为觉得画波形图方便;对于系统结构设计更是一点都不懂了。到了公司接触了些东西才发现完全不是这样。 其实在国外,花在仿真验证上的时间和人力大概是花在 RTL 级代码上的两倍,现在仿真验证才是百万门级芯片设计的关键路径。仿真验证的难点主要在 于怎么建模才能完全和准确地去验证设计的正确性(主要是提高代码覆盖),在这过程中,验证速度也是很重要的。 验证说白了也就是怎么产生足够覆盖率的激励源,然后怎么去检测错误。我个人认为,在仿真验证中,最基本就是要做到验证的自动化。这也是为什么 我们要写 testbench 的原因。在我现在的一个设计中,每次跑仿真都要一个小时左右(这其实算小设计)。 由于画波形图无法做到验证自动化,如果用通过画波形图来仿真的话,一是画波形会画死(特别是对于算法复杂的、输入呈统计分布的设计),二是看波 形图要看死,三是检错率几乎为零。 那么怎么做到自动化呢?我个人的水平还很有限,只能简单地谈下 BFM(bus function model,总线功能模型)。 以做一个 MAC 的 core 为例(背板是 PCI 总线),那么我们需要一个 MAC_BFM 和 PCI_BFM 及 PCI_BM(PCI behavior model)。MAC_BFM 的主要功能是产 生以太网帧(激励源),随机的长度和帧头,内容也是随机的,在发送的同时也将其复制一份到 PCI_BM 中;PCI_BFM 的功能则是仿 PCI 总线的行为,比如被 测收到了一个正确帧后会向 PCI 总线发送一个请求, PCI_BFM 则会去响应它, 并将数据收进来; PCI_BM 的主要功能是将 MAC_BFM 发送出来的东西与 PCI_BFM 接收到的东西做比较,由于它具有了 MAC_BFM 的发送信息和 PCI_BFM 的接收信息,只要设计合理,它总是可以自动地、完全地去测试被测是否工作正常, 从而实现自动检测。 华为在仿真验证方面估计在国内来说是做的比较好的,他们已建立起了比较好的验证平台,大部分与通信有关的 BFM 都做好了,听我朋友说,现在他们 只需要将被测放在测试平台中,并配置好参数,就可以自动地检测被测功能的正确与否。 在功能仿真做完后,由于我们做在是 FPGA 的设计,在设计时已经基本保证 RTL 级代码在综合结果和功能仿真结果的一致性,只要综合布局布线后的静 态时序报告没有违反时序约束的警告,就可以下到板子上去调试了。事实上,在华为中兴,他们做 FPGA 的设计时也是不做时序仿真的,因为做时序仿真很 花时间,且效果也不见得比看静态时序分析报告好。 当然了,如果是 ASIC 的设计话,它们的仿真验证的工作量要大一些,在涉及到多时钟域的设计时,一般还是做后仿的。不过在做后仿之前,也一般会 先用形式验证工具和通过静态时序分序报告去查看有没有违反设计要求的地方,这样做了之后,后仿的工作量可以小很多。 在 HDL 语言方面,国内语言很多人都在争论 VHDL 和 verilog 哪个好,其实我个人认为这并没有多大的意义,外面的大公司基本上都是用 verilog 在做 RTL 级的代码, 所以还是建议大家尽量学 verilog。 在仿真方面, 由于 VHDL 在行为级建模方面弱于 verilog, VHDL 做仿真模型的很少, 用 当然也不是说 verilog 就好,其实 verilog 在复杂的行为级建模方面的能力也是有限的,比如目前它还不支持数组。在一些复杂的算法设计中,需要高级语言做抽象才能描述出 行为级模型。在国外,仿真建模很多都是用 System C 和 E 语言,用 verilog 的都算是很落后的了,国内华为的验证平台好像是用 System C 写。 在系统结 构设计方面,由于我做的设计还不够大,还谈不上什么经验,只是觉得必须要具备一些计算机系统结构的知识才行。划分的首要依据是功能,之后是选择 合适的总线结构、存储结构和处理器架构,通过系统结构划分要使各部分功能模块清晰,易于实现。这一部分我想过段时间有一点体会了再和大家分享, 就先不误导大家了。


相关文章:
FPGA学习心得大报告
FPGA学习心得大报告_学习总结_总结/汇报_实用文档。《FPGA 技术基础》学习报告 --课程内容学习心得 姓学 名: 号: 瞿麟 201010401128 自动化 101 薛小军 年级...
fpga学习心得
以前一直没有想过要来总结些什么,是感觉自 己对于 FPGA 学习心得学习 fpga 一个多月以来,完全从零开始学习,感觉自己学到的东西真不少,虽然还不 是很熟练,不过...
FPGA,学习心得体会
FPGA,学习心得体会_总结/汇报_实用文档。FPGA,学习心得体会 篇一:fpga 学习心得大报告 《fpga 技术基础》学习报告 --课程内容学习心得 姓名: 学号: 年级专业: ...
学习FPGA的心得
学习FPGA的心得_计算机硬件及网络_IT/计算机_专业资料。学习 FPGA 的心得 一:...FPGA学习经验总结 6页 免费 FPGA学习步骤及其前景 4页 免费 ©...
个人FPGA学习心得
个人FPGA学习心得_信息与通信_工程科技_专业资料。个人FPGA学习心得回想起自己学 FPGA,已经有一段时间了,从开始的茫然,到 后来的疯狂看书,设计开发板,调电路,练习...
FPGA个人学习总结1
FPGA个人学习总结1_总结/汇报_实用文档。FPGA个人学习总结1 1.综合方面 1)经...同样在 fpga 中对信号进行驱动,也采用一样的方法,不要用时钟去采 样, 直接...
FPGA个人学习总结1
FPGA个人学习总结1_信息与通信_工程科技_专业资料。个人学习FPGA心得1. 综合方面 1) 经综合后: 普通的数据单端输入都会加一个 IBUF 缓冲器; 数据单端输出有个 OB...
FPGA研发牛人心得总结
FPGA研发牛人心得总结_学习总结_总结/汇报_实用文档 暂无评价|0人阅读|0次下载|举报文档FPGA研发牛人心得总结_学习总结_总结/汇报_实用文档。FPGA 研发之道 FPGA ...
初学者之路—硬件学习经验
初学者之路—硬件学习经验本人是一个在校研究生,本科就读于吉林大学通信工程学院,...抱着这种热情,自己后来一点一点地深入的学习 fpga,一些常规逻辑 电路的设计,...
FPGA学习必看
FPGA学习必看_信息与通信_工程科技_专业资料。FPGA学习必看FPGA 设计基本原则,设计...普通方法达不到设计频率,那么可以通过数据流串并转换,并行 复制多个操作模块,对...
更多相关标签: