Guest User

Untitled

a guest
Jul 21st, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. -module XBus(uid, ioclk, data);
  2.  
  3. input [3:0] uid;
  4. input ioclk;
  5. inout [1:0] data;
  6.  
  7. reg write = 0;
  8. reg [10:0] writeData = 0;
  9.  
  10. reg ready = 0;
  11. reg [10:0] readData = 0;
  12.  
  13. reg _idle = 1;
  14. reg _init = 0;
  15. reg _arbitrate = 0;
  16. reg _write = 0;
  17. reg _read = 0;
  18.  
  19. reg [0:3] _step = 0;
  20. reg _arbFail = 0;
  21. reg _arbData = 0;
  22.  
  23. assign data[0] = (
  24. _init |
  25. (_arbitrate & uid[3 - (_step & 3)]) |
  26. (_write & writeData[10 - _step])
  27. ) ? 1'b1 : 1'bz;
  28.  
  29. assign data[1] = (
  30. _init | _read | ready
  31. ) ? 1'b1 : 1'bz;
  32.  
  33. always @(posedge ioclk) begin
  34. if (_read) begin
  35. readData = (readData << 1) | data[0];
  36. if (_step == 14) begin
  37. ready = 1;
  38. _read = 0;
  39. _idle = 1;
  40. end else _step = _step + 1;
  41. end else if (_write) begin
  42. if (_step == 10) begin
  43. _write = 0;
  44. _idle = 1;
  45. write = 0;
  46. end else _step = _step + 1;
  47. end else if (_arbitrate) begin
  48. if (_step == 3) begin
  49. _arbitrate = 0;
  50. if (_arbFail) begin
  51. _arbFail = 0;
  52. _step = 4;
  53. _read = 1;
  54. end else begin
  55. _step = 0;
  56. _write = 1;
  57. end
  58. end else begin
  59. if (data[0] ^ uid[3 - (_step & 3)]) _arbFail = 1;
  60. _step = _step + 1;
  61. end
  62. end else if (_init) begin
  63. _init = 0;
  64. _arbitrate = 1;
  65. end else if (_idle) begin
  66. if (write & ~data[1]) begin
  67. _idle = 0;
  68. _init = 1;
  69. _step = 0;
  70. end else if (data[0]) begin
  71. _idle = 0;
  72. _read = 1;
  73. _step = 0;
  74. end
  75. end
  76. end
  77.  
  78. endmodule
Add Comment
Please, Sign In to add comment