FPGA系统设计原则和技巧之:FPGA系统设计的3个基本原则
VerilogHDL的环境下编译就会导致综合后的资源严重浪费。所以for语句在VerilogHDL环境下一般只用来做仿真或者行为级的描述。那么for语句在HDL语言中如何实现呢?有几种不同的模式,其中最常见的是以下方式。
reg[3:0]counter; //调用次数计数器
always@(posedgeclk) //计数器计数模块
if(syn_rst)
counter=4’b0;
else
counter=counter+1;
always@(posedgeclk) begin //使用case语句实现分支调用,
case(counter) //配合计数器计数,各分支可使用同样的执行语句
4’b000: DoSomething; //实现该语句的重复调用
4’b0001:DoSomething; //等同于高级语言中的for语句
……
default:DoSomething;
endcase
end
在counter计数器的不同状态可以设计不同的动作。如果都是完成一样的操作,就是循环for语句了。
9.1.3同步设计原则
同步电路和异步电路是FPGA设计的两种基本电路结构形式。
异步设计的核心电路是由组合逻辑电路构成的,比如异步的SRAM、FIFO的读写控制信号,地址译码电路等。这类电路的输出信号不依赖于任何时钟信号。异步电路最大缺陷就是会产生毛刺。
同步设计的核心电路是由各种触发器构成的。这类电路的任何输出都是在某个时钟的边沿驱动触发器产生的。所以,同步设计可以很好地避免毛刺的产生。
在专用芯片(ASIC)的设计过程中,同步设计一般会比异步设计占用更多的资源。但是在FPGA设计过程中并不是这样。FPGA内部的最小单元是LE,每个LE里面既包括了实现异步电路需要的查找表资源,也包括了实现同步电路需要的寄存器资源。
如图9.4所示是Altera公司的Cyclone系列FPGA的LE结构图。从图中可以看出,这个LE中包含了输入输出的MUX,同步和异步的控制逻辑,LUT以及可编程寄存器。如果使用这个系列的FPGA(其他的FPGA类似)进行同步电路或异步电路的设计,那么不管使用的是LE中的LUT还是寄存器,综合工具综合的结果都是消耗一个LE。
图9.4CycloneLE结构图
因此,单纯的使用异步电路也并不会节省触发器的资源。或者说,使用同步设计电路,并不会带来FPGA资源的浪费。但是全同步的设计对于FPGA的仿真验证是有好处的。因为电路的所有动作都是在相同的时钟边沿来触发,可以减少整个设计的延迟,提高系统的工作频率。
FPGA系统设计 高速基本单元 VerilogHDL 异步设计 同步设计 相关文章:
- FPGA系统设计原则和技巧之:FPGA系统设计的3种常用IP模块(06-05)
- FPGA系统设计原则和技巧之:FPGA系统设计的3种常用技巧(06-05)
- Verilog门电平模型化(06-06)
- VHDL:中文版Verilog HDL简明教程:第3章 Verilog语言要素(06-06)
- VHDL:中文版Verilog HDL简明教程:第2章 HDL指南(06-06)
- VHDL:中文版Verilog HDL简明教程:第1章 简介(06-06)