8位数据中,"1"的个数识别

上一篇 / 下一篇  2017-03-09 23:16:11 / 个人分类:daydayup0309

Q:   统计出b0b1b2b3 b4b5b6b7里面 “1”的个数


如果能分割成 4 位,再分割成2位。
b01共有三种情况,0、1、2个"1".   可以表示成  b01={b0&b1,b0^b1}.
同理,b23 = {b2&b3,b2^b3};

画一个卡诺图:  (x^y)操作
       \ 00  01  10                      \ 00  01  10
           00|00  01  10                   00| 0    1    2
           01|01  00  11                   01| 1    2    3
           10|10  11  00                   10| 2    3    4  

可以看出  除了主对角线外,x^y 的值就是 b0123所包含的 "1"的个数。
        主对角线上,即x=y, 对应的b0123所含"1"的个数就是两倍。即 {b01,1'b0}


wire [1:0]   xor1_data = { (b0&b1)^(b2&b3), (b0^b1)^(b2^b3)};
wire           xor1_eq0 = | xor1_data;

wire  [2:0]  H_b0123 = xor1_eq0 ?  {1'b0,xor1_data} : {b0&b1,b0^b1,1'b0}; 
//////////////////////////////////////
wire [1:0]   xor2_data = { (b4&b5)^(b6&b7), (b4^b5)^(b6^b7)};
wire            xor2_eq0 = | xor2_data;

wire  [2:0]  H_b4567 =xor2_eq0 ?  {1'b0,xor2_data} : {b4&b5,b4^b5,1'b0}; 

wire [3:0]  H_b01234567 = H_b0123 + H_b4567 ;

我仿真了下代码,是可行的,至于具体综合的结果,希望各位拍砖.


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

(假如这个地方继续再画卡诺图),会发现 011亦或那部分会出现异常,
         \  000  001  010  011  100                     \  000  001  010  011  100  
  000 | 000  001  010  011  100               000 |   0       1      2      3       4   
  001 | 001  000  010  010  101               001 |   1       2      3      4       5
  010 | 010  011  000  001  110               010 |   2       3      4      5       6
  011 | 011  010  001  000  111                011 |   3       4      5      6       7   
  100 | 100  101  110  111  000               100 |   4       5      6      7       8   

能否找到一种,a+b = a^b的编码?


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2017-05-31  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 403
  • 日志数: 3
  • 建立时间: 2014-10-29
  • 更新时间: 2017-04-08

RSS订阅

Open Toolbar