确定verilog代码中的二进制数是否为2的幂

确定verilog代码中的二进制数是否为2的幂,verilog,fpga,one-hot-encoding,Verilog,Fpga,One Hot Encoding,我试图确定一个二进制数是否是二的幂,换句话说,它是一个热编码 我找到了一个这样做的方法,但它是用于整数的 有人能帮我把这个方法转换成在verilog中使用二进制数吗 你的代码没有问题,只是你使用的工具的局限性。 Verilator需要带有输入和输出的代码,以便可以对其进行刺激并显示结果。 它也不喜欢对多位操作数执行逻辑运算符 module is_power_of_two(output reg f); reg [7:0]; initial begin #1 v = 8'b11110000;

我试图确定一个二进制数是否是二的幂,换句话说,它是一个热编码

我找到了一个这样做的方法,但它是用于整数的

有人能帮我把这个方法转换成在verilog中使用二进制数吗


你的代码没有问题,只是你使用的工具的局限性。 Verilator需要带有输入和输出的代码,以便可以对其进行刺激并显示结果。 它也不喜欢对多位操作数执行逻辑运算符

module is_power_of_two(output reg f);

reg [7:0];
initial begin
   #1 v = 8'b11110000;
   #1;
end

always @(*) f = v != 0 && !((v & v - 1) != 0);

endmodule

想一想:整数是如何存储的?@Oldfart我也像你刚才想的一样。但是,当您尝试在verilog中实现代码并将代码传递到verilator中以进行linting时,您就会明白我为什么要发布这个问题。verilator会抱怨什么?它可能是错误的,或者它可能不喜欢您使用“int”而想要“integer”。请考虑二进制位。如果v是8位的呢?你干什么!那你怎么办?在这种情况下,f应该只有1位吗?请公布您尝试过的内容,以及您得到的错误。@Oldfart有人建议我使用power\u of_two=^v,这要简单得多。有什么意见吗?@kevin,还原异或将检查设置位计数奇偶校验,而不是两个属性的幂。比方说,对于数字4和7,xor都会报告为真,但7不是2的幂。好吧,顺便说一下,总是@*f=|v&&v&v-1;同样有效,约化或| v在逻辑上等同于0 v的不等式=0