数据比较器在FPGA中的实现

1 RTL代码

module top_compare(
    input       I_sys_clk,
    input       I_reset_n,
    input [3:0] I_a      ,
    input [3:0] I_b      ,

    output  reg O_greater,
    output  reg O_less   ,
    output  reg O_equal

    );

always @(posedge I_sys_clk or negedge I_reset_n)
begin
    if(~I_reset_n) 
    begin
        O_greater <= 1'b0;
        O_less    <= 1'b0;
        O_equal   <= 1'b0;
    end 
    else
    begin
        O_greater <= (I_a >  I_b);
        O_less    <= (I_a <  I_b);
        O_equal   <= (I_a == I_b);

    end
end

endmodule

1.1 RTL级结构

在这里插入图片描述

1.2 synthesis后结构

当数据位宽较小,比如为4位时,直接用LUT实现:

在这里插入图片描述

原理比较简单,纯纯的查表。

当数据位宽较大,比如位8位时,使用LUT和Carry Logic实现:

在这里插入图片描述

以判断 I_a > I_b 为例,总共使用8个LUT4。

第1个LUT输入 I_a[6]、I_b[6]、I_b[7]、I_a[7] ,不管其他位,如果这几位可以判断出 I_a > I_b (比如 I_a[7] = 1 且 I_b[7] = 0)则输出1,否则输出0。
第2个LUT判断 I_a[4]、I_b[4]、I_b[5]、I_a[5] 。
第3个LUT判断 I_a[2]、I_b[2]、I_b[3]、I_a[3] 。
第4个LUT判断 I_a[0]、I_b[0]、I_b[1]、I_a[1] 。

以上4个LUT的输出对应carry logic的进位生成输入DI。

第5个LUT输入 I_a[6]、I_b[6]、I_b[7]、I_a[7] ,如果 I_a[6] = I_b[6] 且 I_a[7] = I_b[7] ,则输出1,否则输出0。
同理其他LUT判断剩余bit。

以上4个LUT的输出对应carry logic的进位传送输入S。

我们知道,carry logic的CO输出为:

{ C O = D I , S = 0 C O = C I , S = 1 D I 与 C I 不 同 时 取 1 \left\{ \begin{aligned} CO = DI \quad,S=0 \\ CO = CI \quad,S=1 \\ DI与CI不同时取1 \end{aligned} \right. CO=DI,S=0CO=CI,S=1DICI1

又有进位链的CYINIT接地,也就是说,判断的逻辑为:

  1. 首先判断[1:0]是否相等,如果相等则CO[0] = 0。如果不相等则判断大小:输出进位CO[0] = I_a[1:0] > I_b[1:0] ? 1 : 0。
  2. 然后判断[3:2]是否相等,如果相等则CO[1] = CO[0]。如果不相等则判断大小:输出进位CO[1] = I_a[3:2] > I_b[3:2] ? 1 : 0。
  3. 同理判断[5:4]。
  4. 最后判断[6:5]是否相等,如果相等,则根据之前的比较在CO[3]输出结果。如果不相等则CO[3] = I_a[6:5] > I_b[6:5] ? 1 : 0。
  5. 最终,如果I_a > I_b,则CO[3] == 1。否则等于0。
开始
I_a[1:0]==I_a[1:0] ?
CO[0] = 0
CO[0] = I_a[1:0] > I_b[1:0] ? 1 : 0
I_a[3:2]==I_a[3:2] ?
CO[1] = CO[0]
CO[1] = I_a[3:2] > I_b[3:2] ? 1 : 0
I_a[3:2]==I_a[5:4] ?
CO[2] = CO[1]
CO[2] = I_a[5:4] > I_b[5:4] ? 1 : 0
I_a[6:5]==I_a[6:5] ?
CO[3] = CO[2]
CO[3] = I_a[6:5] > I_b[6:5] ? 1 : 0
CO[3] = 1 ?
I_a > I_b
结束
基于FPGA 在高速数据采集方面有单片机和DSP 无法比拟的优势, FPGA 具有时钟频率高,内部延时小, 全部控制逻辑由硬件完成, 速度快,效率高,组成形式灵活等特点。因此,本文研究并开发了一个基于FPGA数据采集系统。FPGA 的IO 口可以自由定义,没有固定总线限制更加灵活变通。本文所提出的数据采集系统设计方案,就是利用FPGA 作为整个数据采集系统的核心来对系统时序和各逻辑模块进行控制。依靠FPGA 强大的功能基础,以FPGA 作为桥梁合理的连接了ADC、显示器件以及其他外围电路,最终实现了课题的要求,达到了数据采集的目的。     传统的数据采集系统,通常采用单片机或DSP作为主要控制模块,控制ADC,存储器和其他外围电路的工作。随着数据采集对速度性能的要求越来越高, 传统采集系统的弊端就越来越明显。单片机的时钟频率较低且需用软件实现数据采集, 这使得采集速度和效率降低,此外软件运行时间在整个采样时间也占很大比例,而FPGA 有单片机无法比拟的优势。FPGA 时钟频率高内部时延小, 全部控制逻辑由硬件完成, 速度快,效率高。数字信号处理是以数字形式对信号进行采集, 变换,滤波估值,增强,压缩,识别等处理,从而得到符合需要的信号形式。而信号的处理目前有两种方式:使用信号处理器DSP 通过软件编程实现;应用FPGA 实现。利用软件编程虽然有很大的灵活性,但DSP 所有指令的执行时间均为单周期, 而且受到串行指令流的限制每个时钟周期所有的操作数有限难以实现高速大规模运算。现在大容量,高速度的FPGA 采用硬件描述语言VHDL 实现整个系统,允许设计人员利用并行处理技术实现高速信号处理算法并只需单个处理器就能通过模块化设计实现所期望的性能, 很好的解决了上述矛盾。趋势:随着便携式设备需求的增长,对FPGA 的低压,低功耗的要求日益迫切,芯片向大规模系统芯片靠近,力求在大规模应用取代ASIC,位增强市场竞争力,各大厂商都在积极推广其知识产权和核心库,动态课重构技术的发展将带来系统设计方法的转变。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lu-ming.xyz

觉得有用的话点个赞吧 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值