$signed() & $unsigned()
之前在做Verilog,有符号数和无符号数运算时,对这俩个一直没弄的很透彻。本文就以比较简短的篇幅去捋一下其用法。
为了节省各位的时间,先上结论:
小结
$signed()
和$unsigned()
本质是在做符号扩展- Verilog中没有“有符号数”的概念,都是在做无符号运算
- Verilog
*
在做无符号乘积
分析
简短的来解释一下
//定义四个 6 位数 和 俩个 4位数
logic [3:0] x, y;
logic [5:0] x_sign, y_sign;
logic [5:0] x_unsign, y_unsign;
assign x = 4'b1100;
assign y = 4'b0100;
assign x_sign = $signed(x); // x_sign = 6'b11_1100
assign y_sign = $signed(y); // y_sign = 6'b00_0100
assign x_unsign = $unsigned(x); // x_sign = 6'b00_1100
assign y_unsign = $unsigned(y); // y_sign = 6'b00_0100
//拿一个有符号数乘一个无符号数
logic [11:0] pum;
assign pum = $signed(x_sign * y_unsign);