1、FPGA设计入门简述FPGA设计入门简述一、 系统原则1. 硬件系统整个硬件系统应该如何进行模块划分与任务分配;什么样的算法和功能适合通过FPGA完成,什么样的算法通过其他芯片或电路;需要怎样规模的FPGA,以及FPGA数据接口。我们现在的设计,这些都会由谢老师及硬件设计的同学按照项目需要主要考虑设计,但我们做FPGA逻辑设计也必须去了解。至少需要了解我们FPGA逻辑设计所基于的硬件系统要实现怎样的任务;除FPGA外有哪些器件,分别实现什么功能;FPGA的规模如何,内部资源有哪些;FPGA的接口是哪些,需要和其他器件有怎样的数据通信。FPGA资源:可编程硬件单元:Altera的底层可编程硬件资
2、源叫LE,由1个Register和1个LUT组成;Block RAM资源: 片内集成RAM是FPGA的优势之一,高端FPGA的片内RAM规模越来越大。布线资源:布线资源用以连接不同的硬件单元,根据用途不同,布线资源的工艺、速度、驱动能力都不同。可配置IO单元:了解器件可以支持的IO标准;时钟资源:DLL、PLL;(片上处理器等硬核、高速串行收发器。)2. FPGA设计的宏观安排模块化设计是系统原则的一个很好的体现,它不仅仅是一种设计工具,它更是一种设计思路、设计方法,它是由顶向下、模块划分、分工协作设计思路的集中体现。结构层次化编码结构层次化编码是模块化设计思想的一种体现。结构层次化编码可以提
3、高代码的可读性,易于模块划分,易于分工协作,易于设计仿真测试激励。 结构的层次不要太深,一般为3到5层即可。 顶层模块最好仅仅包含对所有模块的组织和调用,而不应该完成比较复杂的逻辑功能。较为合理的顶层模块由输入输出管脚声明、模块的调用与实例化、全局时钟资源、全局置位/复位、三态缓冲和一些简单的组合逻辑等构成。 子某块之间可以有接口,但不能有子模块间跨层次的接口。 子模块的合理划分非常重要,应该综合考虑子模块的功能、结构、时序、复杂度等多方面因素。模块划分的技巧 对每个同步时序设计的子模块输出使用寄存器。 将相关的逻辑和可以复用的逻辑划分在同一模块内(呼应系统原则)。 将不同优化目标的逻辑分开。
4、(speed/area) 将存储逻辑独立划分成模块。二、 面积和速度的互换与平衡“面积”(area)指设计所消耗FPGA的逻辑资源的数量,可以用消耗的寄存器(Registor)和查找表(LUT)来衡量。“速度”(speed)指设计在芯片上稳定运行所能达到的最高频率。面积和速度是设计质量评价的指标。互换:一个设计如果时序余量较大,所能跑得频率远远高于设计要求,那么就能通过功能模块服用减少整个设计消耗的芯片面积,这就是用速度优势换取面积节约;反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么一般可以通过将数据流串并转换,并行复制多个操作模块,对整个设计采取“乒乓操作”和“串并转换”的思
5、想进行运作,在芯片输出模块再对数据进行“并串变换”,从宏观上看芯片满足了处理速度的要求,相当于用面积消耗换取速度提高。平衡:面积和速度是一对对立统一的矛盾体,我们需要平衡好二者的关系。可以是在面积一定的情况下,使设计的时序余量更大,频率跑得更高;或者是满足一定的时序要求,占用最小的芯片面积。举例:“乒乓操作”乒乓操作最大的特点是,通过“输入数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有时间停顿的送到“数据流运算处理模块”,被运算与处理。常常运用于流水线式算法,完成数据的无缝缓冲与处理。通过运用乒乓操作,用低速模块处理高速数据流(以面积换取速度)。假设A端输入数据流的速率为100M
6、b/s,乒乓操作的缓冲周期是10ms。在第一个缓冲周期10ms内,通过“输入数据选择单元”,从B1到达RAM1。B1的数据速率也是100Mb/s,在10ms内,RAM1写入1Mb数据。同理在第二个10ms,数据流被切换到RAM2,端口B2的数据速率也是100Mb/s,RAM2在第二个10ms被写入1MB的数据。在第三个缓冲周期,RAM1可以获得20ms的时间用于读取数据并送到“数据与数理模块1”。端口C1的数据流可以是50Mb/s,即数据预处理模块的吞吐能力也可以仅仅要求为50Mb/s。通过乒乓操作实现低速模块处理高速数据的实质是:通过缓存单元,实现了数据流的串并转换,并行使用多个处理模块,是
7、面积与速度互换的一个体现。串并转换串并转换的实现方法多种多样,根据数据的排序和数量的要求,可以选用寄存器、RAM等实现。流水线操作流水线设计的一个关键在于:整个设计时序的合理安排、前后级接口间数据流速的匹配。每个操作步骤的划分必须合理,要统筹考虑各个操作步骤间的数据流量。如果前几操作时间恰好等于后继操作的时间,前级输出直接汇入后级的输入。如果前级操作时间小于后级的操作时间,则需要对前级的输出数据适当缓存,才能汇入后级,还必须注意数据速率的匹配,防止后级数据的一处。如果前级操作时间大于后级的操作时间,则必须通过逻辑复制、串并转换等手段将数据分流,或者在前级对数据采用存储、后处理方式,否则会造成与
8、后级的处理节拍不匹配。流水线处理方式之所以频率比较高,是因为复制了处理模块,它是面积换取速度思想的有一种体现。三、 硬件原则FPGA设计采用硬件描述语言(HDL)与软件语言有本质的区别,硬件描述语言的本质在于对硬件的描述,所以我们在设计的时候要考虑不同的描述综合之后硬件电路的区别。For循环语句For循环会被综合其展开为所有变量情况的执行语句,每个变量独立占用资源,每条执行语句不能有效地服用硬件逻辑资源,造成浪费。推荐方式:先搞清楚设计的时序要求,做一个reg型计数器,在每个时钟沿累加,并在每个时钟沿判断计数器情况,做相应的处理,能够复用的操作尽量使用复用。即使所有操作不能服用,也采用case
9、语句展开处理。for(i=1; i16; i+) DoSomething();reg 3:0 counter;always(posedge clk)if(syn_rst) counter = 0;else counter = counter+1;always(posdge clk)begin case(counter) 4b0000: 4b0001: Default:endCase 和 if else的优先级一般来说case语句是“平行”的结构,所有的case的条件和执行都没有“优先级”。而“ifelse”大多数情况是有优先级。而建立优先级(优先级树)会消耗大量的组合逻辑,如果能够使用case
10、语句的地方,推荐使用case替换ifelse结构。阻塞赋值和非阻塞赋值阻塞赋值“=”:在这个语句没有执行完之前,后面的语句是不执行的。非阻塞赋值“=”:所有的语句可以并发执行,而前面的值是否执行完毕不会影响后面的语句。always(a,b)begin b=a; c=b;endalways(posedge clk)begin b=a; c 打包 - 发送 接收 - 同步检测 - 解包 - 解扰Serdes简介:串行收发器SERDES(SERializer & DESerializer)顾名思义,由两部分构成:发送端是串行发送单元SERializer,用高速时钟调制编码数据流;接收端为串行接收单元DESerializer,其中要作用是从数据流中恢复出时钟信号,并解调还原数据。对比并行数据传输和串行数据传输:并行数据传输:多根线占用板面积;每根线之间有干扰;每根线需要自己的匹配电路。串行数据传输:更少的走线占用板面积减少;信号线的干扰降到最小;相对于并行传输只用了一小部分的匹配电路;没有相位差问题。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1