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输出:

本文详细探讨了如何在FPGA中实现一个4选1数据选择器,通过HDL代码展示了其工作原理。在时钟处理上,时钟信号首先经过IBUF,然后通过BUFG进行全局时钟分发。逻辑部分使用SliceL模块,利用LUT6实现数据选择功能。输出阶段,数据经过OLOGIC直通到OBUF,最终由IOBlock输出。此设计展示了FPGA内部结构及信号处理流程。
4373

被折叠的 条评论
为什么被折叠?



