AnsweredAssumed Answered

AD9144 PRBS parallel functions?

Question asked by aismekalov on Jun 29, 2015
Latest reply on Jul 1, 2015 by rejeesh

Hello!

 

Could you explain how did you get the verilog functions of PRBS parallel generation for JESD204 DAC AD9144: pn7, pn23, pn31 from polymials:

x^7 + x^6 + 1

x^23 + x^18 + 1

x^31 + x^28 + 1

 

For example, how did you get this function from polymial x^7+x^6+1 for 64-bit data?

// pn7 function

function [63:0] pn7;

  input [63:0] din;

  reg [63:0] dout;

  begin

  dout[63] = din[ 7] ^ din[ 6];

  dout[62] = din[ 6] ^ din[ 5];

  dout[61] = din[ 5] ^ din[ 4];

  dout[60] = din[ 4] ^ din[ 3];

  dout[59] = din[ 3] ^ din[ 2];

  dout[58] = din[ 2] ^ din[ 1];

  dout[57] = din[ 1] ^ din[ 0];

  dout[56] = din[ 0] ^ din[ 7] ^ din[ 6];

  dout[55] = din[ 7] ^ din[ 5];

  dout[54] = din[ 6] ^ din[ 4];

  dout[53] = din[ 5] ^ din[ 3];

  dout[52] = din[ 4] ^ din[ 2];

  dout[51] = din[ 3] ^ din[ 1];

  dout[50] = din[ 2] ^ din[ 0];

  dout[49] = din[ 1] ^ din[ 7] ^ din[ 6];

  dout[48] = din[ 0] ^ din[ 6] ^ din[ 5];

  dout[47] = din[ 7] ^ din[ 5] ^ din[ 6] ^ din[ 4];

  dout[46] = din[ 6] ^ din[ 4] ^ din[ 5] ^ din[ 3];

  dout[45] = din[ 5] ^ din[ 3] ^ din[ 4] ^ din[ 2];

  dout[44] = din[ 4] ^ din[ 2] ^ din[ 3] ^ din[ 1];

  dout[43] = din[ 3] ^ din[ 1] ^ din[ 2] ^ din[ 0];

  dout[42] = din[ 2] ^ din[ 0] ^ din[ 1] ^ din[ 7] ^ din[ 6];

  dout[41] = din[ 1] ^ din[ 7] ^ din[ 0] ^ din[ 5];

  dout[40] = din[ 0] ^ din[ 7] ^ din[ 4];

  dout[39] = din[ 7] ^ din[ 3];

  dout[38] = din[ 6] ^ din[ 2];

  dout[37] = din[ 5] ^ din[ 1];

  dout[36] = din[ 4] ^ din[ 0];

  dout[35] = din[ 3] ^ din[ 7] ^ din[ 6];

  dout[34] = din[ 2] ^ din[ 6] ^ din[ 5];

  dout[33] = din[ 1] ^ din[ 5] ^ din[ 4];

  dout[32] = din[ 0] ^ din[ 4] ^ din[ 3];

  dout[31] = din[ 7] ^ din[ 3] ^ din[ 6] ^ din[ 2];

  dout[30] = din[ 6] ^ din[ 2] ^ din[ 5] ^ din[ 1];

  dout[29] = din[ 5] ^ din[ 1] ^ din[ 4] ^ din[ 0];

  dout[28] = din[ 4] ^ din[ 0] ^ din[ 3] ^ din[ 7] ^ din[ 6];

  dout[27] = din[ 3] ^ din[ 7] ^ din[ 2] ^ din[ 5];

  dout[26] = din[ 2] ^ din[ 6] ^ din[ 1] ^ din[ 4];

  dout[25] = din[ 1] ^ din[ 5] ^ din[ 0] ^ din[ 3];

  dout[24] = din[ 0] ^ din[ 4] ^ din[ 7] ^ din[ 6] ^ din[ 2];

  dout[23] = din[ 7] ^ din[ 3] ^ din[ 5] ^ din[ 1];

  dout[22] = din[ 6] ^ din[ 2] ^ din[ 4] ^ din[ 0];

  dout[21] = din[ 5] ^ din[ 1] ^ din[ 3] ^ din[ 7] ^ din[ 6];

  dout[20] = din[ 4] ^ din[ 0] ^ din[ 6] ^ din[ 2] ^ din[ 5];

  dout[19] = din[ 3] ^ din[ 7] ^ din[ 5] ^ din[ 6] ^ din[ 1] ^ din[ 4];

  dout[18] = din[ 2] ^ din[ 6] ^ din[ 4] ^ din[ 5] ^ din[ 0] ^ din[ 3];

  dout[17] = din[ 1] ^ din[ 5] ^ din[ 3] ^ din[ 4] ^ din[ 7] ^ din[ 6] ^ din[ 2];

  dout[16] = din[ 0] ^ din[ 4] ^ din[ 6] ^ din[ 2] ^ din[ 3] ^ din[ 5] ^ din[ 1];

  dout[15] = din[ 7] ^ din[ 3] ^ din[ 5] ^ din[ 1] ^ din[ 6] ^ din[ 2] ^ din[ 4] ^ din[ 0];

  dout[14] = din[ 2] ^ din[ 4] ^ din[ 0] ^ din[ 5] ^ din[ 1] ^ din[ 3] ^ din[ 7];

  dout[13] = din[ 1] ^ din[ 3] ^ din[ 7] ^ din[ 4] ^ din[ 0] ^ din[ 2];

  dout[12] = din[ 0] ^ din[ 2] ^ din[ 3] ^ din[ 7] ^ din[ 1];

  dout[11] = din[ 7] ^ din[ 1] ^ din[ 2] ^ din[ 0];

  dout[10] = din[ 0] ^ din[ 1] ^ din[ 7];

  dout[ 9] = din[ 7] ^ din[ 0];

  dout[ 8] = din[ 7];

  dout[ 7] = din[ 6];

  dout[ 6] = din[ 5];

  dout[ 5] = din[ 4];

  dout[ 4] = din[ 3];

  dout[ 3] = din[ 2];

  dout[ 2] = din[ 1];

  dout[ 1] = din[ 0];

  dout[ 0] = din[ 7] ^ din[ 6];

  pn7 = dout;

  end

endfunction

 

These verilog functions are in file:

hdl/axi_ad9144_channel.v at master · analogdevicesinc/hdl · GitHub

 

Thank you!

Outcomes