FPGA——LUT/FDRE/FDCE/FDSE/FDPE

FPGA——LUT/FDRE/FDCE/FDSE/FDPE

查找表(Look-Up-Table)

LUT就是查找表,对于4输入的LUT而言,实际上就是4位地址位,一位数据位的存储器,能够存储16位数据,所以我们在FPGA设计中可以用LUT组建分布式的RAM。
LUT的一个重要功能是逻辑函数发生器。本质上,逻辑函数发生器存储的是真值表(Truth Table)的内容,而真值表则是通过布尔表达式获得。在vivado中,打开网表文件,选择相应的LUT,在property窗口中可以看到真值表。

如果用6输入的LUT实现4输入LUT的功能,那么就浪费了1-16/64=75%的资源,所以采用少输入的LUT可以更好的节省面积和资源
因为当输入数据的位数远大于一个LUT的输入时,就需要用多个LUT级联来实现逻辑,那么级联产生的延时也就不可避免了,这样就会制约系统的运行频率。那么为了避免级联数过于多,就采用插入寄存器的方法来实现


通过LUT代替组合逻辑,而LUT中的值只和输入有关,因此组合逻辑的功能由输入决定,不在和复杂度有关;

CLB可配置逻辑快

CLB是xilinx基本逻辑单元,每个CLB包含两个slices,每个slices由4个(A,B,C,D)6输入LUT和8个寄存器组成(中间应该还有一些选择器、与非门、或非门之类的东西)。


”logic cells” 是 Xilinx 创造出来的一个市场用的刻度,可以用来衡量不同内部结构甚至不同厂商的资源情况。

LC逻辑单元

“logic cells”代表的是一个没有其他任何功能的4输入LUT,在老一些的Xilinx的FPGA中,他们使用LUT的数目乘以1.2来计算LC的数目,因为一个LUT中还有一个进位链和MUX。
在较新的FPGA中,Xilinx采用了6输入LUT,这时他们采用系数1.6。

FDR : D Flip-Flop with Synchronous Rsest

同步清除D触发器。FDR 拥有一个时钟输入接口,一个D触发器数据接口,一个同步复位接口和一个触发器输出接口,当同步复位接口为高电平时,时钟的上升沿触发寄存器复位(置0);当同步时钟接口为低电平时,时钟的上升沿触发寄存器装载数据接口的数据。


FDRE:D Flip-Flop with Clock Enable and Synchronous Reset 带使能功能的同步清除D触发器,相比与FDR多了一个使能接口,当同步复位接口为高电平时覆盖所有其他输出,时钟的上升沿触发寄存器复位(置0);当同步时钟接口为低电平且使能接口为高电平时,时钟的上升沿触发寄存器装载数据接口的数据。

FDC :: D Flip-Flop with Asynchronous Clear 带异步清除D触发器 ,与 FDR的区别是。当CLR置为高电平时,不需要等到下一个时钟的上升沿就可以复位寄存器。

FDCE:D Flip-Flop with Clock Enable and AsynchronousReset 带使能功能的异步清除D触发器,相比与FDRE将同步复位变化成异步复位,当同步复位接口为高电平时,直接触发寄存器复位(置0);当同步时钟接口为低电平且使能接口为高电平时,时钟的上升沿触发寄存器装载数据接口的数据。

FDS:D Flip-Flop with Synchronous Set 带同步置位的D触发器 当置为端为低电平时,在时钟的上升沿触发数据保存在触发器中,当置位端为低电平时,在一个时钟的上升沿触发导致触发器清0

FDSE:D Flip-Flop with Clock Enable and Synchronous Set 带时钟使能和同步置位的D触发器。当置位端为高电平是覆盖所有输出,一个时钟的上升沿触发导致寄存器置位,当置位端为低电平和时钟使能位为高电平时,在一个时钟的上升沿触发导致寄存器装载数据口的数据。

FDP:D Flip-Flop with Asynchronous Preset 带有异步预置的D触发器 相比FDS不需要等到时钟的上升沿,即刻可进行置位。

FDPE:D Flip-Flop with Clock Enable and Asynchronous Preset 带有时钟使能和异步置位的D触发器 相比于FDSE不需要等到时钟的上升沿,即刻可进行置位。

使用always块综合实现各种触发器

点击查看代码

module exp(
    input  clk,
    input  rst, 
    input  A,
    input  B,
    output reg  Q,
    output reg  Q1,
    output reg  Q2,
    output reg  Q3  
    );
//or posedge rst
always @(posedge clk or posedge rst) begin //异步复位 综合出FDCE
    if(rst)
        Q<=0;      
    else begin
        Q<=A|B;
    end    
end

always @(posedge clk  ) begin  //同步复位 综合出FDRE
    if(rst)
        Q1<=1;
    else begin
        Q1<=A|B;
    end    
end

always @(posedge clk or posedge rst) begin//异步置位 综合出FDPE
    if(rst)
        Q2<=1;
    else begin
        Q2<=A|B;
    end    
end

always @(posedge clk) begin//同步置位 综合出FDSE
    if(rst)
        Q3<=1;
    else begin
        Q3<=A|B;
    end    
end
endmodule
  • 9
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
8选1选择器可以用FPGA实现,其中FPGA是一种可编程逻辑器件,可以通过编程来实现各种数字电路。下面是一个简单的8选1选择器的FPGA实现过程: 1. 首先,我们需要使用HDL语言(如Verilog或VHDL)来描述8选1选择器的行为和功能。在这个例子中,我们使用Verilog来实现。 2. 在Verilog代码中,我们需要定义8个输入信号和1个输出信号。这些输入信号表示8个不同的输入,输出信号表示选中的输入。 3. 在代码中,我们需要使用一个3位二进制编码器来选择输入信号。这个编码器将8个输入信号编码为3位二进制数,然后将这个编码器的输出与8个输入信号的“与”门相连。 4. 最后,我们需要使用一个多路选择器来选择编码器的输出,并将其作为输出信号。这个多路选择器可以通过使用FPGA内部的LUT(查找表)来实现。 下面是一个简单的Verilog代码示例,用于实现8选1选择器: ``` module mux8to1 ( input [7:0] in, input [2:0] sel, output reg out ); always @ (*) begin case (sel) 3'b000: out = in[0]; 3'b001: out = in[1]; 3'b010: out = in[2]; 3'b011: out = in[3]; 3'b100: out = in[4]; 3'b101: out = in[5]; 3'b110: out = in[6]; 3'b111: out = in[7]; endcase end endmodule ``` 这里我们使用了一个case语句来实现多路选择器的逻辑。在这个例子中,我们定义了8个输入信号(in[0]到in[7]),一个输出信号(out),以及一个3位二进制选择器(sel)。通过使用case语句,我们可以根据选择器的值选择正确的输入信号,并将其输出到输出信号中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值