我正在从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);
答案 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);
或使用功能...