我想将有线中的数据转换为整数。例如:
wire [2:0] w = 3'b101;
我想要一个将其转换为'5'并将其存储在整数中的方法。我怎么能以比这更好的方式做到这一点:
j=1;
for(i=0; i<=2; i=i+1)
begin
a=a+(w[i]*j);
j=j*2;
end
另外,如果我有一个整数值,如何将其转换回二进制?这似乎是一种笨拙的方式。谢谢。
答案 0 :(得分:10)
轻松!如果分配给整数,则转换在verilog中自动进行。在verilog中,所有数据类型都只是位上的集合。
integer my_int;
always @( w )
my_int = w;
答案 1 :(得分:1)
正如Marty所说:位向量和整数之间的转换是自动的。 但是有一些陷阱。如果你记住一个整数是32位有符号值,它们就很明显了。
我不知道为什么要转换为整数然后返回。我只想指出有符号和无符号位向量完全支持算术运算。实际上它们更强大,因为没有32位限制:
reg [127:0] huge_counter;
...
always @(posedge clk)
huge_counter <= huge_counter + 128'h1;
还支持使用矢量作为索引:
wire [11:0] address;
reg [ 7:0] memory [0:4095];
...
assign read_data = memory[address];