1 背景
为了更深入的了解FPGA的结构,分析一个简单的数据选择器在FPGA中的实现。
2 数据选择器的实现
2.1 HDL
`timescale 1ns / 1ps
module top(
input I_sys_clk,
input I_reset_n,
input I_a ,
input I_b ,
input I_c ,
input I_d ,
input [1:0] I_sel ,
output reg O_out
);
always @(posedge I_sys_clk or negedge I_reset_n)
begin
if(~I_reset_n)
begin
O_out <= 1'b0;
end
else
begin
case (I_sel)
2'd0: O_out <= I_a;
2'd1: O_out <= I_b;
2'd2: O_out <= I_c;
2'd3: O_out <= I_d;
default: O_out <= 1'bz;
endcase
end
end
endmodule
2.2 implementation结果
-
时钟
时钟引脚的输入:
关于IO Block的处理:时钟从PAD输入后,首先会经过一个IBUF,一般的信号输入,都会默认加上IBUF。
关于I/O Logic的处理:
由于不用进行延时或边沿处理,所以在这一部分是直通的。
随后,IDE自动给这个时钟信号添加了一个BUFG:
BUFG 输出的时钟信号给其他用户逻辑使用:
-
逻辑
使用一个SliceL实现4选1数据选择器。
LUT6地址与输入映射关系:
LUT6的表值为:
可以看到,实际映射I与device视图中LUT的A信号连接无相关。 -
输出
与输入过程相反,首先直通一个OLOGIC:
然后到IO Block,经过一个OBUF输出: