How to identify rail0 or ral1 in RAL transaction

本文介绍了一种通过特定地址编码方案自动识别当前RAL访问来自哪个通道的方法。该方法利用12位地址,其中高4位用于区分不同的通道,低8位作为实际寄存器地址。此外,还详细介绍了如何在svidXactor中解析这些地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Following is the solution that can identify whether current RAL access is from rail0 or rail1 automatically.

 

1)      In svidRegFile, use 12 bits for block based address, among them lower 8 bits are “actual ” register base address, while higher 4 bits are used for SVID VR address, for example , if it is rail0, the higher 4 bits would be “4’b0000”, if rail1: 4’b0001, if rail2: 4’b0010,…..

 

system svidRegSys {

   bytes 64;

 

   block svidRail0=svidReg0 @'h000;

   block svidRail1=svidReg1 @'h100;

 

}

 

2)      In svidXactor, divide the 12 bits address into SVID VR address + register actual address as following:

 

task svidXactor::prepare_ralrd_trans(input svidRALTrans ral_trans);

  svid_trans.address=ral_trans.addr[11:8];//VR address

  svid_trans.cmd=5'h07;//GETREG;

  svid_trans.payload=ral_trans.addr[7:0];//register address   

 …

endtask

 

 

task svidXactor::prepare_ralwr_trans(input svidRALTrans ral_trans);

 

  //phase0: send SETREGADR command

  svid_trans.address=ral_trans.addr[11:8];//VR address

  svid_trans.cmd=5'h05;//SETREGADR;

  svid_trans.payload=ral_trans.addr[7:0];//register address    

   …

 

  ///phase1:send SETREGDAT command

  svid_trans.address=ral_trans.addr[11:8];//VR address

  svid_trans.cmd=5'h06;//SETREGDAT;

  svid_trans.payload=ral_trans.data;//register data

 

endtask

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值