将线值转换为verilog中的整数

时间:2011-04-14 16:30:58

标签: syntax binary integer verilog

我想将有线中的数据转换为整数。例如:

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

另外,如果我有一个整数值,如何将其转换回二进制?这似乎是一种笨拙的方式。谢谢。

2 个答案:

答案 0 :(得分:10)

轻松!如果分配给整数,则转换在verilog中自动进行。在verilog中,所有数据类型都只是位上的集合。

integer my_int;
always @( w )
    my_int = w;

答案 1 :(得分:1)

正如Marty所说:位向量和整数之间的转换是自动的。 但是有一些陷阱。如果你记住一个整数是32位有符号值,它们就很明显了。

  • 请勿尝试指定,例如一个40位的值到一个整数。
  • 默认位向量是无符号的,因此当它是整数时,32位向量可能会变为负数。
  • 反之亦然:负整数,例如: -3将成为值为8'b11111101
  • 的8向量

我不知道为什么要转换为整数然后返回。我只想指出有符号和无符号位向量完全支持算术运算。实际上它们更强大,因为没有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];