2016-09-07 5 views
0

UVM RALモデルからレジスタフィールドを読み戻しています。フィールド自体は14ビットの符号付き数値ですが、私はちょうど、関連するビットを取得し、その後、署名数固定幅の符号付き数値へのキャスト

uvm_reg_data_t reg_value; 
int destination; 

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

にそれらをキャストする必要があるので、RALは、記号のセンスがないのいずれかでこれを行う方法はありますキャスト?私は型を定義して、それを使うことができ知っているが、働くだろう。このような構文があった場合、私は思っていた:

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

答えて

1

typedefせずに単一のキャストでこれを行うには、このような構文はありません。また

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

を行うことができますしかし、私は、フィールドタイプのtypedefを作成すると、自分の意思を表示することが最善だと思います。その後、

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

そして:

+0

私はこれらのレジスタフィールドはすでに私のregmap生成ツールから自動生成された 'typedef'sを持っていることに気づいた質問を入力した通り。とにかく、これは私が望んでいた答えではありませんでしたが、構文が存在しないことを知ってうれしかったです。 – nguthrie

0

マクロを使用することができます

assign destination = `conv2signed(reg_value); 

UPDATE:

またはその後(uvm_reg_data_tがあるので、私は64Bと思う):

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

と:

assign destination = `conv2signed(reg_value, 14); 

または関数を使用して...

関連する問題