组合逻辑和FPGA之间的映射关系咱们知道了,那时序逻辑和FPGA之间又是一种怎样的映射关系呢?咱们就之前面寄存器章节的例子来向你们说明,也一同把当时为何用异步复位更节约资源的缘由告诉你们。咱们先来看一下同步复位D触发器的RTL代码,以下所示:
同步复位D触发器异步
1 //-------------------------------------------------- 2 module flip_flop( 3 input wire sys_clk , 4 input wire sys_rst_n , 5 input wire key_in , 6 7 output reg led_out 8 ); 9 10 //led_out:led灯输出的结果为key_in按键的输入值 11 always@(posedge sys_clk) 12 if(sys_rst_n == 1'b0) 13 led_out <= 1'b0; 14 else 15 led_out <= key_in; 16 17 endmodule 18 //--------------------------------------------------
代码编写完后依然须要点击“Start Analysis & Synthesis”图标进行分析和综合。而后双击“Netlist Viewers”下的“RTL Viewer”查看RTL视图。如图1所示,能够看到一个 D触发器的结构,也能够称为寄存器,还附加了一个选择器,用于同步复位的控制,和代码设计的结果是彻底一致的。
布局
点击“Start Compilation”图标全编译进行布局布线,完成后咱们能够看到“Flow Summary”资源使用量,如图2所示,能够看到使用了LE中的一个组合逻辑资源和一个时序逻辑资源。
学习
而后打开Chip Planner视图。Chip Planner打开后的界面如图3所示,咱们能够看到在版图模型中有一个块蓝色区域的颜色变深,说明该区域的资源被占用,在FPGA内部硬件结构简介中咱们知道这是一个逻辑阵列块LAB,咱们将该区域放大。
spa
如图4所示,放大后能够看到蓝色变深的区域中有16个小块,这16个小块就是LE,其中只有一个LE的颜色发生了变化,此次不只有蓝色,还有红色,说明该处的资源被使用了,双击这个LE便可观察其内部的结构。
设计
打开LE后内部的结构如该视图中点击下面复位信号的名字后会看到在LE的内部结构图中用绿色标注路径,如5所示,其中蓝色显示的是真实使用到的结构,灰色的是未使用到的结构,咱们能够看到①、②、③为三个输入,其中③为时钟的输入端,而后一个输出,和RTL代码的描述是对应的。由于咱们设计的是时序逻辑,因此此次咱们能够发现比组合逻辑多出来的结构主要是红色框所表示的寄存器。
code
在该视图中点击下面复位信号的名字后会看到在LE的内部结构图中用绿色标注路径,如图6所示,能够知道①为复位信号的输入端,②为key_in信号的输入端。
blog
咱们再来看一下异步复位D触发器的RTL代码,以下所示:图片
异步复位D触发器ip
1 //-------------------------------------------------- 2 module flip_flop( 3 input wire sys_clk , 4 input wire sys_rst_n , 5 input wire key_in , 6 7 output reg led_out 8 ); 9 10 //led_out:led灯输出的结果为key_in按键的输入值 11 always@(posedge sys_clk or negedge sys_rst_n) 12 if(sys_rst_n == 1'b0) 13 led_out <= 1'b0; 14 else 15 led_out <= key_in; 16 17 endmodule 18 //--------------------------------------------------
代码编写完后依然须要点击“Start Analysis & Synthesis”图标进行分析和综合。而后双击“Netlist Viewers”下的“RTL Viewer”查看RTL视图。如图7所示,咱们能够看到一个 D触发器的结构,和代码设计的结果是彻底一致的。资源
点击“Start Compilation”图标全编译进行布局布线,完成后咱们能够看到“Flow Summary”资源使用量报告,如图8所示,能够看到只使用了LE中的一个时序逻辑资源。
而后打开Chip Planner视图。Chip Planner打开后的界面如图9所示,咱们能够看到在版图模型中在一样的位置也有一个块蓝色区域的颜色变深,说明该区域的资源被占用,在FPGA内部硬件结构简介中咱们知道这是一个逻辑阵列块LAB,咱们将该区域放大。
如图10所示,放大后能够看到蓝色变深的区域中有16个小块,这16个小块就是LE,其中只有一个LE的颜色发生了变化,也有蓝色和红色,说明该处的资源被使用了,双击这个LE便可观察其内部的结构。
打开LE后内部的结构如图11所示,其中蓝色显示的是真实使用到的结构,灰色的是未使用到的结构,咱们能够看到①、②、③为三个输入,其中③为时钟的输入端,②仍为key_in的输入端,而复位信号①的位置则发生了变化,直接连到了寄存器上。
看到这里咱们不由会有两个疑问,异步复位D触发器LE内部结构图明明显示使用了查找表,为何却在“Flow Summary”资源使用量报告中却显示没有使用该部分资源?为何同步复位D触发器比异步复位D触发器多使用了一部分资源呢?
首先来讲第一个问题,虽然异步复位D触发器LE内部结构图明明显示使用了LUT,可是几乎没有任何逻辑须要使用LUT,至关于经过查找表将key_in信号链接到寄存器的输入端,因此在“Flow Summary”资源使用量报告中显示没有使用该部分资源。
而后是第二个问题,如图12所示,咱们将寄存器部分的视图放大来看,能够发现该寄存器自己就包含一个异步清零信号“aclr”,且该清零信号还标识为“!ACLR”,也就是低电平有效,这下咱们终于明白了为何代码中使用异步低复位了,由于这部分资源原本就有,不须要额外创造,而若是咱们使用同步高复位,就会增长额外的逻辑,须要使用LUT资源,因此同步复位D触发器比异步复位D触发器多使用了一个LUT,你们能够试想一下若是咱们使用的不少同步复位D触发器的时候就会占用不少没必要要的LUT资源,从而形成资源的浪费,但愿你们之后在编写代码的时候注意。
欢迎加入FPGA技术学习交流群,本群致力于为广大FPGAer提供良好的学习交流环境,不按期提供各类本行业相关资料!QQ交流群号:450843130