1. /*
    2. -- ============================================================================
    3. -- FILE NAME : bus.v
    4. -- DESCRIPTION : 总线顶层模块
    5. -- ----------------------------------------------------------------------------
    6. -- Revision Date Coding_by Comment
    7. -- 1.0.0 2011/06/27 suito 新规作成
    8. -- ============================================================================
    9. */
    10. /********** 通用头文件 **********/
    11. `include "nettype.h"
    12. `include "stddef.h"
    13. `include "global_config.h"
    14. /********** 单个头文件 **********/
    15. `include "bus.h"
    16. /********** 模块 **********/
    17. module bus (
    18. /********** 时钟 & 复位 **********/
    19. input wire clk, // 时钟
    20. input wire reset, // 异步复位
    21. /********** 总线主控信号 **********/
    22. // 总线主控共享信号
    23. output wire [`WordDataBus] m_rd_data, // 读出的数据
    24. output wire m_rdy_, // 就绪
    25. // 0号总线主控
    26. input wire m0_req_, // 请求总线
    27. input wire [`WordAddrBus] m0_addr, // 地址
    28. input wire m0_as_, // 地址选通
    29. input wire m0_rw, // 读/写
    30. input wire [`WordDataBus] m0_wr_data, // 写入的数据
    31. output wire m0_grnt_, // 赋予总线
    32. // 1号总线主控
    33. input wire m1_req_, // 请求总线
    34. input wire [`WordAddrBus] m1_addr, // 地址
    35. input wire m1_as_, // 地址选通
    36. input wire m1_rw, // 读/写
    37. input wire [`WordDataBus] m1_wr_data, // 写入的数据
    38. output wire m1_grnt_, // 赋予总线
    39. // 2号总线主控
    40. input wire m2_req_, // 请求总线
    41. input wire [`WordAddrBus] m2_addr, // 地址
    42. input wire m2_as_, // 地址选通
    43. input wire m2_rw, // 读/写
    44. input wire [`WordDataBus] m2_wr_data, // 写入的数据
    45. output wire m2_grnt_, // 赋予总线
    46. // 3号总线主控
    47. input wire m3_req_, // 请求总线
    48. input wire [`WordAddrBus] m3_addr, // 地址
    49. input wire m3_as_, // 地址选通
    50. input wire m3_rw, // 读/写
    51. input wire [`WordDataBus] m3_wr_data, // 写入的数据
    52. output wire m3_grnt_, // 赋予总线
    53. /********** 总线从属信号 **********/
    54. // 总线从属共享信号
    55. output wire [`WordAddrBus] s_addr, // 地址
    56. output wire s_as_, // 地址选通
    57. output wire s_rw, // 读/写
    58. output wire [`WordDataBus] s_wr_data, // 写入的数据
    59. // 0号总线从属
    60. input wire [`WordDataBus] s0_rd_data, // 读出的数据
    61. input wire s0_rdy_, // 就绪
    62. output wire s0_cs_, // 片选
    63. // 1号总线从属
    64. input wire [`WordDataBus] s1_rd_data, // 读出的数据
    65. input wire s1_rdy_, // 就绪
    66. output wire s1_cs_, // 片选
    67. // 2号总线从属
    68. input wire [`WordDataBus] s2_rd_data, // 读出的数据
    69. input wire s2_rdy_, // 就绪
    70. output wire s2_cs_, // 片选
    71. // 3号总线从属
    72. input wire [`WordDataBus] s3_rd_data, // 读出的数据
    73. input wire s3_rdy_, // 就绪
    74. output wire s3_cs_, // 片选
    75. // 4号总线从属
    76. input wire [`WordDataBus] s4_rd_data, // 读出的数据
    77. input wire s4_rdy_, // 就绪
    78. output wire s4_cs_, // 片选
    79. // 5号总线从属
    80. input wire [`WordDataBus] s5_rd_data, // 读出的数据
    81. input wire s5_rdy_, // 就绪
    82. output wire s5_cs_, // 片选
    83. // 6号总线从属
    84. input wire [`WordDataBus] s6_rd_data, // 读出的数据
    85. input wire s6_rdy_, // 就绪
    86. output wire s6_cs_, // 片选
    87. // 7号总线从属
    88. input wire [`WordDataBus] s7_rd_data, // 读出的数据
    89. input wire s7_rdy_, // 就绪
    90. output wire s7_cs_ // 片选
    91. );
    92. /********** 总线仲裁器 **********/
    93. bus_arbiter bus_arbiter (
    94. /********** 时钟 & 复位 **********/
    95. .clk (clk), // 时钟
    96. .reset (reset), // 异步复位
    97. /********** 仲裁信号 **********/
    98. // 0号总线主控
    99. .m0_req_ (m0_req_), // 请求总线
    100. .m0_grnt_ (m0_grnt_), // 赋予总线
    101. // 1号总线主控
    102. .m1_req_ (m1_req_), // 请求总线
    103. .m1_grnt_ (m1_grnt_), // 赋予总线
    104. // 2号总线主控
    105. .m2_req_ (m2_req_), // 请求总线
    106. .m2_grnt_ (m2_grnt_), // 赋予总线
    107. // 3号总线主控
    108. .m3_req_ (m3_req_), // 请求总线
    109. .m3_grnt_ (m3_grnt_) // 赋予总线
    110. );
    111. /********** 总线主控用多路复用器 **********/
    112. bus_master_mux bus_master_mux (
    113. /********** 总线主控信号 **********/
    114. // 0号总线主控
    115. .m0_addr (m0_addr), // 地址
    116. .m0_as_ (m0_as_), // 地址选通
    117. .m0_rw (m0_rw), // 读/写
    118. .m0_wr_data (m0_wr_data), // 写入的数据
    119. .m0_grnt_ (m0_grnt_), // 赋予总线
    120. // 1号总线主控
    121. .m1_addr (m1_addr), // 地址
    122. .m1_as_ (m1_as_), // 地址选通
    123. .m1_rw (m1_rw), // 读/写
    124. .m1_wr_data (m1_wr_data), // 写入的数据
    125. .m1_grnt_ (m1_grnt_), // 赋予总线
    126. // 2号总线主控
    127. .m2_addr (m2_addr), // 地址
    128. .m2_as_ (m2_as_), // 地址选通
    129. .m2_rw (m2_rw), // 读/写
    130. .m2_wr_data (m2_wr_data), // 写入的数据
    131. .m2_grnt_ (m2_grnt_), // 赋予总线
    132. // 3号总线主控
    133. .m3_addr (m3_addr), // 地址
    134. .m3_as_ (m3_as_), // 地址选通
    135. .m3_rw (m3_rw), // 读/写
    136. .m3_wr_data (m3_wr_data), // 写入的数据
    137. .m3_grnt_ (m3_grnt_), // 赋予总线
    138. /********** 总线从属共享信号 **********/
    139. .s_addr (s_addr), // 地址
    140. .s_as_ (s_as_), // 地址选通
    141. .s_rw (s_rw), // 读/写
    142. .s_wr_data (s_wr_data) // 写入的数据
    143. );
    144. /********** 地址解码器 **********/
    145. bus_addr_dec bus_addr_dec (
    146. /********** 地址 **********/
    147. .s_addr (s_addr), // 地址
    148. /********** 片选 **********/
    149. .s0_cs_ (s0_cs_), // 0号总线从属
    150. .s1_cs_ (s1_cs_), // 1号总线从属
    151. .s2_cs_ (s2_cs_), // 2号总线从属
    152. .s3_cs_ (s3_cs_), // 3号总线从属
    153. .s4_cs_ (s4_cs_), // 4号总线从属
    154. .s5_cs_ (s5_cs_), // 5号总线从属
    155. .s6_cs_ (s6_cs_), // 6号总线从属
    156. .s7_cs_ (s7_cs_) // 7号总线从属
    157. );
    158. /********** 总线从属用多路复用器 **********/
    159. bus_slave_mux bus_slave_mux (
    160. /********** 片选 **********/
    161. .s0_cs_ (s0_cs_), // 0号总线从属
    162. .s1_cs_ (s1_cs_), // 1号总线从属
    163. .s2_cs_ (s2_cs_), // 2号总线从属
    164. .s3_cs_ (s3_cs_), // 3号总线从属
    165. .s4_cs_ (s4_cs_), // 4号总线从属
    166. .s5_cs_ (s5_cs_), // 5号总线从属
    167. .s6_cs_ (s6_cs_), // 6号总线从属
    168. .s7_cs_ (s7_cs_), // 7号总线从属
    169. /********** 总线从属信号 **********/
    170. // 0号总线从属
    171. .s0_rd_data (s0_rd_data), // 读出的数据
    172. .s0_rdy_ (s0_rdy_), // 就绪
    173. // 1号总线从属
    174. .s1_rd_data (s1_rd_data), // 读出的数据
    175. .s1_rdy_ (s1_rdy_), // 就绪
    176. // 2号总线从属
    177. .s2_rd_data (s2_rd_data), // 读出的数据
    178. .s2_rdy_ (s2_rdy_), // 就绪
    179. // 3号总线从属
    180. .s3_rd_data (s3_rd_data), // 读出的数据
    181. .s3_rdy_ (s3_rdy_), // 就绪
    182. // 4号总线从属
    183. .s4_rd_data (s4_rd_data), // 读出的数据
    184. .s4_rdy_ (s4_rdy_), // 就绪
    185. // 5号总线从属
    186. .s5_rd_data (s5_rd_data), // 读出的数据
    187. .s5_rdy_ (s5_rdy_), // 就绪
    188. // 6号总线从属
    189. .s6_rd_data (s6_rd_data), // 读出的数据
    190. .s6_rdy_ (s6_rdy_), // 就绪
    191. // 7号总线从属
    192. .s7_rd_data (s7_rd_data), // 读出的数据
    193. .s7_rdy_ (s7_rdy_), // 就绪
    194. /********** 总线主控共享信号 **********/
    195. .m_rd_data (m_rd_data), // 读出的数据
    196. .m_rdy_ (m_rdy_) // 就绪
    197. );
    198. endmodule