0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA开发中分治法的应用

FPGA开发之路 来源:FPGA开发之路 2023-08-16 09:55 次阅读

分治法是经典优化算法之一。分治分治,即分而治之。分治,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

分治法的思想我们也可以用在FPGA开发中,使得设计更加高效。

本文以 leading zero count 为例来看一下分治法的应用。

这个题目是计算一个 vector 的 leading zero 的数目。比如 8'b00001111,结果为4,而8'b00111111,结果为2。

Casex 优先级选择器

我们可以用最简单的 casex 优先级选择器来实现。假设输入的vector位宽为64。

always_comb begin
    count = 0;
    casex (vector)
       64'b00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000 : count = 64;
       64'b1???????_????????_????????_????????_????????_????????_????????_???????? : count = 0;
       64'b01??????_????????_????????_????????_????????_????????_????????_???????? : count = 1;
       64'b001?????_????????_????????_????????_????????_????????_????????_???????? : count = 2;
       ...
       64'b00000000_00000000_00000000_00000000_00000000_00000000_00000000_00000001 : count = 63;
    encase
end

综合结果如图一所示。Vivado综合完预估的slack为8.572ns,critical path是5级,共消耗71个LUT。

ca78a5c8-3b7d-11ee-9e74-dac502259ad0.png

图1 - leading zero count 1

分治法 - Tree Structure

现在我们使用分治法来实现这个功能。通过一个 balanced tree structure 来实现。

首先将 64bit 的 vector 分成32个 2bit 的小 vector。先对2bit的小 vector 做encode:

case(small_vector)
    2'b00: encoded = 2'b10;  // 2 leading zeros
    2'b01: encoded = 2'b01;  // 1 leading zero
    2'b10: encoded = 2'b00;  // 0 leading zero
    2'b11: encoded = 2'b00;  // 0 leading zero
endcase

然后按照如下规则将相邻的 encoded value 进行组合:

如果两边都是 1xxx,那么结果为 10..0

如果左边是 0xxx,那么结果为 0[左边]

如果左边是 1xxx,那么结果为 01[右边[msb-1:0]]

可以看到每个组合的操作是一个mux。每次组合后,新的vector位宽加1,然后新的vector再两两组合,直到得出最终的结果。

我们以8bit输入的vector为例:8'b00000111

按照2bit分解: 00 00 01 11

Encoded value: 10 10 01 00

两两组合: 100 001

再组合: 0101 = 5 leading zeros

当输入为64bit的vector时,此 tree structure 的设计综合结果如图2所示。Vivado综合后预估的slack为8.600ns,critical path为4级,消耗38个LUT。

ca9e57aa-3b7d-11ee-9e74-dac502259ad0.jpg

图2 - leading zero count 2

可以看到相比于casex的设计,tree structure节省了超过50%的LUT,同时逻辑级数也减少了一级。

总结

分治法的思想也可以应用在FPGA开发中。尤其是当我们遇到大位宽数据的处理时,分治法往往可以提升设计的资源使用率和时序结果。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1626

    文章

    21671

    浏览量

    601902
  • 分治法
    +关注

    关注

    0

    文章

    3

    浏览量

    5756
  • FPGA开发
    +关注

    关注

    1

    文章

    43

    浏览量

    14891
  • Vivado
    +关注

    关注

    19

    文章

    808

    浏览量

    66332

原文标题:分治法(Divide and Conquer)

文章出处:【微信号:FPGA开发之路,微信公众号:FPGA开发之路】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分治找出最大值和最小值的问题

    我用分治写了一个程序,找出一个数组中最大值和最小值,可是运行时总是报错段错误,我把源代码贴出来,还请高手赐教指点。#include"stdio.h"int s[10]={56
    发表于 03-21 11:00

    字符串与数组分治递归算法

    字符串与数组分治递归算法。
    发表于 09-05 22:49

    FPGA至简设计为什么这么简单

    由潘文明先生开创的IC/FPGA至简设计,具备划时代的意义。这种设计方法不仅将IC/FPGA学习难度降到了最低,同时将设计过程变得简单,并规范了代码避免了混乱,将出错几率降到最低。下面我们来看
    发表于 12-15 15:10

    python算法之使用分治求解凸包

    《python算法教程》Day11 - 分治求解平面凸包问题
    发表于 11-01 09:14

    那里能找到关于在FPGA中实现DDC中分数倍重采样的资料?

    请问,那里能找到关于在FPGA中实现DDC中分数倍重采样的资料?不是指用CIC实现,而是基于多相的结构实现。
    发表于 07-30 16:50

    电子设计师设计思想篇--分治法利弊

      分治 (divide and conquer) 是解决复杂问题的一种有效策略。本质上,它是把看似难以克服的问题分解成多个更小、更易于解决的部分。待这些部分被单独解决之后,把结果
    发表于 09-09 09:48 2963次阅读

    基于 FPGA XC3S1500开发板的太阳能自动跟踪系统

      本设计采用传统的视日运动跟踪,利用Xilinx公司提供的FPGA开发环境ISE,设计完成了基于XC3S1500开发板的
    发表于 09-29 09:42 1257次阅读
    基于 <b class='flag-5'>FPGA</b> XC3S1500<b class='flag-5'>开发</b>板的太阳能自动跟踪系统

    Altera FPGA的选型及开发

    本资料是关于Altera FPGA的选型及开发,内容大纲是:Altera的 FPGA体系结构简介;Altera的 FPGA选型策略;嵌入式逻辑分析工具SignalTAPII的使用;基于
    发表于 08-15 14:48 104次下载
    Altera <b class='flag-5'>FPGA</b>的选型及<b class='flag-5'>开发</b>

    聚类和划分的SAT分治判定

    满足性来判定原公式的可满足性,相当于用分治将复杂问题分解为多个子问题来求解.这种分治判定方法一方面降低了原公式的可满足性判定复杂度;另一方面,由于子句组的判定可以并行,因而判定速度能够得到进一步的提高.对于不能直接产生布尔子句
    发表于 01-24 17:41 0次下载

    浅谈FPGA设计中分频电路设计

    通常情况下,时钟的分频在FPGA设计中占有重要的地位,在此就简单列出分频电路设计的思考思路。
    发表于 07-10 17:18 2428次阅读

    分治算法详解:表达式的不同优先级

         我们号已经写了 动态规划算法,回溯(DFS)算法,BFS 算法,贪心算法,双指针算法,滑动窗口算法,现在就差个分治算法没写了,今天来写一下,集齐七颗龙珠,就能召唤神龙了~ 其实,我觉得回溯
    的头像 发表于 01-04 14:04 1710次阅读

    Intel FPGA开发流程指南

    开发FPGA设计,最终的产品是要落在使用FPGA芯片完成某种功能。所以我们首先需要一个带有Intel FPGA芯片的开发板。
    的头像 发表于 07-14 09:42 2968次阅读
    Intel <b class='flag-5'>FPGA</b><b class='flag-5'>开发</b>流程指南

    分治带来的好处

    以 Leading Zero Count 为例解释了分治带来的好处,本篇文章再举一个类似的例子。
    的头像 发表于 09-06 10:05 488次阅读

    fpga开发板是什么?fpga开发板有哪些?

    FPGA开发板是一种基于FPGA(现场可编程门阵列)技术的开发平台,它允许工程师通过编程来定义和配置FPGA芯片上的逻辑电路,以实现各种数字
    的头像 发表于 03-14 18:20 1840次阅读

    fpga开发是什么意思

    FPGA开发是指利用现场可编程逻辑门阵列(Field Programmable Gate Array,简称FPGA)进行硬件设计和实现的过程。FPGA是一种可编程的逻辑器件,它允许用户
    的头像 发表于 03-15 14:28 1107次阅读