You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

393 lines
14 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. `include "config.v"
  2. `timescale 1ns / 1ns
  3. module Top (
  4. input ex_clk,
  5. input ex_rst_n,
  6. /*******************************************************************************
  7. * genlock *
  8. *******************************************************************************/
  9. input genlock_in_hsync,
  10. input genlock_in_vsync,
  11. input genlock_in_fsync,
  12. output genlock_in_state_led,
  13. /*******************************************************************************
  14. * GENLOCK_OUTPUT *
  15. *******************************************************************************/
  16. output [9:0] genlock_out_dac,
  17. output genlock_out_dac_clk,
  18. output genlock_out_dac_state_led,
  19. /*******************************************************************************
  20. * TTL_IN *
  21. *******************************************************************************/
  22. input sync_ttl_in1,
  23. output sync_ttl_in1_state_led,
  24. input sync_ttl_in2,
  25. output sync_ttl_in2_state_led,
  26. input sync_ttl_in3,
  27. output sync_ttl_in3_state_led,
  28. input sync_ttl_in4,
  29. output sync_ttl_in4_state_led,
  30. /*******************************************************************************
  31. * TTL_OUT *
  32. *******************************************************************************/
  33. output sync_ttl_out1,
  34. output sync_ttl_out1_state_led,
  35. output sync_ttl_out2,
  36. output sync_ttl_out2_state_led,
  37. output sync_ttl_out3,
  38. output sync_ttl_out3_state_led,
  39. output sync_ttl_out4,
  40. output sync_ttl_out4_state_led,
  41. /*******************************************************************************
  42. * TIMECODE_IN *
  43. *******************************************************************************/
  44. input timecode_headphone_in,
  45. output timecode_headphone_in_state_led,
  46. input timecode_bnc_in,
  47. output timecode_bnc_in_state_led,
  48. /*******************************************************************************
  49. * TIMECODE_OUTPUT *
  50. *******************************************************************************/
  51. output timecode_out_bnc,
  52. output timecode_out_bnc_select,
  53. output timecode_out_bnc_state_led,
  54. output timecode_out_headphone,
  55. output timecode_out_headphone_select,
  56. output timecode_out_headphone_state_led,
  57. /*******************************************************************************
  58. * STM32_IF *
  59. *******************************************************************************/
  60. output stm32if_camera_sync_out,
  61. output stm32if_timecode_sync_out,
  62. output stm32if_start_signal_out,
  63. output [3:0] stm32if_timecode_add,
  64. output [3:0] stm32if_timecode_data,
  65. //SPI 串行总线1
  66. input wire spi1_cs_pin,
  67. input wire spi1_clk_pin,
  68. input wire spi1_rx_pin,
  69. output wire spi1_tx_pin,
  70. //SPI 串行总线2
  71. input wire spi2_cs_pin,
  72. input wire spi2_clk_pin,
  73. input wire spi2_rx_pin,
  74. output wire spi2_tx_pin,
  75. /*******************************************************************************
  76. * debug_signal_output *
  77. *******************************************************************************/
  78. output [15:0] debug_signal_output,
  79. /*******************************************************************************
  80. * CODE_BOARD *
  81. *******************************************************************************/
  82. output wire core_board_debug_led
  83. );
  84. localparam HARDWARE_TEST_MODE = 1;
  85. SPLL spll (
  86. .clkin1(ex_clk), // input
  87. .pll_lock(pll_lock), // output
  88. .clkout0(sys_clk_25m), // output
  89. .clkout1(sys_clk_10m), // output
  90. .clkout2(sys_clk_5m) // output
  91. );
  92. assign sys_clk = sys_clk_10m;
  93. assign sys_rst_n = ex_rst_n & pll_lock;
  94. localparam SYS_CLOCK_FREQ = 10000000;
  95. // zutils_reset_sig_gen reset_sig_gen_inst (
  96. // .clk(sys_clk),
  97. // .rst_n(rst_n),
  98. // .rst_n_out(sys_rst_n)
  99. // );
  100. /*******************************************************************************
  101. * DEBUG_LED *
  102. *******************************************************************************/
  103. // zutils_debug_led #(
  104. // .PERIOD_COUNT(10000000)
  105. // ) core_board_debug_led_inst (
  106. // .clk(sys_clk),
  107. // .rst_n(sys_rst_n),
  108. // .debug_led(core_board_debug_led)
  109. // );
  110. /*******************************************************************************
  111. * SPIREADER *
  112. *******************************************************************************/
  113. wire [31:0] reg_reader_bus_addr;
  114. wire [31:0] reg_reader_bus_wr_data;
  115. wire reg_reader_bus_wr_en;
  116. wire [31:0] reg_reader_bus_rd_data;
  117. spi_reg_reader spi_reg_reader_inst (
  118. .clk (sys_clk),
  119. .rst_n(sys_rst_n),
  120. .addr(reg_reader_bus_addr),
  121. .wr_data(reg_reader_bus_wr_data),
  122. .wr_en(reg_reader_bus_wr_en),
  123. .rd_data(reg_reader_bus_rd_data),
  124. //
  125. .spi_cs_pin(spi2_cs_pin),
  126. .spi_clk_pin(spi2_clk_pin),
  127. .spi_rx_pin(spi2_rx_pin),
  128. .spi_tx_pin(spi2_tx_pin)
  129. );
  130. wire [31:0] stm32_rd_data;
  131. wire [31:0] fpga_test_rd_data;
  132. wire [31:0] control_sensor_rd_data;
  133. wire [31:0] ttlin1_rd_data;
  134. wire [31:0] ttlin2_rd_data;
  135. wire [31:0] ttlin3_rd_data;
  136. wire [31:0] ttlin4_rd_data;
  137. wire [31:0] timecode_in_rd_data;
  138. wire [31:0] genlock_in_rd_data;
  139. wire [31:0] ttlout1_rd_data;
  140. wire [31:0] ttlout2_rd_data;
  141. wire [31:0] ttlout3_rd_data;
  142. wire [31:0] ttlout4_rd_data;
  143. wire [31:0] timecode_out_rd_data;
  144. wire [31:0] genlock_out_rd_data;
  145. wire [31:0] stm32_if_rd_data;
  146. wire [31:0] debuger_rd_data;
  147. /*******************************************************************************
  148. * TEST_SPI_REG *
  149. *******************************************************************************/
  150. zutils_register16 #(
  151. .REG_START_ADD(`REG_ADD_OFF_FPGA_TEST),
  152. .REG0_INIT(31'h0000_0000_0000_0001),
  153. .REG1_INIT(31'h0000_0000_0000_0010),
  154. .REG2_INIT(31'h0000_0000_0000_0100),
  155. .REG3_INIT(31'h0000_0000_0000_1000),
  156. .REG4_INIT(31'h0000_0000_0001_0000),
  157. .REG5_INIT(31'h0000_0000_0010_0000),
  158. .REG6_INIT(31'h0000_0000_0100_0000),
  159. .REG7_INIT(31'h0000_0000_1000_0000),
  160. .REG8_INIT(31'h0000_0001_0000_0000),
  161. .REG9_INIT(31'h0000_0010_0000_0000),
  162. .REGA_INIT(31'h0000_0100_0000_0000),
  163. .REGB_INIT(31'h0000_1000_0000_0000),
  164. .REGC_INIT(31'h0001_0000_0000_0000),
  165. .REGD_INIT(31'h0010_0000_0000_0000),
  166. .REGE_INIT(31'h0100_0000_0000_0000),
  167. .REGF_INIT(31'h1000_0000_0000_0000)
  168. ) test_reg (
  169. .clk(sys_clk),
  170. .rst_n(sys_rst_n),
  171. .addr(reg_reader_bus_addr),
  172. .wr_data(reg_reader_bus_wr_data),
  173. .wr_en(reg_reader_bus_wr_en),
  174. .rd_data(fpga_test_rd_data)
  175. );
  176. /*******************************************************************************
  177. * 信号源 *
  178. *******************************************************************************/
  179. // level0 = 0, // 0
  180. // level1 = 1, // 1
  181. wire ttlin1_module_raw_sig; // ttl1输入模块原始信号 2
  182. wire ttlin1_module_sig_divide; // ttl1输入模块分频信号 3
  183. wire ttlin2_module_raw_sig; // ttl2输入模块原始信号 4
  184. wire ttlin2_module_sig_divide; // ttl2输入模块分频信号 5
  185. wire ttlin3_module_raw_sig; // ttl3输入模块原始信号 6
  186. wire ttlin3_module_sig_divide; // ttl3输入模块分频信号 7
  187. wire ttlin4_module_raw_sig; // ttl4输入模块原始信号 8
  188. wire ttlin4_module_sig_divide; // ttl4输入模块分频信号 9
  189. wire genlockin_module_freq_sig; // genlock输入模块频率信号 10
  190. wire timecodein_module_trigger_sig; // timecode输入模块触发信号 11
  191. wire internal_camera_sync_sig; // 内部相机同步信号 12
  192. wire internal_timecode_trigger_sig; // 内部timecode触发信号 13
  193. wire internal_genlock_freq_sig; // 内部genlock频率信号 14
  194. wire internal_work_state_sig; // 内部工作状态信号 15
  195. wire internal_100hz_output; // 内部工作状态信号 16
  196. xsync_internal_generator xsync_internal_generator_ins (
  197. .clk (sys_clk),
  198. .rst_n(sys_rst_n)
  199. );
  200. wire [31:0] ttl_output_module_source_sig_af;
  201. zutils_pwm_generator #(
  202. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  203. .OUTPUT_FREQ(100)
  204. ) pwm100hz_gen (
  205. .clk(sys_clk),
  206. .rst_n(sys_rst_n),
  207. .output_signal(internal_100hz_output)
  208. );
  209. /*******************************************************************************
  210. * 输出组件 *
  211. *******************************************************************************/
  212. assign ttl_output_module_source_sig_af[0] = 0;
  213. assign ttl_output_module_source_sig_af[1] = 1;
  214. assign ttl_output_module_source_sig_af[2] = ttlin1_module_raw_sig;
  215. assign ttl_output_module_source_sig_af[3] = ttlin1_module_sig_divide;
  216. assign ttl_output_module_source_sig_af[4] = ttlin2_module_raw_sig;
  217. assign ttl_output_module_source_sig_af[5] = ttlin2_module_sig_divide;
  218. assign ttl_output_module_source_sig_af[6] = ttlin3_module_raw_sig;
  219. assign ttl_output_module_source_sig_af[7] = ttlin3_module_sig_divide;
  220. assign ttl_output_module_source_sig_af[8] = ttlin4_module_raw_sig;
  221. assign ttl_output_module_source_sig_af[9] = ttlin4_module_sig_divide;
  222. assign ttl_output_module_source_sig_af[10] = genlockin_module_freq_sig;
  223. assign ttl_output_module_source_sig_af[11] = timecodein_module_trigger_sig;
  224. assign ttl_output_module_source_sig_af[12] = internal_camera_sync_sig;
  225. assign ttl_output_module_source_sig_af[13] = internal_timecode_trigger_sig;
  226. assign ttl_output_module_source_sig_af[14] = internal_genlock_freq_sig;
  227. assign ttl_output_module_source_sig_af[15] = internal_work_state_sig;
  228. assign ttl_output_module_source_sig_af[16] = internal_100hz_output;
  229. ttl_output #(
  230. .REG_START_ADD(`REG_ADD_OFF_TTLOUT1),
  231. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  232. .ID(1)
  233. ) ttl_output_1 (
  234. .clk (sys_clk),
  235. .rst_n(sys_rst_n),
  236. .addr(reg_reader_bus_addr),
  237. .wr_data(reg_reader_bus_wr_data),
  238. .wr_en(reg_reader_bus_wr_en),
  239. .rd_data(ttlout1_rd_data),
  240. .signal_in(ttl_output_module_source_sig_af),
  241. .ttloutput(sync_ttl_out1),
  242. .ttloutput_state_led(sync_ttl_out1_state_led)
  243. );
  244. ttl_output #(
  245. .REG_START_ADD(`REG_ADD_OFF_TTLOUT2),
  246. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  247. .ID(2)
  248. ) ttl_output_2 (
  249. .clk (sys_clk),
  250. .rst_n(sys_rst_n),
  251. .addr(reg_reader_bus_addr),
  252. .wr_data(reg_reader_bus_wr_data),
  253. .wr_en(reg_reader_bus_wr_en),
  254. .rd_data(ttlout2_rd_data),
  255. .signal_in(ttl_output_module_source_sig_af),
  256. .ttloutput(sync_ttl_out2),
  257. .ttloutput_state_led(sync_ttl_out2_state_led)
  258. );
  259. ttl_output #(
  260. .REG_START_ADD(`REG_ADD_OFF_TTLOUT3),
  261. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  262. .ID(3)
  263. ) ttl_output_3 (
  264. .clk (sys_clk),
  265. .rst_n(sys_rst_n),
  266. .addr(reg_reader_bus_addr),
  267. .wr_data(reg_reader_bus_wr_data),
  268. .wr_en(reg_reader_bus_wr_en),
  269. .rd_data(ttlout3_rd_data),
  270. .signal_in(ttl_output_module_source_sig_af),
  271. .ttloutput(sync_ttl_out3),
  272. .ttloutput_state_led(sync_ttl_out3_state_led)
  273. );
  274. ttl_output #(
  275. .REG_START_ADD(`REG_ADD_OFF_TTLOUT4),
  276. .SYS_CLOCK_FREQ(SYS_CLOCK_FREQ),
  277. .ID(4)
  278. ) ttl_output_4 (
  279. .clk (sys_clk),
  280. .rst_n(sys_rst_n),
  281. .addr(reg_reader_bus_addr),
  282. .wr_data(reg_reader_bus_wr_data),
  283. .wr_en(reg_reader_bus_wr_en),
  284. .rd_data(ttlout4_rd_data),
  285. .signal_in(ttl_output_module_source_sig_af),
  286. .ttloutput(sync_ttl_out4),
  287. .ttloutput_state_led(sync_ttl_out4_state_led)
  288. );
  289. rd_data_router rd_data_router_inst (
  290. .addr(reg_reader_bus_addr),
  291. .stm32_rd_data(stm32_rd_data),
  292. .fpga_test_rd_data(fpga_test_rd_data),
  293. .control_sensor_rd_data(control_sensor_rd_data),
  294. .ttlin1_rd_data(ttlin1_rd_data),
  295. .ttlin2_rd_data(ttlin2_rd_data),
  296. .ttlin3_rd_data(ttlin3_rd_data),
  297. .ttlin4_rd_data(ttlin4_rd_data),
  298. .timecode_in_rd_data(timecode_in_rd_data),
  299. .genlock_in_rd_data(genlock_in_rd_data),
  300. .ttlout1_rd_data(ttlout1_rd_data), // ok
  301. .ttlout2_rd_data(ttlout2_rd_data), // ok
  302. .ttlout3_rd_data(ttlout3_rd_data), // ok
  303. .ttlout4_rd_data(ttlout4_rd_data), // ok
  304. .timecode_out_rd_data(timecode_out_rd_data),
  305. .genlock_out_rd_data(genlock_out_rd_data),
  306. .stm32_if_rd_data(stm32_if_rd_data),
  307. .debuger_rd_data(debuger_rd_data),
  308. .rd_data_out(reg_reader_bus_rd_data)
  309. );
  310. // assign reg_reader_bus_rd_data[31:0] = fpga_test_rd_data[31:0];
  311. assign debug_signal_output[0] = spi2_cs_pin;
  312. assign debug_signal_output[1] = spi2_clk_pin;
  313. assign debug_signal_output[2] = spi2_rx_pin;
  314. assign debug_signal_output[3] = spi2_tx_pin;
  315. assign debug_signal_output[4] = sync_ttl_out1;
  316. assign debug_signal_output[5] = sync_ttl_out2;
  317. assign debug_signal_output[6] = sync_ttl_out3;
  318. assign debug_signal_output[7] = sync_ttl_out4;
  319. assign core_board_debug_led = 1;
  320. endmodule