投射到固定宽度的有符号数

时间:2016-09-07 16:18:28

标签: system-verilog uvm

我正在从UVM RAL模型中读回寄存器字段。字段本身是一个14位有符号数字,但RAL没有符号感,因此我需要抓取相关位然后将它们转换为带符号的数字

uvm_reg_data_t reg_value;
int destination;

reg_value = reg_field.get();
assign destination = signed'(14'(reg_value));

有没有办法用一个演员表做到这一点?我知道我可以定义一个类型然后使用它,但我想知道是否有这样的语法可以工作:

assign destination = (14's)'(reg_value);

2 个答案:

答案 0 :(得分:1)

在没有typedef的单个演员表中没有这样的语法。你也可以这样做

assign destination = signed'(reg_value[13:0]);

但我认为为字段类型创建typedef最好显示您的意图。

答案 1 :(得分:0)

您可以使用宏:

`define conv2signed(ral_reg) \
    signed'($size(ral_reg)'(ral_reg))

然后:

assign destination = `conv2signed(reg_value);

<强>更新

或(因为uvm_reg_data_t是我认为64b)然后:

`define conv2signed(ral_reg, reg_width) \                                                                                                                                                             
    signed'(reg_width'(ral_reg))

assign destination = `conv2signed(reg_value, 14);

或使用功能...