gpt4 book ai didi

Verilog:添加寄存器的各个位(组合逻辑,寄存器宽度可参数化)

转载 作者:行者123 更新时间:2023-12-01 09:29:40 26 4
gpt4 key购买 nike

我正在尝试想出一种方法来添加寄存器的各个位。例如,if regA = 111000 then regB = 3(regA 的位总和)。1) Verilog 或 SystemVerilog 中是否有任何可合成的函数/运算符可以直接用于执行此操作?

如果不是,那么问题可能有点有趣,尤其是因为操作必须在一个时钟周期内完成(纯组合逻辑)并且寄存器宽度是可参数化的。

2) 如果没有内置的 Verilog 或 SystemVerilog 运算符,那么可以做什么?

谢谢,乌杰瓦尔

最佳答案

Verilog(IEEE 标准 1364-2001 或更新版本):

integer i;
always @* begin
B = WIDTH_LOG2'b0;
for (i=0; i<WIDTH; i=i+1)
B = B + A[i];
end

SystemVerilog(IEEE 标准 1800-2005 或更高版本):

always_comb begin
B = '0; // fill 0
foreach(A[i])
B += A[i];
end

两者都会合成为组合逻辑。没有闩锁或触发器。

SystemVerilog 确实有 $countones(),但我不确定它是否可合成。 Ff 那么:always_comb B = $countones(A)

关于Verilog:添加寄存器的各个位(组合逻辑,寄存器宽度可参数化),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17159397/

26 4 0
文章推荐: scala - 在猫中实现 while(true)
文章推荐: moovweb - 在 Tritium 中,如何将所有

标签转换为

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com