Advertisement
latifakcay

Untitled

Oct 28th, 2015
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 51.63 KB | None | 0 0
  1. //////////////////////////////////////////////////////////////////////
  2. /// ////
  3. /// ORPSoC top for Atlys board ////
  4. /// ////
  5. /// Instantiates modules, depending on ORPSoC defines file ////
  6. /// ////
  7. /// Julius Baxter, julius@opencores.org ////
  8. /// Contributor(s): ////
  9. /// Stefan Kristiansson, stefan.kristiansson@saunalahti.fi ////
  10. //////////////////////////////////////////////////////////////////////
  11. //// ////
  12. //// Copyright (C) 2009, 2010 Authors and OPENCORES.ORG ////
  13. //// ////
  14. //// This source file may be used and distributed without ////
  15. //// restriction provided that this copyright statement is not ////
  16. //// removed from the file and that any derivative work contains ////
  17. //// the original copyright notice and the associated disclaimer. ////
  18. //// ////
  19. //// This source file is free software; you can redistribute it ////
  20. //// and/or modify it under the terms of the GNU Lesser General ////
  21. //// Public License as published by the Free Software Foundation; ////
  22. //// either version 2.1 of the License, or (at your option) any ////
  23. //// later version. ////
  24. //// ////
  25. //// This source is distributed in the hope that it will be ////
  26. //// useful, but WITHOUT ANY WARRANTY; without even the implied ////
  27. //// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
  28. //// PURPOSE. See the GNU Lesser General Public License for more ////
  29. //// details. ////
  30. //// ////
  31. //// You should have received a copy of the GNU Lesser General ////
  32. //// Public License along with this source; if not, download it ////
  33. //// from http://www.opencores.org/lgpl.shtml ////
  34. //// ////
  35. //////////////////////////////////////////////////////////////////////
  36.  
  37. `include "orpsoc-defines.v"
  38. `include "synthesis-defines.v"
  39. module orpsoc_top
  40. (
  41. `define MOR1KX
  42. `ifdef JTAG_DEBUG
  43. tdo_pad_o, tms_pad_i, tck_pad_i, tdi_pad_i,
  44. `endif
  45. `ifdef XILINX_DDR2
  46. ddr2_a, ddr2_ba, ddr2_ras_n, ddr2_cas_n, ddr2_we_n,
  47. ddr2_rzq, ddr2_zio, ddr2_odt, ddr2_cke, ddr2_dm, ddr2_udm,
  48. ddr2_dq, ddr2_dqs, ddr2_dqs_n, ddr2_udqs, ddr2_udqs_n,
  49. ddr2_ck, ddr2_ck_n,
  50. `endif
  51. `ifdef XILINX_SSRAM
  52. sram_clk, sram_clk_fb, sram_flash_addr, sram_flash_data,
  53. sram_cen, sram_flash_oe_n, sram_flash_we_n, sram_bw,
  54. sram_adv_ld_n, sram_mode,
  55. `endif
  56. `ifdef UART0
  57. uart0_srx_pad_i, uart0_stx_pad_o,
  58. `ifdef UART0_EXPHEADER
  59. uart0_srx_expheader_pad_i, uart0_stx_expheader_pad_o,
  60. `endif
  61. `endif
  62. `ifdef SPI0
  63. spi0_mosi_o, spi0_ss_o, spi0_sck_o, spi0_miso_i,
  64. `endif
  65. `ifdef I2C0
  66. i2c0_sda_io, i2c0_scl_io,
  67. `endif
  68. `ifdef I2C1
  69. i2c1_sda_io, i2c1_scl_io,
  70. `endif
  71. `ifdef GPIO0
  72. gpio0_io,
  73. `endif
  74.  
  75. `ifdef ETH0
  76. eth0_tx_clk, eth0_tx_data, eth0_tx_en, eth0_tx_er,
  77. eth0_rx_clk, eth0_rx_data, eth0_dv, eth0_rx_er,
  78. eth0_col, eth0_crs,
  79. eth0_mdc_pad_o, eth0_md_pad_io,
  80. `ifdef ETH0_PHY_RST
  81. eth0_rst_n_o,
  82. `endif
  83. `endif
  84.  
  85. sys_clk_in,
  86.  
  87. rst_n_pad_i
  88.  
  89. );
  90.  
  91. `include "orpsoc-params.v"
  92.  
  93. input sys_clk_in;
  94.  
  95. input rst_n_pad_i;
  96.  
  97. `ifdef JTAG_DEBUG
  98. output tdo_pad_o;
  99. input tms_pad_i;
  100. input tck_pad_i;
  101. input tdi_pad_i;
  102. `endif
  103. `ifdef XILINX_DDR2
  104. output [12:0] ddr2_a;
  105. output [2:0] ddr2_ba;
  106. output ddr2_ras_n;
  107. output ddr2_cas_n;
  108. output ddr2_we_n;
  109. output ddr2_rzq;
  110. output ddr2_zio;
  111. output ddr2_odt;
  112. output ddr2_cke;
  113. output ddr2_dm;
  114. output ddr2_udm;
  115.  
  116. inout [15:0] ddr2_dq;
  117. inout ddr2_dqs;
  118. inout ddr2_dqs_n;
  119. inout ddr2_udqs;
  120. inout ddr2_udqs_n;
  121. output ddr2_ck;
  122. output ddr2_ck_n;
  123. `endif
  124. `ifdef UART0
  125. input uart0_srx_pad_i;
  126. output uart0_stx_pad_o;
  127. // Duplicates of the UART signals, this time to the USB debug cable
  128. `ifdef UART0_EXPHEADER
  129. input uart0_srx_expheader_pad_i;
  130. output uart0_stx_expheader_pad_o;
  131. `endif
  132. `endif
  133. `ifdef SPI0
  134. output spi0_mosi_o;
  135. output [spi0_ss_width-1:0] spi0_ss_o;
  136. output spi0_sck_o;
  137. input spi0_miso_i;
  138.  
  139. `endif
  140. `ifdef I2C0
  141. inout i2c0_sda_io, i2c0_scl_io;
  142. `endif
  143. `ifdef I2C1
  144. inout i2c1_sda_io, i2c1_scl_io;
  145. `endif
  146. `ifdef GPIO0
  147. inout [gpio0_io_width-1:0] gpio0_io;
  148. `endif
  149. `ifdef ETH0
  150. input eth0_tx_clk;
  151. output [3:0] eth0_tx_data;
  152. output eth0_tx_en;
  153. output eth0_tx_er;
  154. input eth0_rx_clk;
  155. input [3:0] eth0_rx_data;
  156. input eth0_dv;
  157. input eth0_rx_er;
  158. input eth0_col;
  159. input eth0_crs;
  160. output eth0_mdc_pad_o;
  161. inout eth0_md_pad_io;
  162. `ifdef ETH0_PHY_RST
  163. output eth0_rst_n_o;
  164. `endif
  165. `endif // `ifdef ETH0
  166.  
  167. ////////////////////////////////////////////////////////////////////////
  168. //
  169. // Clock and reset generation module
  170. //
  171. ////////////////////////////////////////////////////////////////////////
  172.  
  173. //
  174. // Wires
  175. //
  176. wire wb_clk, wb_rst;
  177. wire ddr2_if_clk, ddr2_if_rst;
  178. wire clk100;
  179. wire dbg_tck;
  180.  
  181. clkgen clkgen0
  182. (
  183. .sys_clk_in (sys_clk_in),
  184.  
  185. .wb_clk_o (wb_clk),
  186. .wb_rst_o (wb_rst),
  187.  
  188. `ifdef JTAG_DEBUG
  189. .tck_pad_i (tck_pad_i),
  190. .dbg_tck_o (dbg_tck),
  191. `endif
  192. `ifdef XILINX_DDR2
  193. .ddr2_if_clk_o (ddr2_if_clk),
  194. .ddr2_if_rst_o (ddr2_if_rst),
  195. .clk100_o (clk100),
  196. `endif
  197.  
  198. // Asynchronous active low reset
  199. .rst_n_pad_i (rst_n_pad_i)
  200. );
  201.  
  202.  
  203. ////////////////////////////////////////////////////////////////////////
  204. //
  205. // Arbiter
  206. //
  207. ////////////////////////////////////////////////////////////////////////
  208.  
  209. // Wire naming convention:
  210. // First: wishbone master or slave (wbm/wbs)
  211. // Second: Which bus it's on instruction or data (i/d)
  212. // Third: Between which module and the arbiter the wires are
  213. // Fourth: Signal name
  214. // Fifth: Direction relative to module (not bus/arbiter!)
  215. // ie. wbm_d_or12_adr_o is address OUT from the or1200
  216.  
  217. // OR1200 instruction bus wires
  218. wire [wb_aw-1:0] wbm_i_or12_adr_o;
  219. wire [wb_dw-1:0] wbm_i_or12_dat_o;
  220. wire [3:0] wbm_i_or12_sel_o;
  221. wire wbm_i_or12_we_o;
  222. wire wbm_i_or12_cyc_o;
  223. wire wbm_i_or12_stb_o;
  224. wire [2:0] wbm_i_or12_cti_o;
  225. wire [1:0] wbm_i_or12_bte_o;
  226.  
  227. wire [wb_dw-1:0] wbm_i_or12_dat_i;
  228. wire wbm_i_or12_ack_i;
  229. wire wbm_i_or12_err_i;
  230. wire wbm_i_or12_rty_i;
  231.  
  232. // OR1200 data bus wires
  233. wire [wb_aw-1:0] wbm_d_or12_adr_o;
  234. wire [wb_dw-1:0] wbm_d_or12_dat_o;
  235. wire [3:0] wbm_d_or12_sel_o;
  236. wire wbm_d_or12_we_o;
  237. wire wbm_d_or12_cyc_o;
  238. wire wbm_d_or12_stb_o;
  239. wire [2:0] wbm_d_or12_cti_o;
  240. wire [1:0] wbm_d_or12_bte_o;
  241.  
  242. wire [wb_dw-1:0] wbm_d_or12_dat_i;
  243. wire wbm_d_or12_ack_i;
  244. wire wbm_d_or12_err_i;
  245. wire wbm_d_or12_rty_i;
  246.  
  247. // Debug interface bus wires
  248. wire [wb_aw-1:0] wbm_d_dbg_adr_o;
  249. wire [wb_dw-1:0] wbm_d_dbg_dat_o;
  250. wire [3:0] wbm_d_dbg_sel_o;
  251. wire wbm_d_dbg_we_o;
  252. wire wbm_d_dbg_cyc_o;
  253. wire wbm_d_dbg_stb_o;
  254. wire [2:0] wbm_d_dbg_cti_o;
  255. wire [1:0] wbm_d_dbg_bte_o;
  256.  
  257. wire [wb_dw-1:0] wbm_d_dbg_dat_i;
  258. wire wbm_d_dbg_ack_i;
  259. wire wbm_d_dbg_err_i;
  260. wire wbm_d_dbg_rty_i;
  261.  
  262. // Byte bus bridge master signals
  263. wire [wb_aw-1:0] wbm_b_d_adr_o;
  264. wire [wb_dw-1:0] wbm_b_d_dat_o;
  265. wire [3:0] wbm_b_d_sel_o;
  266. wire wbm_b_d_we_o;
  267. wire wbm_b_d_cyc_o;
  268. wire wbm_b_d_stb_o;
  269. wire [2:0] wbm_b_d_cti_o;
  270. wire [1:0] wbm_b_d_bte_o;
  271.  
  272. wire [wb_dw-1:0] wbm_b_d_dat_i;
  273. wire wbm_b_d_ack_i;
  274. wire wbm_b_d_err_i;
  275. wire wbm_b_d_rty_i;
  276.  
  277. // Instruction bus slave wires //
  278.  
  279. // rom0 instruction bus wires
  280. wire [31:0] wbs_i_rom0_adr_i;
  281. wire [wbs_i_rom0_data_width-1:0] wbs_i_rom0_dat_i;
  282. wire [3:0] wbs_i_rom0_sel_i;
  283. wire wbs_i_rom0_we_i;
  284. wire wbs_i_rom0_cyc_i;
  285. wire wbs_i_rom0_stb_i;
  286. wire [2:0] wbs_i_rom0_cti_i;
  287. wire [1:0] wbs_i_rom0_bte_i;
  288. wire [wbs_i_rom0_data_width-1:0] wbs_i_rom0_dat_o;
  289. wire wbs_i_rom0_ack_o;
  290. wire wbs_i_rom0_err_o;
  291. wire wbs_i_rom0_rty_o;
  292.  
  293. // mc0 instruction bus wires
  294. wire [31:0] wbs_i_mc0_adr_i;
  295. wire [wbs_i_mc0_data_width-1:0] wbs_i_mc0_dat_i;
  296. wire [3:0] wbs_i_mc0_sel_i;
  297. wire wbs_i_mc0_we_i;
  298. wire wbs_i_mc0_cyc_i;
  299. wire wbs_i_mc0_stb_i;
  300. wire [2:0] wbs_i_mc0_cti_i;
  301. wire [1:0] wbs_i_mc0_bte_i;
  302. wire [wbs_i_mc0_data_width-1:0] wbs_i_mc0_dat_o;
  303. wire wbs_i_mc0_ack_o;
  304. wire wbs_i_mc0_err_o;
  305. wire wbs_i_mc0_rty_o;
  306.  
  307. // Data bus slave wires //
  308.  
  309. // mc0 data bus wires
  310. wire [31:0] wbs_d_mc0_adr_i;
  311. wire [wbs_d_mc0_data_width-1:0] wbs_d_mc0_dat_i;
  312. wire [3:0] wbs_d_mc0_sel_i;
  313. wire wbs_d_mc0_we_i;
  314. wire wbs_d_mc0_cyc_i;
  315. wire wbs_d_mc0_stb_i;
  316. wire [2:0] wbs_d_mc0_cti_i;
  317. wire [1:0] wbs_d_mc0_bte_i;
  318. wire [wbs_d_mc0_data_width-1:0] wbs_d_mc0_dat_o;
  319. wire wbs_d_mc0_ack_o;
  320. wire wbs_d_mc0_err_o;
  321. wire wbs_d_mc0_rty_o;
  322.  
  323. // i2c0 wires
  324. wire [31:0] wbs_d_i2c0_adr_i;
  325. wire [wbs_d_i2c0_data_width-1:0] wbs_d_i2c0_dat_i;
  326. wire [3:0] wbs_d_i2c0_sel_i;
  327. wire wbs_d_i2c0_we_i;
  328. wire wbs_d_i2c0_cyc_i;
  329. wire wbs_d_i2c0_stb_i;
  330. wire [2:0] wbs_d_i2c0_cti_i;
  331. wire [1:0] wbs_d_i2c0_bte_i;
  332. wire [wbs_d_i2c0_data_width-1:0] wbs_d_i2c0_dat_o;
  333. wire wbs_d_i2c0_ack_o;
  334. wire wbs_d_i2c0_err_o;
  335. wire wbs_d_i2c0_rty_o;
  336.  
  337. // i2c1 wires
  338. wire [31:0] wbs_d_i2c1_adr_i;
  339. wire [wbs_d_i2c1_data_width-1:0] wbs_d_i2c1_dat_i;
  340. wire [3:0] wbs_d_i2c1_sel_i;
  341. wire wbs_d_i2c1_we_i;
  342. wire wbs_d_i2c1_cyc_i;
  343. wire wbs_d_i2c1_stb_i;
  344. wire [2:0] wbs_d_i2c1_cti_i;
  345. wire [1:0] wbs_d_i2c1_bte_i;
  346. wire [wbs_d_i2c1_data_width-1:0] wbs_d_i2c1_dat_o;
  347. wire wbs_d_i2c1_ack_o;
  348. wire wbs_d_i2c1_err_o;
  349. wire wbs_d_i2c1_rty_o;
  350.  
  351. // spi0 wires
  352. wire [31:0] wbs_d_spi0_adr_i;
  353. wire [wbs_d_spi0_data_width-1:0] wbs_d_spi0_dat_i;
  354. wire [3:0] wbs_d_spi0_sel_i;
  355. wire wbs_d_spi0_we_i;
  356. wire wbs_d_spi0_cyc_i;
  357. wire wbs_d_spi0_stb_i;
  358. wire [2:0] wbs_d_spi0_cti_i;
  359. wire [1:0] wbs_d_spi0_bte_i;
  360. wire [wbs_d_spi0_data_width-1:0] wbs_d_spi0_dat_o;
  361. wire wbs_d_spi0_ack_o;
  362. wire wbs_d_spi0_err_o;
  363. wire wbs_d_spi0_rty_o;
  364.  
  365. // uart0 wires
  366. wire [31:0] wbs_d_uart0_adr_i;
  367. wire [wbs_d_uart0_data_width-1:0] wbs_d_uart0_dat_i;
  368. wire [3:0] wbs_d_uart0_sel_i;
  369. wire wbs_d_uart0_we_i;
  370. wire wbs_d_uart0_cyc_i;
  371. wire wbs_d_uart0_stb_i;
  372. wire [2:0] wbs_d_uart0_cti_i;
  373. wire [1:0] wbs_d_uart0_bte_i;
  374. wire [wbs_d_uart0_data_width-1:0] wbs_d_uart0_dat_o;
  375. wire wbs_d_uart0_ack_o;
  376. wire wbs_d_uart0_err_o;
  377. wire wbs_d_uart0_rty_o;
  378.  
  379. // gpio0 wires
  380. wire [31:0] wbs_d_gpio0_adr_i;
  381. wire [wbs_d_gpio0_data_width-1:0] wbs_d_gpio0_dat_i;
  382. wire [3:0] wbs_d_gpio0_sel_i;
  383. wire wbs_d_gpio0_we_i;
  384. wire wbs_d_gpio0_cyc_i;
  385. wire wbs_d_gpio0_stb_i;
  386. wire [2:0] wbs_d_gpio0_cti_i;
  387. wire [1:0] wbs_d_gpio0_bte_i;
  388. wire [wbs_d_gpio0_data_width-1:0] wbs_d_gpio0_dat_o;
  389. wire wbs_d_gpio0_ack_o;
  390. wire wbs_d_gpio0_err_o;
  391. wire wbs_d_gpio0_rty_o;
  392.  
  393. // eth0 slave wires
  394. wire [31:0] wbs_d_eth0_adr_i;
  395. wire [wbs_d_eth0_data_width-1:0] wbs_d_eth0_dat_i;
  396. wire [3:0] wbs_d_eth0_sel_i;
  397. wire wbs_d_eth0_we_i;
  398. wire wbs_d_eth0_cyc_i;
  399. wire wbs_d_eth0_stb_i;
  400. wire [2:0] wbs_d_eth0_cti_i;
  401. wire [1:0] wbs_d_eth0_bte_i;
  402. wire [wbs_d_eth0_data_width-1:0] wbs_d_eth0_dat_o;
  403. wire wbs_d_eth0_ack_o;
  404. wire wbs_d_eth0_err_o;
  405. wire wbs_d_eth0_rty_o;
  406.  
  407. // eth0 master wires
  408. wire [wbm_eth0_addr_width-1:0] wbm_eth0_adr_o;
  409. wire [wbm_eth0_data_width-1:0] wbm_eth0_dat_o;
  410. wire [3:0] wbm_eth0_sel_o;
  411. wire wbm_eth0_we_o;
  412. wire wbm_eth0_cyc_o;
  413. wire wbm_eth0_stb_o;
  414. wire [2:0] wbm_eth0_cti_o;
  415. wire [1:0] wbm_eth0_bte_o;
  416. wire [wbm_eth0_data_width-1:0] wbm_eth0_dat_i;
  417. wire wbm_eth0_ack_i;
  418. wire wbm_eth0_err_i;
  419. wire wbm_eth0_rty_i;
  420.  
  421.  
  422.  
  423. //
  424. // Wishbone instruction bus arbiter
  425. //
  426.  
  427. arbiter_ibus arbiter_ibus0
  428. (
  429. // Instruction Bus Master
  430. // Inputs to arbiter from master
  431. .wbm_adr_o (wbm_i_or12_adr_o),
  432. .wbm_dat_o (wbm_i_or12_dat_o),
  433. .wbm_sel_o (wbm_i_or12_sel_o),
  434. .wbm_we_o (wbm_i_or12_we_o),
  435. .wbm_cyc_o (wbm_i_or12_cyc_o),
  436. .wbm_stb_o (wbm_i_or12_stb_o),
  437. .wbm_cti_o (wbm_i_or12_cti_o),
  438. .wbm_bte_o (wbm_i_or12_bte_o),
  439. // Outputs to master from arbiter
  440. .wbm_dat_i (wbm_i_or12_dat_i),
  441. .wbm_ack_i (wbm_i_or12_ack_i),
  442. .wbm_err_i (wbm_i_or12_err_i),
  443. .wbm_rty_i (wbm_i_or12_rty_i),
  444.  
  445. // Slave 0
  446. // Inputs to slave from arbiter
  447. .wbs0_adr_i (wbs_i_rom0_adr_i),
  448. .wbs0_dat_i (wbs_i_rom0_dat_i),
  449. .wbs0_sel_i (wbs_i_rom0_sel_i),
  450. .wbs0_we_i (wbs_i_rom0_we_i),
  451. .wbs0_cyc_i (wbs_i_rom0_cyc_i),
  452. .wbs0_stb_i (wbs_i_rom0_stb_i),
  453. .wbs0_cti_i (wbs_i_rom0_cti_i),
  454. .wbs0_bte_i (wbs_i_rom0_bte_i),
  455. // Outputs from slave to arbiter
  456. .wbs0_dat_o (wbs_i_rom0_dat_o),
  457. .wbs0_ack_o (wbs_i_rom0_ack_o),
  458. .wbs0_err_o (wbs_i_rom0_err_o),
  459. .wbs0_rty_o (wbs_i_rom0_rty_o),
  460.  
  461. // Slave 1
  462. // Inputs to slave from arbiter
  463. .wbs1_adr_i (wbs_i_mc0_adr_i),
  464. .wbs1_dat_i (wbs_i_mc0_dat_i),
  465. .wbs1_sel_i (wbs_i_mc0_sel_i),
  466. .wbs1_we_i (wbs_i_mc0_we_i),
  467. .wbs1_cyc_i (wbs_i_mc0_cyc_i),
  468. .wbs1_stb_i (wbs_i_mc0_stb_i),
  469. .wbs1_cti_i (wbs_i_mc0_cti_i),
  470. .wbs1_bte_i (wbs_i_mc0_bte_i),
  471. // Outputs from slave to arbiter
  472. .wbs1_dat_o (wbs_i_mc0_dat_o),
  473. .wbs1_ack_o (wbs_i_mc0_ack_o),
  474. .wbs1_err_o (wbs_i_mc0_err_o),
  475. .wbs1_rty_o (wbs_i_mc0_rty_o),
  476.  
  477. // Clock, reset inputs
  478. .wb_clk (wb_clk),
  479. .wb_rst (wb_rst));
  480.  
  481. defparam arbiter_ibus0.wb_addr_match_width = ibus_arb_addr_match_width;
  482.  
  483. defparam arbiter_ibus0.slave0_adr = ibus_arb_slave0_adr; // FLASH ROM
  484. defparam arbiter_ibus0.slave1_adr = ibus_arb_slave1_adr; // Main memory
  485.  
  486. //
  487. // Wishbone data bus arbiter
  488. //
  489.  
  490. arbiter_dbus arbiter_dbus0
  491. (
  492. // Master 0
  493. // Inputs to arbiter from master
  494. .wbm0_adr_o (wbm_d_or12_adr_o),
  495. .wbm0_dat_o (wbm_d_or12_dat_o),
  496. .wbm0_sel_o (wbm_d_or12_sel_o),
  497. .wbm0_we_o (wbm_d_or12_we_o),
  498. .wbm0_cyc_o (wbm_d_or12_cyc_o),
  499. .wbm0_stb_o (wbm_d_or12_stb_o),
  500. .wbm0_cti_o (wbm_d_or12_cti_o),
  501. .wbm0_bte_o (wbm_d_or12_bte_o),
  502. // Outputs to master from arbiter
  503. .wbm0_dat_i (wbm_d_or12_dat_i),
  504. .wbm0_ack_i (wbm_d_or12_ack_i),
  505. .wbm0_err_i (wbm_d_or12_err_i),
  506. .wbm0_rty_i (wbm_d_or12_rty_i),
  507.  
  508. // Master 0
  509. // Inputs to arbiter from master
  510. .wbm1_adr_o (wbm_d_dbg_adr_o),
  511. .wbm1_dat_o (wbm_d_dbg_dat_o),
  512. .wbm1_we_o (wbm_d_dbg_we_o),
  513. .wbm1_cyc_o (wbm_d_dbg_cyc_o),
  514. .wbm1_sel_o (wbm_d_dbg_sel_o),
  515. .wbm1_stb_o (wbm_d_dbg_stb_o),
  516. .wbm1_cti_o (wbm_d_dbg_cti_o),
  517. .wbm1_bte_o (wbm_d_dbg_bte_o),
  518. // Outputs to master from arbiter
  519. .wbm1_dat_i (wbm_d_dbg_dat_i),
  520. .wbm1_ack_i (wbm_d_dbg_ack_i),
  521. .wbm1_err_i (wbm_d_dbg_err_i),
  522. .wbm1_rty_i (wbm_d_dbg_rty_i),
  523.  
  524. // Slaves
  525.  
  526. .wbs0_adr_i (wbs_d_mc0_adr_i),
  527. .wbs0_dat_i (wbs_d_mc0_dat_i),
  528. .wbs0_sel_i (wbs_d_mc0_sel_i),
  529. .wbs0_we_i (wbs_d_mc0_we_i),
  530. .wbs0_cyc_i (wbs_d_mc0_cyc_i),
  531. .wbs0_stb_i (wbs_d_mc0_stb_i),
  532. .wbs0_cti_i (wbs_d_mc0_cti_i),
  533. .wbs0_bte_i (wbs_d_mc0_bte_i),
  534. .wbs0_dat_o (wbs_d_mc0_dat_o),
  535. .wbs0_ack_o (wbs_d_mc0_ack_o),
  536. .wbs0_err_o (wbs_d_mc0_err_o),
  537. .wbs0_rty_o (wbs_d_mc0_rty_o),
  538.  
  539. .wbs1_adr_i (wbs_d_eth0_adr_i),
  540. .wbs1_dat_i (wbs_d_eth0_dat_i),
  541. .wbs1_sel_i (wbs_d_eth0_sel_i),
  542. .wbs1_we_i (wbs_d_eth0_we_i),
  543. .wbs1_cyc_i (wbs_d_eth0_cyc_i),
  544. .wbs1_stb_i (wbs_d_eth0_stb_i),
  545. .wbs1_cti_i (wbs_d_eth0_cti_i),
  546. .wbs1_bte_i (wbs_d_eth0_bte_i),
  547. .wbs1_dat_o (wbs_d_eth0_dat_o),
  548. .wbs1_ack_o (wbs_d_eth0_ack_o),
  549. .wbs1_err_o (wbs_d_eth0_err_o),
  550. .wbs1_rty_o (wbs_d_eth0_rty_o),
  551.  
  552. .wbs2_adr_i (wbm_b_d_adr_o),
  553. .wbs2_dat_i (wbm_b_d_dat_o),
  554. .wbs2_sel_i (wbm_b_d_sel_o),
  555. .wbs2_we_i (wbm_b_d_we_o),
  556. .wbs2_cyc_i (wbm_b_d_cyc_o),
  557. .wbs2_stb_i (wbm_b_d_stb_o),
  558. .wbs2_cti_i (wbm_b_d_cti_o),
  559. .wbs2_bte_i (wbm_b_d_bte_o),
  560. .wbs2_dat_o (wbm_b_d_dat_i),
  561. .wbs2_ack_o (wbm_b_d_ack_i),
  562. .wbs2_err_o (wbm_b_d_err_i),
  563. .wbs2_rty_o (wbm_b_d_rty_i),
  564.  
  565. // Clock, reset inputs
  566. .wb_clk (wb_clk),
  567. .wb_rst (wb_rst));
  568.  
  569. // These settings are from top level params file
  570. defparam arbiter_dbus0.wb_addr_match_width = dbus_arb_wb_addr_match_width;
  571. defparam arbiter_dbus0.wb_num_slaves = dbus_arb_wb_num_slaves;
  572. defparam arbiter_dbus0.slave0_adr = dbus_arb_slave0_adr;
  573. defparam arbiter_dbus0.slave1_adr = dbus_arb_slave1_adr;
  574.  
  575. //
  576. // Wishbone byte-wide bus arbiter
  577. //
  578.  
  579. arbiter_bytebus arbiter_bytebus0
  580. (
  581.  
  582. // Master 0
  583. // Inputs to arbiter from master
  584. .wbm0_adr_o (wbm_b_d_adr_o),
  585. .wbm0_dat_o (wbm_b_d_dat_o),
  586. .wbm0_sel_o (wbm_b_d_sel_o),
  587. .wbm0_we_o (wbm_b_d_we_o),
  588. .wbm0_cyc_o (wbm_b_d_cyc_o),
  589. .wbm0_stb_o (wbm_b_d_stb_o),
  590. .wbm0_cti_o (wbm_b_d_cti_o),
  591. .wbm0_bte_o (wbm_b_d_bte_o),
  592. // Outputs to master from arbiter
  593. .wbm0_dat_i (wbm_b_d_dat_i),
  594. .wbm0_ack_i (wbm_b_d_ack_i),
  595. .wbm0_err_i (wbm_b_d_err_i),
  596. .wbm0_rty_i (wbm_b_d_rty_i),
  597.  
  598. // Byte bus slaves
  599.  
  600. .wbs0_adr_i (wbs_d_uart0_adr_i),
  601. .wbs0_dat_i (wbs_d_uart0_dat_i),
  602. .wbs0_we_i (wbs_d_uart0_we_i),
  603. .wbs0_cyc_i (wbs_d_uart0_cyc_i),
  604. .wbs0_stb_i (wbs_d_uart0_stb_i),
  605. .wbs0_cti_i (wbs_d_uart0_cti_i),
  606. .wbs0_bte_i (wbs_d_uart0_bte_i),
  607. .wbs0_dat_o (wbs_d_uart0_dat_o),
  608. .wbs0_ack_o (wbs_d_uart0_ack_o),
  609. .wbs0_err_o (wbs_d_uart0_err_o),
  610. .wbs0_rty_o (wbs_d_uart0_rty_o),
  611.  
  612. .wbs1_adr_i (wbs_d_gpio0_adr_i),
  613. .wbs1_dat_i (wbs_d_gpio0_dat_i),
  614. .wbs1_we_i (wbs_d_gpio0_we_i),
  615. .wbs1_cyc_i (wbs_d_gpio0_cyc_i),
  616. .wbs1_stb_i (wbs_d_gpio0_stb_i),
  617. .wbs1_cti_i (wbs_d_gpio0_cti_i),
  618. .wbs1_bte_i (wbs_d_gpio0_bte_i),
  619. .wbs1_dat_o (wbs_d_gpio0_dat_o),
  620. .wbs1_ack_o (wbs_d_gpio0_ack_o),
  621. .wbs1_err_o (wbs_d_gpio0_err_o),
  622. .wbs1_rty_o (wbs_d_gpio0_rty_o),
  623.  
  624. .wbs2_adr_i (wbs_d_i2c0_adr_i),
  625. .wbs2_dat_i (wbs_d_i2c0_dat_i),
  626. .wbs2_we_i (wbs_d_i2c0_we_i),
  627. .wbs2_cyc_i (wbs_d_i2c0_cyc_i),
  628. .wbs2_stb_i (wbs_d_i2c0_stb_i),
  629. .wbs2_cti_i (wbs_d_i2c0_cti_i),
  630. .wbs2_bte_i (wbs_d_i2c0_bte_i),
  631. .wbs2_dat_o (wbs_d_i2c0_dat_o),
  632. .wbs2_ack_o (wbs_d_i2c0_ack_o),
  633. .wbs2_err_o (wbs_d_i2c0_err_o),
  634. .wbs2_rty_o (wbs_d_i2c0_rty_o),
  635.  
  636. .wbs3_adr_i (wbs_d_i2c1_adr_i),
  637. .wbs3_dat_i (wbs_d_i2c1_dat_i),
  638. .wbs3_we_i (wbs_d_i2c1_we_i),
  639. .wbs3_cyc_i (wbs_d_i2c1_cyc_i),
  640. .wbs3_stb_i (wbs_d_i2c1_stb_i),
  641. .wbs3_cti_i (wbs_d_i2c1_cti_i),
  642. .wbs3_bte_i (wbs_d_i2c1_bte_i),
  643. .wbs3_dat_o (wbs_d_i2c1_dat_o),
  644. .wbs3_ack_o (wbs_d_i2c1_ack_o),
  645. .wbs3_err_o (wbs_d_i2c1_err_o),
  646. .wbs3_rty_o (wbs_d_i2c1_rty_o),
  647.  
  648. .wbs4_adr_i (wbs_d_spi0_adr_i),
  649. .wbs4_dat_i (wbs_d_spi0_dat_i),
  650. .wbs4_we_i (wbs_d_spi0_we_i),
  651. .wbs4_cyc_i (wbs_d_spi0_cyc_i),
  652. .wbs4_stb_i (wbs_d_spi0_stb_i),
  653. .wbs4_cti_i (wbs_d_spi0_cti_i),
  654. .wbs4_bte_i (wbs_d_spi0_bte_i),
  655. .wbs4_dat_o (wbs_d_spi0_dat_o),
  656. .wbs4_ack_o (wbs_d_spi0_ack_o),
  657. .wbs4_err_o (wbs_d_spi0_err_o),
  658. .wbs4_rty_o (wbs_d_spi0_rty_o),
  659.  
  660. // Clock, reset inputs
  661. .wb_clk (wb_clk),
  662. .wb_rst (wb_rst));
  663.  
  664. defparam arbiter_bytebus0.wb_addr_match_width = bbus_arb_wb_addr_match_width;
  665. defparam arbiter_bytebus0.wb_num_slaves = bbus_arb_wb_num_slaves;
  666.  
  667. defparam arbiter_bytebus0.slave0_adr = bbus_arb_slave0_adr;
  668. defparam arbiter_bytebus0.slave1_adr = bbus_arb_slave1_adr;
  669. defparam arbiter_bytebus0.slave2_adr = bbus_arb_slave2_adr;
  670. defparam arbiter_bytebus0.slave3_adr = bbus_arb_slave3_adr;
  671. defparam arbiter_bytebus0.slave4_adr = bbus_arb_slave4_adr;
  672.  
  673.  
  674. `ifdef JTAG_DEBUG
  675. ////////////////////////////////////////////////////////////////////////
  676. //
  677. // JTAG TAP
  678. //
  679. ////////////////////////////////////////////////////////////////////////
  680.  
  681. //
  682. // Wires
  683. //
  684. wire dbg_if_select;
  685. wire dbg_if_tdo;
  686. wire jtag_tap_tdo;
  687. wire jtag_tap_shift_dr, jtag_tap_pause_dr,
  688. jtag_tap_upate_dr, jtag_tap_capture_dr;
  689. //
  690. // Instantiation
  691. //
  692.  
  693. jtag_tap jtag_tap0
  694. (
  695. // Ports to pads
  696. .tdo_pad_o (tdo_pad_o),
  697. .tms_pad_i (tms_pad_i),
  698. .tck_pad_i (dbg_tck),
  699. .trst_pad_i (async_rst),
  700. .tdi_pad_i (tdi_pad_i),
  701.  
  702. .tdo_padoe_o (tdo_padoe_o),
  703.  
  704. .tdo_o (jtag_tap_tdo),
  705.  
  706. .shift_dr_o (jtag_tap_shift_dr),
  707. .pause_dr_o (jtag_tap_pause_dr),
  708. .update_dr_o (jtag_tap_update_dr),
  709. .capture_dr_o (jtag_tap_capture_dr),
  710.  
  711. .extest_select_o (),
  712. .sample_preload_select_o (),
  713. .mbist_select_o (),
  714. .debug_select_o (dbg_if_select),
  715.  
  716.  
  717. .bs_chain_tdi_i (1'b0),
  718. .mbist_tdi_i (1'b0),
  719. .debug_tdi_i (dbg_if_tdo)
  720.  
  721. );
  722.  
  723. ////////////////////////////////////////////////////////////////////////
  724. `endif // `ifdef JTAG_DEBUG
  725.  
  726. ////////////////////////////////////////////////////////////////////////
  727. //
  728. // OpenRISC processor
  729. //
  730. ////////////////////////////////////////////////////////////////////////
  731.  
  732. //
  733. // Wires
  734. //
  735.  
  736. wire [30:0] or1200_pic_ints;
  737.  
  738. wire [31:0] or1200_dbg_dat_i;
  739. wire [31:0] or1200_dbg_adr_i;
  740. wire or1200_dbg_we_i;
  741. wire or1200_dbg_stb_i;
  742. wire or1200_dbg_ack_o;
  743. wire [31:0] or1200_dbg_dat_o;
  744.  
  745. wire or1200_dbg_stall_i;
  746. wire or1200_dbg_ewt_i;
  747. wire [3:0] or1200_dbg_lss_o;
  748. wire [1:0] or1200_dbg_is_o;
  749. wire [10:0] or1200_dbg_wp_o;
  750. wire or1200_dbg_bp_o;
  751. wire or1200_dbg_rst;
  752.  
  753. wire or1200_clk, or1200_rst;
  754. wire sig_tick;
  755.  
  756. //
  757. // Assigns
  758. //
  759. assign or1200_clk = wb_clk;
  760. assign or1200_rst = wb_rst | or1200_dbg_rst;
  761.  
  762. `ifdef MOR1KX
  763. mor1kx #(
  764. .FEATURE_DEBUGUNIT("ENABLED"),
  765. .FEATURE_CMOV("ENABLED"),
  766. .FEATURE_INSTRUCTIONCACHE("ENABLED"),
  767. .OPTION_ICACHE_BLOCK_WIDTH(5),
  768. .OPTION_ICACHE_SET_WIDTH(8),
  769. .OPTION_ICACHE_WAYS(2), // 4
  770. .OPTION_ICACHE_LIMIT_WIDTH(32),
  771. .FEATURE_IMMU("ENABLED"),
  772. //.OPTION_IMMU_SET_WIDTH(7),
  773. .FEATURE_DATACACHE("ENABLED"),
  774. .OPTION_DCACHE_BLOCK_WIDTH(5),
  775. .OPTION_DCACHE_SET_WIDTH(8),
  776. .OPTION_DCACHE_WAYS(2), // 4
  777. .OPTION_DCACHE_LIMIT_WIDTH(31),
  778. .FEATURE_DMMU("ENABLED"),
  779. //.OPTION_DMMU_SET_WIDTH(7),
  780. .OPTION_PIC_TRIGGER("LATCHED_LEVEL"),
  781.  
  782. .IBUS_WB_TYPE("B3_REGISTERED_FEEDBACK"),
  783. .DBUS_WB_TYPE("B3_REGISTERED_FEEDBACK"),
  784. .OPTION_CPU0("CAPPUCCINO"),
  785. .OPTION_RESET_PC(32'hf0000100)
  786. ) mor1kx0 (
  787. .iwbm_adr_o(wbm_i_or12_adr_o), //CHANGED
  788. .iwbm_stb_o(wbm_i_or12_stb_o), //CHANGED
  789. .iwbm_cyc_o(wbm_i_or12_cyc_o), //CHANGED
  790. .iwbm_sel_o(wbm_i_or12_sel_o), //CHANGED
  791. .iwbm_we_o (wbm_i_or12_we_o), //CHANGED
  792. .iwbm_cti_o(wbm_i_or12_cti_o), //CHANGED
  793. .iwbm_bte_o(wbm_i_or12_bte_o), //CHANGED
  794. .iwbm_dat_o(wbm_i_or12_dat_o), //CHANGED
  795.  
  796. .dwbm_adr_o(wbm_d_or12_adr_o), //CHANGED
  797. .dwbm_stb_o(wbm_d_or12_stb_o), //CHANGED
  798. .dwbm_cyc_o(wbm_d_or12_cyc_o), //CHANGED
  799. .dwbm_sel_o(wbm_d_or12_sel_o), //CHANGED
  800. .dwbm_we_o (wbm_d_or12_we_o), //CHANGED
  801. .dwbm_cti_o(wbm_d_or12_cti_o), //CHANGED
  802. .dwbm_bte_o(wbm_d_or12_bte_o), //CHANGED
  803. .dwbm_dat_o(wbm_d_or12_dat_o), //CHANGED
  804.  
  805. .clk(wb_clk), //CHANGED
  806. .rst(or1200_rst), //CHANGED
  807.  
  808. .iwbm_err_i(wbm_i_or12_err_i), //CHANGED
  809. .iwbm_ack_i(wbm_i_or12_ack_i), //CHANGED
  810. .iwbm_dat_i(wbm_i_or12_dat_i), //CHANGED
  811. .iwbm_rty_i(wbm_i_or12_rty_i), //CHANGED
  812.  
  813. .dwbm_err_i(wbm_d_or12_err_i), //CHANGED
  814. .dwbm_ack_i(wbm_d_or12_ack_i), //CHANGED
  815. .dwbm_dat_i(wbm_d_or12_dat_i), //CHANGED
  816. .dwbm_rty_i(wbm_d_or12_rty_i), //CHANGED
  817.  
  818. .irq_i(or1200_pic_ints), //CHANGED
  819.  
  820. .du_addr_i(or1200_dbg_adr_i[15:0]),
  821. .du_stb_i(or1200_dbg_stb_i),
  822. .du_dat_i(or1200_dbg_dat_i),
  823. .du_we_i(or1200_dbg_we_i),
  824. .du_dat_o(or1200_dbg_dat_o),
  825. .du_ack_o(or1200_dbg_ack_o),
  826. .du_stall_i(or1200_dbg_stall_i),
  827. .du_stall_o(or1200_dbg_bp_o)
  828. );
  829.  
  830. `endif
  831. ////////////////////////////////////////////////////////////////////////
  832. `ifdef OR1200
  833. //
  834. // Instantiation
  835. //
  836. or1200_top or1200_top0
  837. (
  838. // Instruction bus, clocks, reset
  839. .iwb_clk_i (wb_clk),
  840. .iwb_rst_i (wb_rst),
  841. .iwb_ack_i (wbm_i_or12_ack_i),
  842. .iwb_err_i (wbm_i_or12_err_i),
  843. .iwb_rty_i (wbm_i_or12_rty_i),
  844. .iwb_dat_i (wbm_i_or12_dat_i),
  845.  
  846. .iwb_cyc_o (wbm_i_or12_cyc_o),
  847. .iwb_adr_o (wbm_i_or12_adr_o),
  848. .iwb_stb_o (wbm_i_or12_stb_o),
  849. .iwb_we_o (wbm_i_or12_we_o),
  850. .iwb_sel_o (wbm_i_or12_sel_o),
  851. .iwb_dat_o (wbm_i_or12_dat_o),
  852. .iwb_cti_o (wbm_i_or12_cti_o),
  853. .iwb_bte_o (wbm_i_or12_bte_o),
  854.  
  855. // Data bus, clocks, reset
  856. .dwb_clk_i (wb_clk),
  857. .dwb_rst_i (wb_rst),
  858. .dwb_ack_i (wbm_d_or12_ack_i),
  859. .dwb_err_i (wbm_d_or12_err_i),
  860. .dwb_rty_i (wbm_d_or12_rty_i),
  861. .dwb_dat_i (wbm_d_or12_dat_i),
  862.  
  863. .dwb_cyc_o (wbm_d_or12_cyc_o),
  864. .dwb_adr_o (wbm_d_or12_adr_o),
  865. .dwb_stb_o (wbm_d_or12_stb_o),
  866. .dwb_we_o (wbm_d_or12_we_o),
  867. .dwb_sel_o (wbm_d_or12_sel_o),
  868. .dwb_dat_o (wbm_d_or12_dat_o),
  869. .dwb_cti_o (wbm_d_or12_cti_o),
  870. .dwb_bte_o (wbm_d_or12_bte_o),
  871.  
  872. // Debug interface ports
  873. .dbg_stall_i (or1200_dbg_stall_i),
  874. //.dbg_ewt_i (or1200_dbg_ewt_i),
  875. .dbg_ewt_i (1'b0),
  876. .dbg_lss_o (or1200_dbg_lss_o),
  877. .dbg_is_o (or1200_dbg_is_o),
  878. .dbg_wp_o (or1200_dbg_wp_o),
  879. .dbg_bp_o (or1200_dbg_bp_o),
  880.  
  881. .dbg_adr_i (or1200_dbg_adr_i),
  882. .dbg_we_i (or1200_dbg_we_i ),
  883. .dbg_stb_i (or1200_dbg_stb_i),
  884. .dbg_dat_i (or1200_dbg_dat_i),
  885. .dbg_dat_o (or1200_dbg_dat_o),
  886. .dbg_ack_o (or1200_dbg_ack_o),
  887.  
  888. .pm_clksd_o (),
  889. .pm_dc_gate_o (),
  890. .pm_ic_gate_o (),
  891. .pm_dmmu_gate_o (),
  892. .pm_immu_gate_o (),
  893. .pm_tt_gate_o (),
  894. .pm_cpu_gate_o (),
  895. .pm_wakeup_o (),
  896. .pm_lvolt_o (),
  897.  
  898. // Core clocks, resets
  899. .clk_i (or1200_clk),
  900. .rst_i (or1200_rst),
  901.  
  902. .clmode_i (2'b00),
  903. // Interrupts
  904. .pic_ints_i (or1200_pic_ints),
  905. .sig_tick(sig_tick),
  906. /*
  907. .mbist_so_o (),
  908. .mbist_si_i (0),
  909. .mbist_ctrl_i (0),
  910. */
  911.  
  912. .pm_cpustall_i (1'b0)
  913.  
  914. );
  915. `endif
  916.  
  917. ////////////////////////////////////////////////////////////////////////
  918.  
  919.  
  920. `ifdef JTAG_DEBUG
  921. ////////////////////////////////////////////////////////////////////////
  922. //
  923. // OR1200 Debug Interface
  924. //
  925. ////////////////////////////////////////////////////////////////////////
  926.  
  927. dbg_if dbg_if0
  928. (
  929. // OR1200 interface
  930. .cpu0_clk_i (or1200_clk),
  931. .cpu0_rst_o (or1200_dbg_rst),
  932. .cpu0_addr_o (or1200_dbg_adr_i),
  933. .cpu0_data_o (or1200_dbg_dat_i),
  934. .cpu0_stb_o (or1200_dbg_stb_i),
  935. .cpu0_we_o (or1200_dbg_we_i),
  936. .cpu0_data_i (or1200_dbg_dat_o),
  937. .cpu0_ack_i (or1200_dbg_ack_o),
  938.  
  939.  
  940. .cpu0_stall_o (or1200_dbg_stall_i),
  941. .cpu0_bp_i (or1200_dbg_bp_o),
  942.  
  943. // TAP interface
  944. .tck_i (dbg_tck),
  945. .tdi_i (jtag_tap_tdo),
  946. .tdo_o (dbg_if_tdo),
  947. .rst_i (wb_rst),
  948. .shift_dr_i (jtag_tap_shift_dr),
  949. .pause_dr_i (jtag_tap_pause_dr),
  950. .update_dr_i (jtag_tap_update_dr),
  951. .debug_select_i (dbg_if_select),
  952.  
  953. // Wishbone debug master
  954. .wb_clk_i (wb_clk),
  955. .wb_dat_i (wbm_d_dbg_dat_i),
  956. .wb_ack_i (wbm_d_dbg_ack_i),
  957. .wb_err_i (wbm_d_dbg_err_i),
  958. .wb_adr_o (wbm_d_dbg_adr_o),
  959. .wb_dat_o (wbm_d_dbg_dat_o),
  960. .wb_cyc_o (wbm_d_dbg_cyc_o),
  961. .wb_stb_o (wbm_d_dbg_stb_o),
  962. .wb_sel_o (wbm_d_dbg_sel_o),
  963. .wb_we_o (wbm_d_dbg_we_o ),
  964. .wb_cti_o (wbm_d_dbg_cti_o),
  965. .wb_cab_o (/* UNUSED */),
  966. .wb_bte_o (wbm_d_dbg_bte_o)
  967. );
  968.  
  969. ////////////////////////////////////////////////////////////////////////
  970. `else // !`ifdef JTAG_DEBUG
  971.  
  972. assign wbm_d_dbg_adr_o = 0;
  973. assign wbm_d_dbg_dat_o = 0;
  974. assign wbm_d_dbg_cyc_o = 0;
  975. assign wbm_d_dbg_stb_o = 0;
  976. assign wbm_d_dbg_sel_o = 0;
  977. assign wbm_d_dbg_we_o = 0;
  978. assign wbm_d_dbg_cti_o = 0;
  979. assign wbm_d_dbg_bte_o = 0;
  980.  
  981. assign or1200_dbg_adr_i = 0;
  982. assign or1200_dbg_dat_i = 0;
  983. assign or1200_dbg_stb_i = 0;
  984. assign or1200_dbg_we_i = 0;
  985. assign or1200_dbg_stall_i = 0;
  986.  
  987. ////////////////////////////////////////////////////////////////////////
  988. `endif // !`ifdef JTAG_DEBUG
  989.  
  990. `ifdef XILINX_DDR2
  991. ////////////////////////////////////////////////////////////////////////
  992. //
  993. // Xilinx MIG DDR2 controller, Wishbone interface
  994. //
  995. ////////////////////////////////////////////////////////////////////////
  996. xilinx_ddr2 xilinx_ddr2_0
  997. (
  998. .wbm0_adr_i (wbm_eth0_adr_o),
  999. .wbm0_bte_i (wbm_eth0_bte_o),
  1000. .wbm0_cti_i (wbm_eth0_cti_o),
  1001. .wbm0_cyc_i (wbm_eth0_cyc_o),
  1002. .wbm0_dat_i (wbm_eth0_dat_o),
  1003. .wbm0_sel_i (wbm_eth0_sel_o),
  1004. .wbm0_stb_i (wbm_eth0_stb_o),
  1005. .wbm0_we_i (wbm_eth0_we_o),
  1006. .wbm0_ack_o (wbm_eth0_ack_i),
  1007. .wbm0_err_o (wbm_eth0_err_i),
  1008. .wbm0_rty_o (wbm_eth0_rty_i),
  1009. .wbm0_dat_o (wbm_eth0_dat_i),
  1010.  
  1011. .wbm1_adr_i (wbs_d_mc0_adr_i),
  1012. .wbm1_bte_i (wbs_d_mc0_bte_i),
  1013. .wbm1_cti_i (wbs_d_mc0_cti_i),
  1014. .wbm1_cyc_i (wbs_d_mc0_cyc_i),
  1015. .wbm1_dat_i (wbs_d_mc0_dat_i),
  1016. .wbm1_sel_i (wbs_d_mc0_sel_i),
  1017. .wbm1_stb_i (wbs_d_mc0_stb_i),
  1018. .wbm1_we_i (wbs_d_mc0_we_i),
  1019. .wbm1_ack_o (wbs_d_mc0_ack_o),
  1020. .wbm1_err_o (wbs_d_mc0_err_o),
  1021. .wbm1_rty_o (wbs_d_mc0_rty_o),
  1022. .wbm1_dat_o (wbs_d_mc0_dat_o),
  1023.  
  1024. .wbm2_adr_i (wbs_i_mc0_adr_i),
  1025. .wbm2_bte_i (wbs_i_mc0_bte_i),
  1026. .wbm2_cti_i (wbs_i_mc0_cti_i),
  1027. .wbm2_cyc_i (wbs_i_mc0_cyc_i),
  1028. .wbm2_dat_i (wbs_i_mc0_dat_i),
  1029. .wbm2_sel_i (wbs_i_mc0_sel_i),
  1030. .wbm2_stb_i (wbs_i_mc0_stb_i),
  1031. .wbm2_we_i (wbs_i_mc0_we_i),
  1032. .wbm2_ack_o (wbs_i_mc0_ack_o),
  1033. .wbm2_err_o (wbs_i_mc0_err_o),
  1034. .wbm2_rty_o (wbs_i_mc0_rty_o),
  1035. .wbm2_dat_o (wbs_i_mc0_dat_o),
  1036.  
  1037. .wb_clk (wb_clk),
  1038. .wb_rst (wb_rst),
  1039.  
  1040. .ddr2_a (ddr2_a[12:0]),
  1041. .ddr2_ba (ddr2_ba),
  1042. .ddr2_ras_n (ddr2_ras_n),
  1043. .ddr2_cas_n (ddr2_cas_n),
  1044. .ddr2_we_n (ddr2_we_n),
  1045. .ddr2_rzq (ddr2_rzq),
  1046. .ddr2_zio (ddr2_zio),
  1047. .ddr2_odt (ddr2_odt),
  1048. .ddr2_cke (ddr2_cke),
  1049. .ddr2_dm (ddr2_dm),
  1050. .ddr2_udm (ddr2_udm),
  1051. .ddr2_ck (ddr2_ck),
  1052. .ddr2_ck_n (ddr2_ck_n),
  1053. .ddr2_dq (ddr2_dq),
  1054. .ddr2_dqs (ddr2_dqs),
  1055. .ddr2_dqs_n (ddr2_dqs_n),
  1056. .ddr2_udqs (ddr2_udqs),
  1057. .ddr2_udqs_n (ddr2_udqs_n),
  1058. .ddr2_if_clk (ddr2_if_clk),
  1059. .ddr2_if_rst (ddr2_if_rst)
  1060. );
  1061.  
  1062. `endif
  1063.  
  1064.  
  1065. ////////////////////////////////////////////////////////////////////////
  1066. //
  1067. // ROM
  1068. //
  1069. ////////////////////////////////////////////////////////////////////////
  1070.  
  1071. rom rom0
  1072. (
  1073. .wb_dat_o (wbs_i_rom0_dat_o),
  1074. .wb_ack_o (wbs_i_rom0_ack_o),
  1075. .wb_adr_i (wbs_i_rom0_adr_i[(wbs_i_rom0_addr_width+2)-1:2]),
  1076. .wb_stb_i (wbs_i_rom0_stb_i),
  1077. .wb_cyc_i (wbs_i_rom0_cyc_i),
  1078. .wb_cti_i (wbs_i_rom0_cti_i),
  1079. .wb_bte_i (wbs_i_rom0_bte_i),
  1080. .wb_clk (wb_clk),
  1081. .wb_rst (wb_rst));
  1082.  
  1083. defparam rom0.addr_width = wbs_i_rom0_addr_width;
  1084.  
  1085. assign wbs_i_rom0_err_o = 0;
  1086. assign wbs_i_rom0_rty_o = 0;
  1087.  
  1088. ////////////////////////////////////////////////////////////////////////
  1089.  
  1090. `ifdef RAM_WB
  1091. ////////////////////////////////////////////////////////////////////////
  1092. //
  1093. // Generic RAM
  1094. //
  1095. ////////////////////////////////////////////////////////////////////////
  1096.  
  1097. ram_wb ram_wb0
  1098. (
  1099. // Wishbone slave interface 0
  1100. .wbm0_dat_i (wbs_i_mc0_dat_i),
  1101. .wbm0_adr_i (wbs_i_mc0_adr_i),
  1102. .wbm0_sel_i (wbs_i_mc0_sel_i),
  1103. .wbm0_cti_i (wbs_i_mc0_cti_i),
  1104. .wbm0_bte_i (wbs_i_mc0_bte_i),
  1105. .wbm0_we_i (wbs_i_mc0_we_i ),
  1106. .wbm0_cyc_i (wbs_i_mc0_cyc_i),
  1107. .wbm0_stb_i (wbs_i_mc0_stb_i),
  1108. .wbm0_dat_o (wbs_i_mc0_dat_o),
  1109. .wbm0_ack_o (wbs_i_mc0_ack_o),
  1110. .wbm0_err_o (wbs_i_mc0_err_o),
  1111. .wbm0_rty_o (wbs_i_mc0_rty_o),
  1112. // Wishbone slave interface 1
  1113. .wbm1_dat_i (wbs_d_mc0_dat_i),
  1114. .wbm1_adr_i (wbs_d_mc0_adr_i),
  1115. .wbm1_sel_i (wbs_d_mc0_sel_i),
  1116. .wbm1_cti_i (wbs_d_mc0_cti_i),
  1117. .wbm1_bte_i (wbs_d_mc0_bte_i),
  1118. .wbm1_we_i (wbs_d_mc0_we_i ),
  1119. .wbm1_cyc_i (wbs_d_mc0_cyc_i),
  1120. .wbm1_stb_i (wbs_d_mc0_stb_i),
  1121. .wbm1_dat_o (wbs_d_mc0_dat_o),
  1122. .wbm1_ack_o (wbs_d_mc0_ack_o),
  1123. .wbm1_err_o (wbs_d_mc0_err_o),
  1124. .wbm1_rty_o (wbs_d_mc0_rty_o),
  1125. // Wishbone slave interface 2
  1126. .wbm2_dat_i (wbm_eth0_dat_o),
  1127. .wbm2_adr_i (wbm_eth0_adr_o),
  1128. .wbm2_sel_i (wbm_eth0_sel_o),
  1129. .wbm2_cti_i (wbm_eth0_cti_o),
  1130. .wbm2_bte_i (wbm_eth0_bte_o),
  1131. .wbm2_we_i (wbm_eth0_we_o ),
  1132. .wbm2_cyc_i (wbm_eth0_cyc_o),
  1133. .wbm2_stb_i (wbm_eth0_stb_o),
  1134. .wbm2_dat_o (wbm_eth0_dat_i),
  1135. .wbm2_ack_o (wbm_eth0_ack_i),
  1136. .wbm2_err_o (wbm_eth0_err_i),
  1137. .wbm2_rty_o (wbm_eth0_rty_i),
  1138. // Clock, reset
  1139. .wb_clk_i (wb_clk),
  1140. .wb_rst_i (wb_rst));
  1141.  
  1142. defparam ram_wb0.aw = wb_aw;
  1143. defparam ram_wb0.dw = wb_dw;
  1144.  
  1145. defparam ram_wb0.mem_size_bytes = (8192*1024); // 8MB
  1146. defparam ram_wb0.mem_adr_width = 23; // log2(8192*1024)
  1147. ////////////////////////////////////////////////////////////////////////
  1148. `endif // `ifdef RAM_WB
  1149.  
  1150.  
  1151. `ifdef ETH0
  1152.  
  1153. //
  1154. // Wires
  1155. //
  1156. wire eth0_irq;
  1157. wire [3:0] eth0_mtxd;
  1158. wire eth0_mtxen;
  1159. wire eth0_mtxerr;
  1160. wire eth0_mtx_clk;
  1161. wire eth0_mrx_clk;
  1162. wire [3:0] eth0_mrxd;
  1163. wire eth0_mrxdv;
  1164. wire eth0_mrxerr;
  1165. wire eth0_mcoll;
  1166. wire eth0_mcrs;
  1167. wire eth0_speed;
  1168. wire eth0_duplex;
  1169. wire eth0_link;
  1170. // Management interface wires
  1171. wire eth0_md_i;
  1172. wire eth0_md_o;
  1173. wire eth0_md_oe;
  1174.  
  1175.  
  1176. //
  1177. // assigns
  1178.  
  1179. // Hook up MII wires
  1180. assign eth0_mtx_clk = eth0_tx_clk;
  1181. assign eth0_tx_data = eth0_mtxd[3:0];
  1182. assign eth0_tx_en = eth0_mtxen;
  1183. assign eth0_tx_er = eth0_mtxerr;
  1184. assign eth0_mrxd[3:0] = eth0_rx_data;
  1185. assign eth0_mrxdv = eth0_dv;
  1186. assign eth0_mrxerr = eth0_rx_er;
  1187. assign eth0_mrx_clk = eth0_rx_clk;
  1188. assign eth0_mcoll = eth0_col;
  1189. assign eth0_mcrs = eth0_crs;
  1190.  
  1191. `ifdef XILINX
  1192. // Xilinx primitive for MDIO tristate
  1193. IOBUF iobuf_phy_smi_data
  1194. (
  1195. // Outputs
  1196. .O (eth0_md_i),
  1197. // Inouts
  1198. .IO (eth0_md_pad_io),
  1199. // Inputs
  1200. .I (eth0_md_o),
  1201. .T (!eth0_md_oe));
  1202. `else // !`ifdef XILINX
  1203.  
  1204. // Generic technology tristate control for management interface
  1205. assign eth0_md_pad_io = eth0_md_oe ? eth0_md_o : 1'bz;
  1206. assign eth0_md_i = eth0_md_pad_io;
  1207.  
  1208. `endif // !`ifdef XILINX
  1209.  
  1210. `ifdef ETH0_PHY_RST
  1211. assign eth0_rst_n_o = !wb_rst;
  1212. `endif
  1213.  
  1214. ethmac ethmac0
  1215. (
  1216. // Wishbone Slave interface
  1217. .wb_clk_i (wb_clk),
  1218. .wb_rst_i (wb_rst),
  1219. .wb_dat_i (wbs_d_eth0_dat_i[31:0]),
  1220. .wb_adr_i (wbs_d_eth0_adr_i[wbs_d_eth0_addr_width-1:2]),
  1221. .wb_sel_i (wbs_d_eth0_sel_i[3:0]),
  1222. .wb_we_i (wbs_d_eth0_we_i),
  1223. .wb_cyc_i (wbs_d_eth0_cyc_i),
  1224. .wb_stb_i (wbs_d_eth0_stb_i),
  1225. .wb_dat_o (wbs_d_eth0_dat_o[31:0]),
  1226. .wb_err_o (wbs_d_eth0_err_o),
  1227. .wb_ack_o (wbs_d_eth0_ack_o),
  1228. // Wishbone Master Interface
  1229. .m_wb_adr_o (wbm_eth0_adr_o[31:0]),
  1230. .m_wb_sel_o (wbm_eth0_sel_o[3:0]),
  1231. .m_wb_we_o (wbm_eth0_we_o),
  1232. .m_wb_dat_o (wbm_eth0_dat_o[31:0]),
  1233. .m_wb_cyc_o (wbm_eth0_cyc_o),
  1234. .m_wb_stb_o (wbm_eth0_stb_o),
  1235. .m_wb_cti_o (wbm_eth0_cti_o[2:0]),
  1236. .m_wb_bte_o (wbm_eth0_bte_o[1:0]),
  1237. .m_wb_dat_i (wbm_eth0_dat_i[31:0]),
  1238. .m_wb_ack_i (wbm_eth0_ack_i),
  1239. .m_wb_err_i (wbm_eth0_err_i),
  1240.  
  1241. // Ethernet MII interface
  1242. // Transmit
  1243. .mtxd_pad_o (eth0_mtxd[3:0]),
  1244. .mtxen_pad_o (eth0_mtxen),
  1245. .mtxerr_pad_o (eth0_mtxerr),
  1246. .mtx_clk_pad_i (eth0_mtx_clk),
  1247. // Receive
  1248. .mrx_clk_pad_i (eth0_mrx_clk),
  1249. .mrxd_pad_i (eth0_mrxd[3:0]),
  1250. .mrxdv_pad_i (eth0_mrxdv),
  1251. .mrxerr_pad_i (eth0_mrxerr),
  1252. .mcoll_pad_i (eth0_mcoll),
  1253. .mcrs_pad_i (eth0_mcrs),
  1254. // Management interface
  1255. .md_pad_i (eth0_md_i),
  1256. .mdc_pad_o (eth0_mdc_pad_o),
  1257. .md_pad_o (eth0_md_o),
  1258. .md_padoe_o (eth0_md_oe),
  1259.  
  1260. // Processor interrupt
  1261. .int_o (eth0_irq)
  1262.  
  1263. /*
  1264. .mbist_so_o (),
  1265. .mbist_si_i (),
  1266. .mbist_ctrl_i ()
  1267. */
  1268.  
  1269. );
  1270.  
  1271. assign wbs_d_eth0_rty_o = 0;
  1272.  
  1273. `else
  1274. assign wbs_d_eth0_dat_o = 0;
  1275. assign wbs_d_eth0_err_o = 0;
  1276. assign wbs_d_eth0_ack_o = 0;
  1277. assign wbs_d_eth0_rty_o = 0;
  1278. assign wbm_eth0_adr_o = 0;
  1279. assign wbm_eth0_sel_o = 0;
  1280. assign wbm_eth0_we_o = 0;
  1281. assign wbm_eth0_dat_o = 0;
  1282. assign wbm_eth0_cyc_o = 0;
  1283. assign wbm_eth0_stb_o = 0;
  1284. assign wbm_eth0_cti_o = 0;
  1285. assign wbm_eth0_bte_o = 0;
  1286. `endif
  1287.  
  1288. `ifdef UART0
  1289. ////////////////////////////////////////////////////////////////////////
  1290. //
  1291. // UART0
  1292. //
  1293. ////////////////////////////////////////////////////////////////////////
  1294.  
  1295. //
  1296. // Wires
  1297. //
  1298. wire uart0_srx;
  1299. wire uart0_stx;
  1300.  
  1301. wire uart0_irq;
  1302.  
  1303. //
  1304. // Assigns
  1305. //
  1306. assign wbs_d_uart0_err_o = 0;
  1307. assign wbs_d_uart0_rty_o = 0;
  1308.  
  1309. // Two UART lines coming to single one (ensure they go high when unconnected)
  1310. `ifdef UART0_EXPHEADER
  1311. assign uart0_srx = uart0_srx_pad_i & uart0_srx_expheader_pad_i;
  1312. `else
  1313. assign uart0_srx = uart0_srx_pad_i;
  1314. `endif
  1315. assign uart0_stx_pad_o = uart0_stx;
  1316. assign uart0_stx_expheader_pad_o = uart0_stx;
  1317.  
  1318.  
  1319. uart16550 uart16550_0
  1320. (
  1321. // Wishbone slave interface
  1322. .wb_clk_i (wb_clk),
  1323. .wb_rst_i (wb_rst),
  1324. .wb_adr_i (wbs_d_uart0_adr_i[uart0_addr_width-1:0]),
  1325. .wb_dat_i (wbs_d_uart0_dat_i),
  1326. .wb_we_i (wbs_d_uart0_we_i),
  1327. .wb_stb_i (wbs_d_uart0_stb_i),
  1328. .wb_cyc_i (wbs_d_uart0_cyc_i),
  1329. //.wb_sel_i (),
  1330. .wb_dat_o (wbs_d_uart0_dat_o),
  1331. .wb_ack_o (wbs_d_uart0_ack_o),
  1332.  
  1333. .int_o (uart0_irq),
  1334. .stx_pad_o (uart0_stx),
  1335. .rts_pad_o (),
  1336. .dtr_pad_o (),
  1337. `ifdef UART_HAS_BAUDRATE_OUTPUT
  1338. .baud_o (),
  1339. `endif
  1340. // Inputs
  1341. .srx_pad_i (uart0_srx),
  1342. .cts_pad_i (1'b0),
  1343. .dsr_pad_i (1'b0),
  1344. .ri_pad_i (1'b0),
  1345. .dcd_pad_i (1'b0));
  1346.  
  1347. ////////////////////////////////////////////////////////////////////////
  1348. `else // !`ifdef UART0
  1349.  
  1350. //
  1351. // Assigns
  1352. //
  1353. assign wbs_d_uart0_err_o = 0;
  1354. assign wbs_d_uart0_rty_o = 0;
  1355. assign wbs_d_uart0_ack_o = 0;
  1356. assign wbs_d_uart0_dat_o = 0;
  1357.  
  1358. ////////////////////////////////////////////////////////////////////////
  1359. `endif // !`ifdef UART0
  1360.  
  1361. `ifdef SPI0
  1362. ////////////////////////////////////////////////////////////////////////
  1363. //
  1364. // SPI0 controller
  1365. //
  1366. ////////////////////////////////////////////////////////////////////////
  1367.  
  1368. //
  1369. // Wires
  1370. //
  1371. wire spi0_irq;
  1372.  
  1373. //
  1374. // Assigns
  1375. //
  1376. assign wbs_d_spi0_err_o = 0;
  1377. assign wbs_d_spi0_rty_o = 0;
  1378. //assign spi0_hold_n_o = 1;
  1379. //assign spi0_w_n_o = 1;
  1380.  
  1381.  
  1382. simple_spi spi0
  1383. (
  1384. // Wishbone slave interface
  1385. .clk_i (wb_clk),
  1386. .rst_i (wb_rst),
  1387. .cyc_i (wbs_d_spi0_cyc_i),
  1388. .stb_i (wbs_d_spi0_stb_i),
  1389. .adr_i (wbs_d_spi0_adr_i[spi0_wb_adr_width-1:0]),
  1390. .we_i (wbs_d_spi0_we_i),
  1391. .dat_i (wbs_d_spi0_dat_i),
  1392. .dat_o (wbs_d_spi0_dat_o),
  1393. .ack_o (wbs_d_spi0_ack_o),
  1394. // SPI IRQ
  1395. .inta_o (spi0_irq),
  1396. // External SPI interface
  1397. .sck_o (spi0_sck_o),
  1398. .ss_o (spi0_ss_o),
  1399. .mosi_o (spi0_mosi_o),
  1400. .miso_i (spi0_miso_i)
  1401. );
  1402.  
  1403. defparam spi0.slave_select_width = spi0_ss_width;
  1404.  
  1405. ////////////////////////////////////////////////////////////////////////
  1406. `else // !`ifdef SPI0
  1407.  
  1408. //
  1409. // Assigns
  1410. //
  1411. assign wbs_d_spi0_dat_o = 0;
  1412. assign wbs_d_spi0_ack_o = 0;
  1413. assign wbs_d_spi0_err_o = 0;
  1414. assign wbs_d_spi0_rty_o = 0;
  1415.  
  1416. ////////////////////////////////////////////////////////////////////////
  1417. `endif // !`ifdef SPI0
  1418.  
  1419.  
  1420. `ifdef I2C0
  1421. ////////////////////////////////////////////////////////////////////////
  1422. //
  1423. // i2c controller 0
  1424. //
  1425. ////////////////////////////////////////////////////////////////////////
  1426.  
  1427. //
  1428. // Wires
  1429. //
  1430. wire i2c0_irq;
  1431. wire scl0_pad_o;
  1432. wire scl0_padoen_o;
  1433. wire sda0_pad_o;
  1434. wire sda0_padoen_o;
  1435.  
  1436. i2c_master_slave
  1437. #
  1438. (
  1439. .DEFAULT_SLAVE_ADDR(HV0_SADR)
  1440. )
  1441. i2c_master_slave0
  1442. (
  1443. .wb_clk_i (wb_clk),
  1444. .wb_rst_i (wb_rst),
  1445. .arst_i (wb_rst),
  1446. .wb_adr_i (wbs_d_i2c0_adr_i[i2c_0_wb_adr_width-1:0]),
  1447. .wb_dat_i (wbs_d_i2c0_dat_i),
  1448. .wb_we_i (wbs_d_i2c0_we_i ),
  1449. .wb_cyc_i (wbs_d_i2c0_cyc_i),
  1450. .wb_stb_i (wbs_d_i2c0_stb_i),
  1451. .wb_dat_o (wbs_d_i2c0_dat_o),
  1452. .wb_ack_o (wbs_d_i2c0_ack_o),
  1453. .scl_pad_i (i2c0_scl_io ),
  1454. .scl_pad_o (scl0_pad_o ),
  1455. .scl_padoen_o (scl0_padoen_o ),
  1456. .sda_pad_i (i2c0_sda_io ),
  1457. .sda_pad_o (sda0_pad_o ),
  1458. .sda_padoen_o (sda0_padoen_o ),
  1459.  
  1460. // Interrupt
  1461. .wb_inta_o (i2c0_irq)
  1462.  
  1463. );
  1464.  
  1465. assign wbs_d_i2c0_err_o = 0;
  1466. assign wbs_d_i2c0_rty_o = 0;
  1467.  
  1468. // i2c phy lines
  1469. assign i2c0_scl_io = scl0_padoen_o ? 1'bz : scl0_pad_o;
  1470. assign i2c0_sda_io = sda0_padoen_o ? 1'bz : sda0_pad_o;
  1471.  
  1472.  
  1473. ////////////////////////////////////////////////////////////////////////
  1474. `else // !`ifdef I2C0
  1475.  
  1476. assign wbs_d_i2c0_dat_o = 0;
  1477. assign wbs_d_i2c0_ack_o = 0;
  1478. assign wbs_d_i2c0_err_o = 0;
  1479. assign wbs_d_i2c0_rty_o = 0;
  1480.  
  1481. ////////////////////////////////////////////////////////////////////////
  1482. `endif // !`ifdef I2C0
  1483.  
  1484. `ifdef I2C1
  1485. ////////////////////////////////////////////////////////////////////////
  1486. //
  1487. // i2c controller 1
  1488. //
  1489. ////////////////////////////////////////////////////////////////////////
  1490.  
  1491. //
  1492. // Wires
  1493. //
  1494. wire i2c1_irq;
  1495. wire scl1_pad_o;
  1496. wire scl1_padoen_o;
  1497. wire sda1_pad_o;
  1498. wire sda1_padoen_o;
  1499.  
  1500. i2c_master_slave
  1501. #
  1502. (
  1503. .DEFAULT_SLAVE_ADDR(HV1_SADR)
  1504. )
  1505. i2c_master_slave1
  1506. (
  1507. .wb_clk_i (wb_clk),
  1508. .wb_rst_i (wb_rst),
  1509. .arst_i (wb_rst),
  1510. .wb_adr_i (wbs_d_i2c1_adr_i[i2c_1_wb_adr_width-1:0]),
  1511. .wb_dat_i (wbs_d_i2c1_dat_i),
  1512. .wb_we_i (wbs_d_i2c1_we_i ),
  1513. .wb_cyc_i (wbs_d_i2c1_cyc_i),
  1514. .wb_stb_i (wbs_d_i2c1_stb_i),
  1515. .wb_dat_o (wbs_d_i2c1_dat_o),
  1516. .wb_ack_o (wbs_d_i2c1_ack_o),
  1517. .scl_pad_i (i2c1_scl_io ),
  1518. .scl_pad_o (scl1_pad_o ),
  1519. .scl_padoen_o (scl1_padoen_o ),
  1520. .sda_pad_i (i2c1_sda_io ),
  1521. .sda_pad_o (sda1_pad_o ),
  1522. .sda_padoen_o (sda1_padoen_o ),
  1523.  
  1524. // Interrupt
  1525. .wb_inta_o (i2c1_irq)
  1526.  
  1527. );
  1528.  
  1529. assign wbs_d_i2c1_err_o = 0;
  1530. assign wbs_d_i2c1_rty_o = 0;
  1531.  
  1532. // i2c phy lines
  1533. assign i2c1_scl_io = scl1_padoen_o ? 1'bz : scl1_pad_o;
  1534. assign i2c1_sda_io = sda1_padoen_o ? 1'bz : sda1_pad_o;
  1535.  
  1536. ////////////////////////////////////////////////////////////////////////
  1537. `else // !`ifdef I2C1
  1538.  
  1539. assign wbs_d_i2c1_dat_o = 0;
  1540. assign wbs_d_i2c1_ack_o = 0;
  1541. assign wbs_d_i2c1_err_o = 0;
  1542. assign wbs_d_i2c1_rty_o = 0;
  1543.  
  1544. ////////////////////////////////////////////////////////////////////////
  1545. `endif // !`ifdef I2C1
  1546.  
  1547. `ifdef GPIO0
  1548. ////////////////////////////////////////////////////////////////////////
  1549. //
  1550. // GPIO 0
  1551. //
  1552. ////////////////////////////////////////////////////////////////////////
  1553.  
  1554. gpio gpio0
  1555. (
  1556. // GPIO bus
  1557. .gpio_io (gpio0_io[gpio0_io_width-1:0]),
  1558. // Wishbone slave interface
  1559. .wb_adr_i (wbs_d_gpio0_adr_i[gpio0_wb_adr_width-1:0]),
  1560. .wb_dat_i (wbs_d_gpio0_dat_i),
  1561. .wb_we_i (wbs_d_gpio0_we_i),
  1562. .wb_cyc_i (wbs_d_gpio0_cyc_i),
  1563. .wb_stb_i (wbs_d_gpio0_stb_i),
  1564. .wb_cti_i (wbs_d_gpio0_cti_i),
  1565. .wb_bte_i (wbs_d_gpio0_bte_i),
  1566. .wb_dat_o (wbs_d_gpio0_dat_o),
  1567. .wb_ack_o (wbs_d_gpio0_ack_o),
  1568. .wb_err_o (wbs_d_gpio0_err_o),
  1569. .wb_rty_o (wbs_d_gpio0_rty_o),
  1570.  
  1571. .wb_clk (wb_clk),
  1572. .wb_rst (wb_rst)
  1573. );
  1574.  
  1575. defparam gpio0.gpio_io_width = gpio0_io_width;
  1576. defparam gpio0.gpio_dir_reset_val = gpio0_dir_reset_val;
  1577. defparam gpio0.gpio_o_reset_val = gpio0_o_reset_val;
  1578.  
  1579. ////////////////////////////////////////////////////////////////////////
  1580. `else // !`ifdef GPIO0
  1581. assign wbs_d_gpio0_dat_o = 0;
  1582. assign wbs_d_gpio0_ack_o = 0;
  1583. assign wbs_d_gpio0_err_o = 0;
  1584. assign wbs_d_gpio0_rty_o = 0;
  1585. ////////////////////////////////////////////////////////////////////////
  1586. `endif // !`ifdef GPIO0
  1587.  
  1588. ////////////////////////////////////////////////////////////////////////
  1589. //
  1590. // OR1200 Interrupt assignment
  1591. //
  1592. ////////////////////////////////////////////////////////////////////////
  1593.  
  1594. assign or1200_pic_ints[0] = 0; // Non-maskable inside OR1200
  1595. assign or1200_pic_ints[1] = 0; // Non-maskable inside OR1200
  1596. `ifdef UART0
  1597. assign or1200_pic_ints[2] = uart0_irq;
  1598. `else
  1599. assign or1200_pic_ints[2] = 0;
  1600. `endif
  1601. assign or1200_pic_ints[3] = 0;
  1602. `ifdef ETH0
  1603. assign or1200_pic_ints[4] = eth0_irq;
  1604. `else
  1605. assign or1200_pic_ints[4] = 0;
  1606. `endif
  1607. assign or1200_pic_ints[5] = 0;
  1608. `ifdef SPI0
  1609. assign or1200_pic_ints[6] = spi0_irq;
  1610. `else
  1611. assign or1200_pic_ints[6] = 0;
  1612. `endif
  1613. assign or1200_pic_ints[7] = 0;
  1614. assign or1200_pic_ints[8] = 0;
  1615. assign or1200_pic_ints[9] = 0;
  1616. `ifdef I2C0
  1617. assign or1200_pic_ints[10] = i2c0_irq;
  1618. `else
  1619. assign or1200_pic_ints[10] = 0;
  1620. `endif
  1621. `ifdef I2C1
  1622. assign or1200_pic_ints[11] = i2c1_irq;
  1623. `else
  1624. assign or1200_pic_ints[11] = 0;
  1625. `endif
  1626. assign or1200_pic_ints[12] = 0;
  1627. assign or1200_pic_ints[13] = 0;
  1628. assign or1200_pic_ints[14] = 0;
  1629. assign or1200_pic_ints[15] = 0;
  1630. assign or1200_pic_ints[16] = 0;
  1631. assign or1200_pic_ints[17] = 0;
  1632. assign or1200_pic_ints[18] = 0;
  1633. assign or1200_pic_ints[19] = 0;
  1634. assign or1200_pic_ints[20] = 0;
  1635. assign or1200_pic_ints[21] = 0;
  1636. assign or1200_pic_ints[22] = 0;
  1637. assign or1200_pic_ints[23] = 0;
  1638. assign or1200_pic_ints[24] = 0;
  1639. assign or1200_pic_ints[25] = 0;
  1640. assign or1200_pic_ints[26] = 0;
  1641. assign or1200_pic_ints[27] = 0;
  1642. assign or1200_pic_ints[28] = 0;
  1643. assign or1200_pic_ints[29] = 0;
  1644. assign or1200_pic_ints[30] = 0;
  1645.  
  1646. endmodule // orpsoc_top
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement