Dear Supporters, In IHI0050G CHI.G spec Chapter B13.9.3, Addr field width of SNP Flit is defined as Req_Addr_Width - 3, Meantime the Req_Addr_Width allowed range defined as 44 to 52. In IHI0098A CHI C2C spec Chapter B4.2.6, Addr field width of SNP message is defined as 48.
So my question is, when Req_addr_width in CHI been defined as 52, then Addr width of SNP will be defined as 49, but there are only 48 valid bit width in C2C SNP message, How is address transfer implemented from Addr in CHI SNP Flit to C2C SNP message?
Best Regards
Hi Lingfan, this would be:
OnChip.SNP.Addr[48:0] = {C2C.Snoop.Addr[47:0], 1'b0}
Hi Ben,
I see, So for scenarios where CHI Addr field less than 49-bit (e.g., 48-bit or 47-bit CHI SNP Addr), remapping behavior would be:
49-bit CHI SNP Addr: OnChip.SNP.Addr[48:0] = {C2C.Snoop.Addr[47:0], 1'b0}
48-bit CHI SNP Addr: OnChip.SNP.Addr[47:0] = C2C.Snoop.Addr[47:0]
47-bit CHI SNP Addr: OnChip.SNP.Addr[46:0] = C2C.Snoop.Addr[46:0]
Is that my understanding correct?
Best Regards.
There may be some misunderstandings in my previous reply.
My current understanding is as follows:
For Req_Addr_Width = 52, SNP Addr width defined as Req_Addr_width – 3 = 49,
So the mapping between CHI <-> C2C would be:
CHI SNP -> C2C Snoop: C2C.Snoop.Addr[47:0] = CHI.SNP.Addr[48:1];
C2C Snoop -> CHI SNP: CHI.SNP.Addr[48:0] = {C2C.Snoop.Addr[47:0],1’b0];
So For Req_Addr_Width = 51, SNP Addr width defined as 51 – 3 = 48,
CHI SNP -> C2C Snoop: C2C.Snoop.Addr[47:0] = {1’b0,CHI.SNP.Addr[47:1]};
C2C Snoop -> CHI SNP: CHI.SNP.Addr[47:0] = {C2C.Snoop.Addr[46:0],1’b0];
Then For Req_Addr_Width = 50, SNP Addr width defined as 50 – 3 = 47,
CHI SNP -> C2C Snoop: C2C.Snoop.Addr[46:0] = {2’b0,CHI.SNP.Addr[46:1]};
C2C Snoop -> CHI SNP: CHI.SNP.Addr[46:0] = {C2C.Snoop.Addr[45:0],1’b0];
Please help me to confirm whether these mapping relationships are correct or not.
I‘m looking forward to your reply.
Hi Lingfan,
Yes, your calculations look correct to me.
Kind regards,
Ben