记得曾经有人贴过这样一道题,现在还是不知道怎么做
时间:10-02
整理:3721RD
点击:
有一个60bit的序列,a[59:0]
要求用尽量少的面积和时序找出第一个不为0的bit位置
例如 60‘h300330300033330,第一个不为0的bit位置为57
请各位大侠帮助解答一下
要求用尽量少的面积和时序找出第一个不为0的bit位置
例如 60‘h300330300033330,第一个不为0的bit位置为57
请各位大侠帮助解答一下
用移位方法一位一位移出,再判断是否为1或0
这是一个组合逻辑/时序逻辑折中的问题,
2楼大侠所说的是组合逻辑,就是做一个counter,把向量移出来,某一位为1时取出counter的值。
另外就是用纯组合逻辑,输入为60位的向量,输出为对应的bit的值。
用纯组合逻辑可以优化,感觉优化的余地还不小。
实际的设计可能是介于两种方法之间,从而减小面积和时延
说得不错。
首先,我们判断1bit是不是0的方法可以是用1'b1去异或;推广一下,判断4bits哪位是0的办法就是看是下列哪种情况中的一种,即4'b1?,4'b01?,4'b001?,4'b0001,4'b0000;依此类推,还可以推出60bits时的办法。
但是,这里有一个clock周期的限制,也有整个判断电路latency的要求。
至此,你就可以根据客观条件判断,是一次判断1bit还是4bits还是30bits还是60bits(感觉60的因数比较好些)。
至于代码就是写case,电路优化有综合工具。
赫赫,同意4楼的说法,
稍稍有一个不同的意见是: 我觉得尽量在代码级优化电路,综合工具的使用会有一些问题。
这个应该和“一个数加1”快速算法类似,只不过加1是要找第一个为0的位置。
