如何计算specman中uint中设置位的数量?

发布于 2024-07-10 20:22:29 字数 137 浏览 9 评论 0原文

我想计算 Specman 中 uint 中设置位的数量:

var x: uint;
gen x;
var x_set_bits: uint;
x_set_bits = ?;

最好的方法是什么?

I want to count the number of set bits in a uint in Specman:

var x: uint;
gen x;
var x_set_bits: uint;
x_set_bits = ?;

What's the best way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

冰雪之触 2024-07-17 20:22:29

我见过的一种方法是:

x_set_bits = pack(NULL, x).count(it == 1);

pack(NULL, x)x 转换为位列表。
count 作用于列表并计算条件成立的所有元素。 在这种情况下,条件是该元素等于 1,即设置的位数。

One way I've seen is:

x_set_bits = pack(NULL, x).count(it == 1);

pack(NULL, x) converts x to a list of bits.
count acts on the list and counts all the elements for which the condition holds. In this case the condition is that the element equals 1, which comes out to the number of set bits.

风铃鹿 2024-07-17 20:22:29

我不了解 Specman,但我见过的另一种方法看起来有点俗气,但往往很有效:保留一个 256 元素的数组; 数组的每个元素都由与该值对应的位数组成。 例如(伪代码):

bit_count = [0, 1, 1, 2, 1, ...]

因此,bit_count2 == 1,因为二进制值 2 有一个“1”位。 同样,bit_count[255] == 8。

然后,将 uint 分解为字节,使用字节值索引到 bit_count 数组,并将结果相加。 伪代码:

total = 0
for byte in list_of_bytes
    total = total + bit_count[byte]

编辑

这个问题出现在书中美丽的代码,在亨利·S·沃伦 (Henry S. Warren) 的章节中。 此外,Matt Howells 还展示了一种可以有效计算位数的 C 语言实现。 请参阅此回答

I don't know Specman, but another way I've seen this done looks a bit cheesy, but tends to be efficient: Keep a 256-element array; each element of the array consists of the number of bits corresponding to that value. For example (pseudocode):

bit_count = [0, 1, 1, 2, 1, ...]

Thus, bit_count2 == 1, because the value 2, in binary, has a single "1" bit. Simiarly, bit_count[255] == 8.

Then, break the uint into bytes, use the byte values to index into the bit_count array, and add the results. Pseudocode:

total = 0
for byte in list_of_bytes
    total = total + bit_count[byte]

EDIT

This issue shows up in the book Beautiful Code, in the chapter by Henry S. Warren. Also, Matt Howells shows a C-language implementation that efficiently calculates a bit count. See this answer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文