‘’16bits位宽寄存器,用五(六也行)级逻辑判断其中有15个0和1个1‘’,这么道题目,面试无数,几乎没有人能答出来,连给我衍生‘’14个0和2个1‘’的机会都没有。

  今天的问题来源于知乎,某大牛说的面试题,据说很少有人给出正确答案。正确答案究竟是什么我也不清楚,我的目标是实现一个FPGA的版本,特记录于此。

  说明一下问题,一个16bits的数输入,检查其中1的个数,如果为独热码,即16位中只有1位为1,则输出为1。题目乍看起来很简单,使用Verilog,可以很轻松实现,实现方法不在赘述。出此面试题的人应该也不是考察HDL编码能力,而是考察面试者对底层逻辑的理解,出题人的本意应该是希望使用逻辑门来实现此功能,但本人是个FPGA工程师,就应该遵循FPGA的设计理念,所以决定使用LUT实现该功能。LUT为xilinx FPGA的原语,LUT是基于SRAM的查找表,使用查找表可以完成逻辑门的功能。如4输入LUT,则是一个4输入,1输出的查找表,查找表的深度为2^4=16,查找表的内容则是逻辑函数的真值表。作为FPGA工程师时刻都要清楚,FPGA的组合逻辑几乎都是用LUT完成的。

  言归正传,Xilinx 7系列的查找表为6输入,少于6输入可以只覆盖查找表的低位地址,多余6输入需要级联组合,这也就是FPGA中的逻辑层数,级联了几级便是几层逻辑层数。分析题目,16个输入,有一个输入为1则结果为True,多余1个或是全为0则False。这里引入另一个FPGA的设计理念,即并行二字,FPGA中的电路可以并行运行,不同功能模块只要没有先后依赖关系就可以并行处理。个人以为这个是FPGA和GPU的最大差别,GPU为单指令多数据SIMD,FPGA则为MIMD。GPU应该还是串行执行指令的,而FPGA的不能功能模块则为不同指令,这些不同指令可以同时执行。关于GPU与FPGA的差别,仅是个人思路整理,没有深刻研究过GPU。再继续说检测onehot,检测主要分成三部分,第一输入中只有一位为1则输出1,如0x001,0x002,0x004...2^n等,使用2个6输入LUT,1个4输入LUT,2*6+4=16个输入。6输入LUT真值表为64‘h0000_0001_0001_0116,4输入LUT真值表为16'h0116,每个真值表都能够检出仅存一个1的输入,每个LUT此时能得出的结果是,输出true表示仅有一个1存在,输出Flase表示输入可能有1个以上的1或是全为0,此时三个LUT输出求结果无解。所以还需要引入第二功能,检测全为0的输入,仍然是2个6输入LUT,1个4输入LUT,真值表值为64’d1,16'd1,表示只有0x0地址输出true,即全为0输入,同样有3个输出,此结果可以确定输入全为0,补充了第一步的条件。这两个功能为并行执行,为第一级组合逻辑,共6个输出,这6个输出可以作为函数输入求解。第二级功能使用一个6输入LUT,假设为全为0检测的输出是dout0[2:0],仅有独个1的输出是dout1[2:0],求结果result=dout1[0]&dout0[1]&dout0[2] | dout1[1]&dout0[0]&dout0[2] | dout1[2]&dout0[1]&dout0[0],这个函数正好是个6输入lut。前文已述,4输入lut实际使用6输入lut,所以该项目一共用了7个lut,共两层逻辑。代码改天再贴。

onehot编码检测的更多相关文章

  1. UTF编码检测

    最近工作上正好需要进行UTF编码检测,自己写了一个,分享给大家,希望可以帮得上有需要用的朋友 public bool isUtf8(byte[] rawText) { bool result = tr ...

  2. 文本离散表示(二):新闻语料的one-hot编码

    上一篇博客介绍了文本离散表示的one-hot.TF-IDF和n-gram方法,在这篇文章里,我做了一个对新闻文本进行one-hot编码的小实践. 文本的one-hot相对而言比较简单,我用了两种方法, ...

  3. one-hot编码理解

    one-hot是比较常用的文本特征特征提取的方法. one-hot编码,又称“独热编码”.其实就是用N位状态寄存器编码N个状态,每个状态都有独立的寄存器位,且这些寄存器位中只有一位有效,说白了就是只能 ...

  4. OneHot编码

    One-Hot编码 What.Why And When? 一句话概括:one hot编码是将类别变量转换为机器学习算法易于利用的一种形式的过程. 目录: 前言: 通过例子可能更容易理解这个概念. 假设 ...

  5. 文件编码检测.ZC一些资料(包含java的)

    1.IMultiLanguage3 或者 IMultiLanguage2 1.1.怎么判断XML 的编码格式(UTF-8或GB2312等)-CSDN论坛.html(https://bbs.csdn.n ...

  6. Spark MLlib特征处理:OneHotEncoder OneHot编码 ---原理及实战

    http://m.blog.csdn.net/wangpei1949/article/details/53140372 Spark MLlib特征处理:OneHotEncoder OneHot编码 - ...

  7. One-hot 编码/TF-IDF 值来提取特征,LAD/梯度下降法(Gradient Descent),Sigmoid

    1. 多值无序类数据的特征提取: 多值无序类问题(One-hot 编码)把“耐克”编码为[0,1,0],其中“1”代表了“耐克”的中 间位置,而且是唯一标识.同理我们可以把“中国”标识为[1,0],把 ...

  8. Spark2 oneHot编码--标准化--主成分--聚类

    1.导入包 import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Dataset import org.apache ...

  9. 在Keras模型中one-hot编码,Embedding层,使用预训练的词向量/处理图片

    最近看了吴恩达老师的深度学习课程,又看了python深度学习这本书,对深度学习有了大概的了解,但是在实战的时候, 还是会有一些细枝末节没有完全弄懂,这篇文章就用来总结一下用keras实现深度学习算法的 ...

随机推荐

  1. vue开发搭建(npm安装 + vue脚手架安装)

    一.概念 1.npm:  Nodejs下的包管理器. 2.webpack: 它主要的用途是通过CommonJS的语法,把所有浏览器端需要发布的静态资源,做相应的准备,比如资源的合并和打包. 3.vue ...

  2. 深度学习“四大名著”发布!Python、TensorFlow、机器学习、深度学习四件套!

    Python 程序员深度学习的"四大名著": 这四本书着实很不错!我们都知道现在机器学习.深度学习的资料太多了,面对海量资源,往往陷入到"无从下手"的困惑出境. ...

  3. MySQL一招入门

    连接mysql数据库命令:mysql -u root -p 创建mysql数据库:create databaase xx库; 创建mysql表: create table db_xx表( id int ...

  4. JDK8--08:Optional

    在程序运行时,空指针异常应该是最常见的异常之一,因此JDK8提供了Optional来避免空指针异常. 首先说明JDK8新增的Optional及相关方法的使用 Optional的常用操作: Option ...

  5. Python18行代码做出来这样有点浪漫,又有点极客的“内涵”图

    今天就来教大家这个套路: 如何使用 Python 来做出来这样有点浪漫,又有点极客的“内涵”图. 当然,能不能靠它得到心仪对象的青睐,就要靠你(命)了.(๑•́₃ •̀๑) 那么要怎么做呢? 我们先找 ...

  6. 与跨域相关的 jsonp 劫持与 CORS 配置错误

    参考文章: CORS(跨域资源共享)错误配置漏洞的高级利用 JSONP劫持CORS跨源资源共享漏洞 JSONP绕过CSRF防护token 读取型CSRF-需要交互的内容劫持 跨域资源共享 CORS 详 ...

  7. c语言学习笔记第二章———入门

    B站有视频演示 2.1软件安装 推荐软件 1.dev-c++ 下载链接:(腾讯软件管家的下载地址) https://sm.myapp.com/original/Development/Dev-Cpp_ ...

  8. (一)ELK 部署

    官网地址:https://www.elastic.co/cn/ ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部.   Elasticsearch ...

  9. Sightseeing,题解

    题目: 题意: 找到从s到t与最短路长度相差少于1的路径总数. 分析: 首先,搞明白题意之后,我们来考虑一下怎么处理这个1,怎样找相差为1的路径呢?我们这样想,如果有相差为1的路径,那么它将会是严格的 ...

  10. mysql数据库 创建、查看、重命名、复制和删除的基本操作

    在数据库中,表是最重要.最基本的对象,是存储数据的基本单位.数据表从哪里来呢?数据表由关系模式转换而来.但不是简单的转换. 在设计表结构时要考虑下面几个方面: 字段名要通俗易懂且具有代表性,字段名不允 ...