nios2_uc_nios2_custom_instruction_master_multi_xconnect.sv 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. // (C) 2001-2018 Intel Corporation. All rights reserved.
  2. // Your use of Intel Corporation's design tools, logic functions and other
  3. // software and tools, and its AMPP partner logic functions, and any output
  4. // files from any of the foregoing (including device programming or simulation
  5. // files), and any associated documentation or information are expressly subject
  6. // to the terms and conditions of the Intel Program License Subscription
  7. // Agreement, Intel FPGA IP License Agreement, or other applicable
  8. // license agreement, including, without limitation, that your use is for the
  9. // sole purpose of programming logic devices manufactured by Intel and sold by
  10. // Intel or its authorized distributors. Please refer to the applicable
  11. // agreement for further details.
  12. // $Id: //acds/rel/18.1std/ip/merlin/altera_customins_xconnect/altera_customins_xconnect.sv.terp#1 $
  13. // $Revision: #1 $
  14. // $Date: 2018/07/18 $
  15. // $Author: psgswbuild $
  16. // -------------------------------------------------------
  17. // Custom Instruction Interconnect
  18. //
  19. // -------------------------------------------------------
  20. `timescale 1 ns / 1 ns
  21. module nios2_uc_nios2_custom_instruction_master_multi_xconnect
  22. (
  23. // -------------------
  24. // Custom instruction masters
  25. // -------------------
  26. output [31 : 0] ci_master0_dataa,
  27. output [31 : 0] ci_master0_datab,
  28. input [31 : 0] ci_master0_result,
  29. output [ 7 : 0] ci_master0_n,
  30. output ci_master0_readra,
  31. output ci_master0_readrb,
  32. output ci_master0_writerc,
  33. output [ 4 : 0] ci_master0_a,
  34. output [ 4 : 0] ci_master0_b,
  35. output [ 4 : 0] ci_master0_c,
  36. output [31 : 0] ci_master0_ipending,
  37. output ci_master0_estatus,
  38. output ci_master0_clk,
  39. output ci_master0_clken,
  40. output ci_master0_reset,
  41. output ci_master0_reset_req,
  42. output ci_master0_start,
  43. input ci_master0_done,
  44. // -------------------
  45. // Custom instruction slave
  46. // -------------------
  47. input ci_slave_clk,
  48. input ci_slave_clken,
  49. input ci_slave_reset,
  50. input ci_slave_reset_req,
  51. input ci_slave_start,
  52. output ci_slave_done,
  53. input [31 : 0] ci_slave_dataa,
  54. input [31 : 0] ci_slave_datab,
  55. output [31 : 0] ci_slave_result,
  56. input [ 7 : 0] ci_slave_n,
  57. input ci_slave_readra,
  58. input ci_slave_readrb,
  59. input ci_slave_writerc,
  60. input [ 4 : 0] ci_slave_a,
  61. input [ 4 : 0] ci_slave_b,
  62. input [ 4 : 0] ci_slave_c,
  63. input [31 : 0] ci_slave_ipending,
  64. input ci_slave_estatus
  65. );
  66. wire select0;
  67. // -------------------------------------------------------
  68. // Wire non-control signals through to each master
  69. // -------------------------------------------------------
  70. assign ci_master0_dataa = ci_slave_dataa;
  71. assign ci_master0_datab = ci_slave_datab;
  72. assign ci_master0_n = ci_slave_n;
  73. assign ci_master0_a = ci_slave_a;
  74. assign ci_master0_b = ci_slave_b;
  75. assign ci_master0_c = ci_slave_c;
  76. assign ci_master0_ipending = ci_slave_ipending;
  77. assign ci_master0_estatus = ci_slave_estatus;
  78. assign ci_master0_clk = ci_slave_clk;
  79. assign ci_master0_clken = ci_slave_clken;
  80. assign ci_master0_reset_req = ci_slave_reset_req;
  81. assign ci_master0_reset = ci_slave_reset;
  82. // -------------------------------------------------------
  83. // Figure out which output is selected, and use that to
  84. // gate control signals
  85. // -------------------------------------------------------
  86. assign select0 = ci_slave_n >= 252 && ci_slave_n < 256;
  87. assign ci_master0_readra = (select0 && ci_slave_readra);
  88. assign ci_master0_readrb = (select0 && ci_slave_readrb);
  89. assign ci_master0_writerc = (select0 && ci_slave_writerc);
  90. assign ci_master0_start = (select0 && ci_slave_start);
  91. // -------------------------------------------------------
  92. // Use the select signal to figure out which result to mux
  93. // back
  94. // -------------------------------------------------------
  95. assign ci_slave_result = {32{ select0 }} & ci_master0_result
  96. ;
  97. assign ci_slave_done = select0 & ci_master0_done
  98. ;
  99. endmodule