关于ISE中XPS自定义IP核的语句解释
slv_reg0[(byte_index8) +: 8] <= Bus2IP_Data[(byte_index8) +: 8];
for ( byte_index = 0; byte_index <= (C_SLV_DWIDTH/8)-1; byte_index = byte_index+1 )
if ( Bus2IP_BE[byte_index] == 1 )
slv_reg0[(byte_index*8) +: 8] <= Bus2IP_Data[(byte_index*8) +: 8];
假如数据宽度C_SLV_DWIDTH是32bit,那么把参数用数字代入后,代码是这样的
for ( byte_index = 0; byte_index <= 3; byte_index = byte_index+1 )
if ( Bus2IP_BE[byte_index] == 1 )
slv_reg0[(byte_index*8) +: 8] <= Bus2IP_Data[(byte_index*8) +: 8];
代码实现的功能是将总线上的数据按字节写入到寄存器中。
很好理解,就是字节使能Bus2IP_BE对应为有效,则将对应字节从数据总线传输到相应寄存器上。能看到XPS生成的模板,很巧妙的用到了这样的表达式
slv_reg3[(byte_index8) +: 8] <= Bus2IP_Data[(byte_index8) +: 8];
形式即为
a[startbit+: 8] <= b[startbit +: 8];
8为长度,等效为
a[startbit+7: startbit] <= b[startbit+7: startbit];
例如a[7:0] <= b[7:0];
这种简略写法可以在以后的编程中参考