Compare commits
118 Commits
dev/ethern
...
dev/design
| Author | SHA1 | Date | |
|---|---|---|---|
| 64843b462d | |||
| c0714f271e | |||
| c165d346a0 | |||
| 753f4a2128 | |||
| 6155c6a9fb | |||
| bb65aea4f1 | |||
| 5d3b761b07 | |||
| d7e46445d8 | |||
| cacfe04061 | |||
| 4270c2fca8 | |||
| cf2985813a | |||
| f670df9b54 | |||
| 6542995930 | |||
| b0e886893b | |||
| d90167984a | |||
| 3a1d9c27e7 | |||
| c9aa2cde0f | |||
| ccd9964ada | |||
| 1a3b811e75 | |||
| 9c74fe91e8 | |||
| c8e11a2a1f | |||
| 0a68a753be | |||
| 906d5090cd | |||
| dc761f31dc | |||
| 10dc60b54f | |||
| 4f82a27cb7 | |||
| fc36390cfe | |||
| ba9dee9275 | |||
| 5b9469560a | |||
| 966704a4de | |||
| d8d89b3566 | |||
| 1504569fb6 | |||
| b2c92070a2 | |||
| 51d715a728 | |||
| 9efbd6586f | |||
| eacffd44b3 | |||
| 5c1866d571 | |||
| f9f4a10cdf | |||
| e6cb0e0f6e | |||
| dad163b6ac | |||
| 3a2d8eda2b | |||
| 78095ad9a1 | |||
| c77b54aec6 | |||
| 429cf3d085 | |||
| 7f6a3e03a1 | |||
| 66a15cd6e0 | |||
| f2a8d8a28e | |||
| ecb2ed3b7f | |||
| 2a928c2407 | |||
| bc0a1c8b66 | |||
| 9b72dfb8d9 | |||
| 8c4154baf0 | |||
| c279f1158d | |||
| 4fc354955c | |||
| 57570bea00 | |||
| 03d0abbe86 | |||
| d26bc29507 | |||
| e9c39ea344 | |||
| 7c3fe36df1 | |||
| f719533eb9 | |||
| 179347659b | |||
| 9fd311d671 | |||
| a018b3d215 | |||
| 138c5d7dce | |||
| 16cef61a88 | |||
| d68c22211d | |||
| b7409534ed | |||
| 3ea03fd40c | |||
| ea381320f3 | |||
| bd8dc9d0d3 | |||
| 2e22eb68df | |||
| d5c3ff873f | |||
| 5f1f4e5a16 | |||
| 4efc2f02a9 | |||
| 312bc0c798 | |||
| c4a7c21bea | |||
| e083cd5c2e | |||
| 264c9ecb8e | |||
| fc0e710b3e | |||
| 275055291e | |||
| 002f0cace5 | |||
| 91eaf6c4f8 | |||
| 9b189f931f | |||
| a8a3aff498 | |||
| b54e69dec0 | |||
| 7be26d9d1a | |||
| 3dcaaf8ea5 | |||
| dfccc01225 | |||
| 4eb937e13f | |||
| 21785aaac7 | |||
| 8e46f965df | |||
| 7f9ad95e68 | |||
| 4786d2d7f6 | |||
| 58500b7549 | |||
| 8b1e209da6 | |||
| 924f94986c | |||
| 83c714cd6f | |||
| f54883a9e7 | |||
| b9c75b823f | |||
| f863d09fb8 | |||
| 597be48407 | |||
| f98051bc53 | |||
| eea031c6c1 | |||
| 500b10b327 | |||
| 851851828e | |||
| 35e9feb87b | |||
| c41b08f539 | |||
| ea7af4ed62 | |||
| 6bb4f1efd8 | |||
| dcf93fb307 | |||
| 23f82b9445 | |||
| bdb75fa298 | |||
| 003750d972 | |||
| 966d0379b7 | |||
| 88db70ede8 | |||
| ad6d6a4e2b | |||
| 7a1c838de3 | |||
| 221cb055f1 |
16
.gitignore
vendored
16
.gitignore
vendored
@ -12,4 +12,18 @@
|
|||||||
*.log
|
*.log
|
||||||
*.rpt
|
*.rpt
|
||||||
*.dcp
|
*.dcp
|
||||||
.Xil
|
*.xpr
|
||||||
|
.Xil
|
||||||
|
xvlog.pb
|
||||||
|
*vivado_pid*
|
||||||
|
|
||||||
|
# some generated files (they annoy me)
|
||||||
|
update_config.tcl
|
||||||
|
create_project.tcl
|
||||||
|
gen_ip.tcl
|
||||||
|
defines.v
|
||||||
|
run_sim.tcl
|
||||||
|
*.bit
|
||||||
|
*.xsa
|
||||||
|
*.ltx
|
||||||
|
*.bin
|
||||||
@ -1,3 +1,10 @@
|
|||||||
# reflectometer_fpga_project
|
# reflectometer_fpga_project
|
||||||
|
|
||||||
Проект по разработке аппаратной вычислительной части для отпического рефлектометра для обнаружения утечек.
|
Проект по разработке аппаратной вычислительной части для оптического рефлектометра для обнаружения утечек.
|
||||||
|
|
||||||
|
## Структура
|
||||||
|
- constaints: констрейны под ПЛИСы
|
||||||
|
- designs: разные сборные дизайны, включая полный проект
|
||||||
|
- rtl: код блоков, в каждой папке есть src и tests
|
||||||
|
- scripts: скрипты для сборки
|
||||||
|
- software: программные скрипты
|
||||||
172
constraints/ax7102.xdc
Normal file
172
constraints/ax7102.xdc
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
# === iostandard ===
|
||||||
|
set_property CFGBVS VCCO [current_design]
|
||||||
|
set_property CONFIG_VOLTAGE 3.3 [current_design]
|
||||||
|
|
||||||
|
# === SPI flash config ===
|
||||||
|
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
|
||||||
|
set_property CONFIG_MODE SPIx4 [current_design]
|
||||||
|
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]
|
||||||
|
|
||||||
|
# === clock config ===
|
||||||
|
create_clock -period 5.000 [get_ports sys_clk_p]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports sys_clk_p]
|
||||||
|
set_property PACKAGE_PIN R4 [get_ports sys_clk_p]
|
||||||
|
set_property PACKAGE_PIN T4 [get_ports sys_clk_n]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports sys_clk_n]
|
||||||
|
|
||||||
|
# === reset button ===
|
||||||
|
set_property IOSTANDARD LVCMOS15 [get_ports rst_n]
|
||||||
|
set_property PACKAGE_PIN T6 [get_ports rst_n]
|
||||||
|
|
||||||
|
# === leds ===
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports {led[*]}]
|
||||||
|
set_property PACKAGE_PIN C17 [get_ports {led[0]}]
|
||||||
|
set_property PACKAGE_PIN D17 [get_ports {led[1]}]
|
||||||
|
set_property PACKAGE_PIN V20 [get_ports {led[2]}]
|
||||||
|
set_property PACKAGE_PIN U20 [get_ports {led[3]}]
|
||||||
|
|
||||||
|
# === 1Gb ethernet PHY ===
|
||||||
|
set_property PACKAGE_PIN V10 [get_ports e_mdio]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports e_mdio]
|
||||||
|
set_property PACKAGE_PIN W10 [get_ports e_mdc]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports e_mdc]
|
||||||
|
set_property PULLTYPE PULLUP [get_ports e_mdc]
|
||||||
|
set_property SLEW SLOW [get_ports e_mdio]
|
||||||
|
set_property PULLTYPE PULLUP [get_ports e_mdio]
|
||||||
|
# eth rx
|
||||||
|
create_clock -period 8.000 -name rx_clk [get_ports e_rxc]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports e_rxc]
|
||||||
|
set_property PACKAGE_PIN K18 [get_ports e_rxc]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports e_rxdv]
|
||||||
|
set_property PACKAGE_PIN M22 [get_ports e_rxdv]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports e_rxer]
|
||||||
|
set_property PACKAGE_PIN N19 [get_ports e_rxer]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports {e_rxd[*]}]
|
||||||
|
set_property PACKAGE_PIN N22 [get_ports {e_rxd[0]}]
|
||||||
|
set_property PACKAGE_PIN H18 [get_ports {e_rxd[1]}]
|
||||||
|
set_property PACKAGE_PIN H17 [get_ports {e_rxd[2]}]
|
||||||
|
set_property PACKAGE_PIN K19 [get_ports {e_rxd[3]}]
|
||||||
|
set_property PACKAGE_PIN M21 [get_ports {e_rxd[4]}]
|
||||||
|
set_property PACKAGE_PIN L21 [get_ports {e_rxd[5]}]
|
||||||
|
set_property PACKAGE_PIN N20 [get_ports {e_rxd[6]}]
|
||||||
|
set_property PACKAGE_PIN M20 [get_ports {e_rxd[7]}]
|
||||||
|
|
||||||
|
# eth tx
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports e_txc]
|
||||||
|
set_property PACKAGE_PIN J17 [get_ports e_txc]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports e_gtxc]
|
||||||
|
set_property PACKAGE_PIN L18 [get_ports e_gtxc]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports e_txen]
|
||||||
|
set_property PACKAGE_PIN M16 [get_ports e_txen]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports e_txer]
|
||||||
|
set_property PACKAGE_PIN M13 [get_ports e_txer]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports {e_txd[*]}]
|
||||||
|
set_property PACKAGE_PIN M15 [get_ports {e_txd[0]}]
|
||||||
|
set_property PACKAGE_PIN L14 [get_ports {e_txd[1]}]
|
||||||
|
set_property PACKAGE_PIN K16 [get_ports {e_txd[2]}]
|
||||||
|
set_property PACKAGE_PIN L16 [get_ports {e_txd[3]}]
|
||||||
|
set_property PACKAGE_PIN K17 [get_ports {e_txd[4]}]
|
||||||
|
set_property PACKAGE_PIN L20 [get_ports {e_txd[5]}]
|
||||||
|
set_property PACKAGE_PIN L19 [get_ports {e_txd[6]}]
|
||||||
|
set_property PACKAGE_PIN L13 [get_ports {e_txd[7]}]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports e_reset]
|
||||||
|
set_property PACKAGE_PIN L15 [get_ports e_reset]
|
||||||
|
|
||||||
|
create_clock -period 8.000 -name tx_clk [get_ports e_gtxc]
|
||||||
|
|
||||||
|
set_false_path -reset_path -from [get_clocks sys_clk_p] -to [get_clocks rx_clk]
|
||||||
|
|
||||||
|
# === ADC an9238 (J4 header) ===
|
||||||
|
set_property PACKAGE_PIN K14 [get_ports ch2_clk]
|
||||||
|
set_property PACKAGE_PIN K13 [get_ports {ch2_data[0]}]
|
||||||
|
set_property PACKAGE_PIN H14 [get_ports {ch2_data[1]}]
|
||||||
|
set_property PACKAGE_PIN J14 [get_ports {ch2_data[2]}]
|
||||||
|
set_property PACKAGE_PIN H15 [get_ports {ch2_data[3]}]
|
||||||
|
set_property PACKAGE_PIN J15 [get_ports {ch2_data[4]}]
|
||||||
|
set_property PACKAGE_PIN G13 [get_ports {ch2_data[5]}]
|
||||||
|
set_property PACKAGE_PIN H13 [get_ports {ch2_data[6]}]
|
||||||
|
set_property PACKAGE_PIN J21 [get_ports {ch2_data[7]}]
|
||||||
|
set_property PACKAGE_PIN J20 [get_ports {ch2_data[8]}]
|
||||||
|
set_property PACKAGE_PIN G16 [get_ports {ch2_data[9]}]
|
||||||
|
set_property PACKAGE_PIN G15 [get_ports {ch2_data[10]}]
|
||||||
|
set_property PACKAGE_PIN H19 [get_ports {ch2_data[11]}]
|
||||||
|
set_property PACKAGE_PIN J19 [get_ports ch2_otr]
|
||||||
|
|
||||||
|
set_property PACKAGE_PIN J16 [get_ports ch1_data[1]]
|
||||||
|
set_property PACKAGE_PIN F15 [get_ports ch1_data[0]]
|
||||||
|
set_property PACKAGE_PIN K22 [get_ports ch1_data[3]]
|
||||||
|
set_property PACKAGE_PIN K21 [get_ports ch1_data[2]]
|
||||||
|
set_property PACKAGE_PIN H22 [get_ports ch1_data[5]]
|
||||||
|
set_property PACKAGE_PIN J22 [get_ports ch1_data[4]]
|
||||||
|
set_property PACKAGE_PIN G20 [get_ports ch1_data[7]]
|
||||||
|
set_property PACKAGE_PIN H20 [get_ports ch1_data[6]]
|
||||||
|
set_property PACKAGE_PIN G22 [get_ports ch1_data[9]]
|
||||||
|
set_property PACKAGE_PIN G21 [get_ports ch1_data[8]]
|
||||||
|
set_property PACKAGE_PIN D22 [get_ports ch1_data[11]]
|
||||||
|
set_property PACKAGE_PIN E22 [get_ports ch1_data[10]]
|
||||||
|
set_property PACKAGE_PIN D21 [get_ports ch1_clk]
|
||||||
|
set_property PACKAGE_PIN E21 [get_ports ch1_otr]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports ch2_clk]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports {ch2_data[*]}]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports ch2_otr]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports {ch1_data[*]}]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports ch1_clk]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports ch1_otr]
|
||||||
|
|
||||||
|
set_property SLEW FAST [get_ports ch2_clk]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# === DAC an9767(J5 header) ===
|
||||||
|
set_property PACKAGE_PIN F13 [get_ports {da1_clk}]
|
||||||
|
set_property PACKAGE_PIN F14 [get_ports {da1_wrt}]
|
||||||
|
set_property PACKAGE_PIN AB15 [get_ports {da1_data[13]}]
|
||||||
|
set_property PACKAGE_PIN AA15 [get_ports {da1_data[12]}]
|
||||||
|
set_property PACKAGE_PIN AA14 [get_ports {da1_data[11]}]
|
||||||
|
set_property PACKAGE_PIN Y13 [get_ports {da1_data[10]}]
|
||||||
|
set_property PACKAGE_PIN AB17 [get_ports {da1_data[9]}]
|
||||||
|
set_property PACKAGE_PIN AB16 [get_ports {da1_data[8]}]
|
||||||
|
set_property PACKAGE_PIN AA16 [get_ports {da1_data[7]}]
|
||||||
|
set_property PACKAGE_PIN Y16 [get_ports {da1_data[6]}]
|
||||||
|
set_property PACKAGE_PIN AB12 [get_ports {da1_data[5]}]
|
||||||
|
set_property PACKAGE_PIN AB11 [get_ports {da1_data[4]}]
|
||||||
|
set_property PACKAGE_PIN Y14 [get_ports {da1_data[3]}]
|
||||||
|
set_property PACKAGE_PIN W14 [get_ports {da1_data[2]}]
|
||||||
|
set_property PACKAGE_PIN C19 [get_ports {da1_data[1]}]
|
||||||
|
set_property PACKAGE_PIN C18 [get_ports {da1_data[0]}]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports {da1_data[*]}]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports {da1_wrt}]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports {da1_clk}]
|
||||||
|
|
||||||
|
set_property PACKAGE_PIN E14 [get_ports da2_clk]
|
||||||
|
set_property PACKAGE_PIN E13 [get_ports da2_wrt]
|
||||||
|
set_property PACKAGE_PIN D15 [get_ports {da2_data[13]}]
|
||||||
|
set_property PACKAGE_PIN D14 [get_ports {da2_data[12]}]
|
||||||
|
set_property PACKAGE_PIN B13 [get_ports {da2_data[11]}]
|
||||||
|
set_property PACKAGE_PIN C13 [get_ports {da2_data[10]}]
|
||||||
|
set_property PACKAGE_PIN AB13 [get_ports {da2_data[9]}]
|
||||||
|
set_property PACKAGE_PIN AA13 [get_ports {da2_data[8]}]
|
||||||
|
set_property PACKAGE_PIN A19 [get_ports {da2_data[7]}]
|
||||||
|
set_property PACKAGE_PIN A18 [get_ports {da2_data[6]}]
|
||||||
|
set_property PACKAGE_PIN E18 [get_ports {da2_data[5]}]
|
||||||
|
set_property PACKAGE_PIN F18 [get_ports {da2_data[4]}]
|
||||||
|
set_property PACKAGE_PIN F20 [get_ports {da2_data[3]}]
|
||||||
|
set_property PACKAGE_PIN F19 [get_ports {da2_data[2]}]
|
||||||
|
set_property PACKAGE_PIN A20 [get_ports {da2_data[1]}]
|
||||||
|
set_property PACKAGE_PIN B20 [get_ports {da2_data[0]}]
|
||||||
|
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports da2_clk]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports da2_wrt]
|
||||||
|
set_property IOSTANDARD LVCMOS33 [get_ports {da2_data[*]}]
|
||||||
|
|
||||||
|
|
||||||
@ -58,20 +58,57 @@ set_property SLEW FAST [get_ports rgmii_txctl]
|
|||||||
set_property SLEW FAST [get_ports {rgmii_txd[*]}]
|
set_property SLEW FAST [get_ports {rgmii_txd[*]}]
|
||||||
create_clock -period 8.000 [get_ports rgmii_rxc]
|
create_clock -period 8.000 [get_ports rgmii_rxc]
|
||||||
|
|
||||||
|
# === DAC (J11 header) ===
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports p2_clk]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports p2_wrt]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[13]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[12]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[11]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[10]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[9]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[8]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[7]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[6]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[5]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[4]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[3]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[2]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[1]}]
|
||||||
|
#set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[0]}]
|
||||||
|
|
||||||
|
#set_property SLEW FAST [get_ports p2_clk]
|
||||||
|
|
||||||
|
#set_property PACKAGE_PIN C18 [get_ports p2_clk]
|
||||||
|
#set_property PACKAGE_PIN C19 [get_ports p2_wrt]
|
||||||
|
#set_property PACKAGE_PIN B17 [get_ports {p2_data[13]}]
|
||||||
|
#set_property PACKAGE_PIN B18 [get_ports {p2_data[12]}]
|
||||||
|
#set_property PACKAGE_PIN D17 [get_ports {p2_data[11]}]
|
||||||
|
#set_property PACKAGE_PIN C17 [get_ports {p2_data[10]}]
|
||||||
|
#set_property PACKAGE_PIN A15 [get_ports {p2_data[9]}]
|
||||||
|
#set_property PACKAGE_PIN A16 [get_ports {p2_data[8]}]
|
||||||
|
#set_property PACKAGE_PIN B15 [get_ports {p2_data[7]}]
|
||||||
|
#set_property PACKAGE_PIN B16 [get_ports {p2_data[6]}]
|
||||||
|
#set_property PACKAGE_PIN A13 [get_ports {p2_data[5]}]
|
||||||
|
#set_property PACKAGE_PIN A14 [get_ports {p2_data[4]}]
|
||||||
|
#set_property PACKAGE_PIN E16 [get_ports {p2_data[3]}]
|
||||||
|
#set_property PACKAGE_PIN D16 [get_ports {p2_data[2]}]
|
||||||
|
#set_property PACKAGE_PIN C14 [get_ports {p2_data[1]}]
|
||||||
|
#set_property PACKAGE_PIN C15 [get_ports {p2_data[0]}]
|
||||||
|
|
||||||
# === ADC an9238 (J11 header) ===
|
# === ADC an9238 (J11 header) ===
|
||||||
set_property PACKAGE_PIN G21 [get_ports ch2_clk]
|
set_property PACKAGE_PIN G21 [get_ports ch2_clk]
|
||||||
set_property PACKAGE_PIN G22 [get_ports ch2_data[0]]
|
set_property PACKAGE_PIN G22 [get_ports {ch2_data[0]}]
|
||||||
set_property PACKAGE_PIN C22 [get_ports ch2_data[1]]
|
set_property PACKAGE_PIN C22 [get_ports {ch2_data[1]}]
|
||||||
set_property PACKAGE_PIN B22 [get_ports ch2_data[2]]
|
set_property PACKAGE_PIN B22 [get_ports {ch2_data[2]}]
|
||||||
set_property PACKAGE_PIN F19 [get_ports ch2_data[3]]
|
set_property PACKAGE_PIN F19 [get_ports {ch2_data[3]}]
|
||||||
set_property PACKAGE_PIN F20 [get_ports ch2_data[4]]
|
set_property PACKAGE_PIN F20 [get_ports {ch2_data[4]}]
|
||||||
set_property PACKAGE_PIN D20 [get_ports ch2_data[5]]
|
set_property PACKAGE_PIN D20 [get_ports {ch2_data[5]}]
|
||||||
set_property PACKAGE_PIN C20 [get_ports ch2_data[6]]
|
set_property PACKAGE_PIN C20 [get_ports {ch2_data[6]}]
|
||||||
set_property PACKAGE_PIN A18 [get_ports ch2_data[7]]
|
set_property PACKAGE_PIN A18 [get_ports {ch2_data[7]}]
|
||||||
set_property PACKAGE_PIN A19 [get_ports ch2_data[8]]
|
set_property PACKAGE_PIN A19 [get_ports {ch2_data[8]}]
|
||||||
set_property PACKAGE_PIN B20 [get_ports ch2_data[9]]
|
set_property PACKAGE_PIN B20 [get_ports {ch2_data[9]}]
|
||||||
set_property PACKAGE_PIN A20 [get_ports ch2_data[10]]
|
set_property PACKAGE_PIN A20 [get_ports {ch2_data[10]}]
|
||||||
set_property PACKAGE_PIN F18 [get_ports ch2_data[11]]
|
set_property PACKAGE_PIN F18 [get_ports {ch2_data[11]}]
|
||||||
set_property PACKAGE_PIN E18 [get_ports ch2_otr]
|
set_property PACKAGE_PIN E18 [get_ports ch2_otr]
|
||||||
set_property PACKAGE_PIN C18 [get_ports ch1_data[1]]
|
set_property PACKAGE_PIN C18 [get_ports ch1_data[1]]
|
||||||
set_property PACKAGE_PIN C19 [get_ports ch1_data[0]]
|
set_property PACKAGE_PIN C19 [get_ports ch1_data[0]]
|
||||||
@ -95,30 +132,9 @@ set_property IOSTANDARD LVCMOS33 [get_ports {ch1_data[*]}]
|
|||||||
set_property IOSTANDARD LVCMOS33 [get_ports ch1_clk]
|
set_property IOSTANDARD LVCMOS33 [get_ports ch1_clk]
|
||||||
set_property IOSTANDARD LVCMOS33 [get_ports ch1_otr]
|
set_property IOSTANDARD LVCMOS33 [get_ports ch1_otr]
|
||||||
|
|
||||||
set_property SLEW FAST [get_ports {ch2_clk ch1_clk}]
|
# 1 bit DAC)))
|
||||||
|
set_property PACKAGE_PIN E17 [get_ports debug_dac]
|
||||||
# === DAC an9767 (J13 header) ===
|
set_property IOSTANDARD LVCMOS33 [get_ports debug_dac]
|
||||||
set_property PACKAGE_PIN AA9 [get_ports p2_clk]
|
|
||||||
set_property PACKAGE_PIN AB10 [get_ports p2_wrt]
|
|
||||||
set_property PACKAGE_PIN U16 [get_ports p2_data[13]]
|
|
||||||
set_property PACKAGE_PIN T16 [get_ports p2_data[12]]
|
|
||||||
set_property PACKAGE_PIN AA13 [get_ports p2_data[11]]
|
|
||||||
set_property PACKAGE_PIN AB13 [get_ports p2_data[10]]
|
|
||||||
set_property PACKAGE_PIN AB11 [get_ports p2_data[9]]
|
|
||||||
set_property PACKAGE_PIN AB12 [get_ports p2_data[8]]
|
|
||||||
set_property PACKAGE_PIN Y13 [get_ports p2_data[7]]
|
|
||||||
set_property PACKAGE_PIN AA14 [get_ports p2_data[6]]
|
|
||||||
set_property PACKAGE_PIN W14 [get_ports p2_data[5]]
|
|
||||||
set_property PACKAGE_PIN Y14 [get_ports p2_data[4]]
|
|
||||||
set_property PACKAGE_PIN Y16 [get_ports p2_data[3]]
|
|
||||||
set_property PACKAGE_PIN AA16 [get_ports p2_data[2]]
|
|
||||||
set_property PACKAGE_PIN AB16 [get_ports p2_data[1]]
|
|
||||||
set_property PACKAGE_PIN AB17 [get_ports p2_data[0]]
|
|
||||||
|
|
||||||
set_property IOSTANDARD LVCMOS33 [get_ports p2_clk]
|
|
||||||
set_property IOSTANDARD LVCMOS33 [get_ports p2_wrt]
|
|
||||||
set_property IOSTANDARD LVCMOS33 [get_ports {p2_data[*]}]
|
|
||||||
|
|
||||||
set_property SLEW FAST [get_ports {p2_clk}]
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
5
designs/README.md
Normal file
5
designs/README.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Директория с тестовыми проектами под ПЛИСу
|
||||||
|
|
||||||
|
- adc_dac_synchronizer: проект для тестирования и отладки связки сэмплер + контроллер + генератор, проверки синхронизации между импульсами.
|
||||||
|
- reflectometer_base: базовый проект рефлектометра без внешних интерфейсов, только I/O через AXI Stream.
|
||||||
|
- reflectometer_prototype: тестовый проект под AX7102 с управлением и отправкой данных по ethernet.
|
||||||
56
designs/adc_dac_synchoronizer/Makefile
Normal file
56
designs/adc_dac_synchoronizer/Makefile
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
#
|
||||||
|
# Copyright (c) 2025 FPGA Ninja, LLC
|
||||||
|
#
|
||||||
|
# Authors:
|
||||||
|
# - Alex Forencich
|
||||||
|
#
|
||||||
|
|
||||||
|
# FPGA settings
|
||||||
|
FPGA_PART = xc7a100tfgg484-2
|
||||||
|
FPGA_TOP = sync_top
|
||||||
|
FPGA_ARCH = artix7
|
||||||
|
|
||||||
|
RTL_DIR = ../../rtl
|
||||||
|
|
||||||
|
|
||||||
|
include ../../scripts/vivado.mk
|
||||||
|
|
||||||
|
|
||||||
|
SYN_FILES += $(sort $(shell find ../../rtl/sampler/src -type f -name '*.sv'))
|
||||||
|
SYN_FILES += $(sort $(shell find ../../rtl/generator/src -type f -name '*.sv'))
|
||||||
|
SYN_FILES += sync_top.sv
|
||||||
|
|
||||||
|
XCI_FILES += $(sort $(shell find ip/ -type f -name '*.xci'))
|
||||||
|
|
||||||
|
XDC_FILES += ../../constraints/ax7102.xdc
|
||||||
|
XDC_FILES += debug.xdc
|
||||||
|
|
||||||
|
SYN_FILES += tb_sync_top.sv
|
||||||
|
SIM_TOP = tb_top
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
program: $(PROJECT).bit
|
||||||
|
echo "open_hw_manager" > program.tcl
|
||||||
|
echo "connect_hw_server" >> program.tcl
|
||||||
|
echo "open_hw_target" >> program.tcl
|
||||||
|
echo "current_hw_device [lindex [get_hw_devices] 0]" >> program.tcl
|
||||||
|
echo "refresh_hw_device -update_hw_probes false [current_hw_device]" >> program.tcl
|
||||||
|
echo "set_property PROGRAM.FILE {$(PROJECT).bit} [current_hw_device]" >> program.tcl
|
||||||
|
echo "program_hw_devices [current_hw_device]" >> program.tcl
|
||||||
|
echo "exit" >> program.tcl
|
||||||
|
vivado -nojournal -nolog -mode batch -source program.tcl
|
||||||
|
|
||||||
|
$(PROJECT).mcs $(PROJECT).prm: $(PROJECT).bit
|
||||||
|
echo "write_cfgmem -force -format mcs -size 16 -interface SPIx4 -loadbit {up 0x0000000 $*.bit} -checksum -file $*.mcs" > generate_mcs.tcl
|
||||||
|
echo "exit" >> generate_mcs.tcl
|
||||||
|
vivado -nojournal -nolog -mode batch -source generate_mcs.tcl
|
||||||
|
mkdir -p rev
|
||||||
|
COUNT=100; \
|
||||||
|
while [ -e rev/$*_rev$$COUNT.bit ]; \
|
||||||
|
do COUNT=$$((COUNT+1)); done; \
|
||||||
|
COUNT=$$((COUNT-1)); \
|
||||||
|
for x in .mcs .prm; \
|
||||||
|
do cp $*$$x rev/$*_rev$$COUNT$$x; \
|
||||||
|
echo "Output: rev/$*_rev$$COUNT$$x"; done;
|
||||||
3
designs/adc_dac_synchoronizer/debug.xdc
Normal file
3
designs/adc_dac_synchoronizer/debug.xdc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Primary clocks
|
||||||
|
create_clock -name eth_clk -period 8.000 [get_ports dac_clk_in]
|
||||||
|
create_clock -name acc_clk -period 15.385 [get_ports adc_clk_in]
|
||||||
124
designs/adc_dac_synchoronizer/sync_top.sv
Normal file
124
designs/adc_dac_synchoronizer/sync_top.sv
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module sync_top
|
||||||
|
#(
|
||||||
|
parameter int unsigned DAC_DATA_WIDTH = 14, // DAC bit-width
|
||||||
|
parameter int unsigned ADC_DATA_WIDTH = 12, // ADC bit-width
|
||||||
|
parameter int unsigned PACK_FACTOR = 1, // number of ADC readings per transaction
|
||||||
|
parameter int unsigned PROCESS_MODE = 0, // representation format of ADC readings (0 - direct code, 1 - 2's completment)
|
||||||
|
parameter int unsigned ZERO_LEVEL = 0
|
||||||
|
)
|
||||||
|
(
|
||||||
|
input clk_adc,
|
||||||
|
input rst_adc,
|
||||||
|
input clk_dac,
|
||||||
|
input rst_dac,
|
||||||
|
input start,
|
||||||
|
input out_of_range,
|
||||||
|
input [31:0] pulse_width,
|
||||||
|
input [31:0] pulse_period,
|
||||||
|
input [DAC_DATA_WIDTH-1:0] pulse_height,
|
||||||
|
input [15:0] pulse_num, // DAC counter limit
|
||||||
|
input [31:0] smp_num, // ADC counter limit
|
||||||
|
output [ADC_DATA_WIDTH*PACK_FACTOR-1:0] m_axis_tdata,
|
||||||
|
output m_axis_tvalid
|
||||||
|
);
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Internal signals
|
||||||
|
//------------------------------------------------------------
|
||||||
|
wire dac_done, dac_request, adc_done, adc_request;
|
||||||
|
wire [DAC_DATA_WIDTH-1:0] dac_signal;
|
||||||
|
wire [ADC_DATA_WIDTH-1:0] adc_singnal;
|
||||||
|
generate
|
||||||
|
if (ADC_DATA_WIDTH > DAC_DATA_WIDTH) begin : g_pad_zeros
|
||||||
|
assign adc_singnal = { {(ADC_DATA_WIDTH - DAC_DATA_WIDTH){1'b0}}, dac_signal };
|
||||||
|
end
|
||||||
|
else begin : g_truncate
|
||||||
|
assign adc_singnal = dac_signal[ADC_DATA_WIDTH-1:0];
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// DAC -> ADC CDC
|
||||||
|
//------------------------------------------------------------
|
||||||
|
logic [2:0] stretch; // 125/65~=2. Чтобы поймать единичный импульс, растянем его во времени
|
||||||
|
logic [1:0] sync_DA;
|
||||||
|
wire dac_done_stretched;
|
||||||
|
|
||||||
|
always_ff @(posedge clk_dac or posedge rst_dac)
|
||||||
|
begin
|
||||||
|
if (rst_dac)
|
||||||
|
stretch <= 0;
|
||||||
|
else begin
|
||||||
|
stretch[0] <= dac_done;
|
||||||
|
stretch[1] <= stretch[0];
|
||||||
|
stretch[2] <= stretch[1];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assign dac_done_stretched = |stretch;
|
||||||
|
|
||||||
|
always_ff @(posedge clk_adc or posedge rst_adc) begin
|
||||||
|
if (rst_adc)
|
||||||
|
sync_DA <= 0;
|
||||||
|
else begin
|
||||||
|
sync_DA[0] <= dac_done_stretched;
|
||||||
|
sync_DA[1] <= sync_DA[0];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assign adc_request = sync_DA[1];
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// ADC -> DAC CDC
|
||||||
|
//------------------------------------------------------------
|
||||||
|
logic [1:0] sync_AD;
|
||||||
|
|
||||||
|
always_ff @(posedge clk_dac or posedge rst_dac) begin
|
||||||
|
if (rst_dac)
|
||||||
|
sync_AD <= 0;
|
||||||
|
else begin
|
||||||
|
sync_AD[0] <= adc_done;
|
||||||
|
sync_AD[1] <= sync_AD[0];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assign dac_request = sync_AD[1];
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Generator
|
||||||
|
//------------------------------------------------------------
|
||||||
|
generator #(
|
||||||
|
.DATA_WIDTH(DAC_DATA_WIDTH),
|
||||||
|
.ZERO_LEVEL(ZERO_LEVEL)
|
||||||
|
) generator_inst (
|
||||||
|
.clk_dac(clk_dac),
|
||||||
|
.rst(rst_dac),
|
||||||
|
.start(start),
|
||||||
|
.pulse_width(pulse_width),
|
||||||
|
.pulse_period(pulse_period),
|
||||||
|
.pulse_height(pulse_height),
|
||||||
|
.pulse_num(pulse_num),
|
||||||
|
.dac_out(dac_signal),
|
||||||
|
.request(dac_request),
|
||||||
|
.done(dac_done)
|
||||||
|
);
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Sampler
|
||||||
|
//------------------------------------------------------------
|
||||||
|
sampler #(
|
||||||
|
.DATA_WIDTH(ADC_DATA_WIDTH),
|
||||||
|
.PACK_FACTOR(PACK_FACTOR),
|
||||||
|
.PROCESS_MODE(PROCESS_MODE)
|
||||||
|
) sampler_inst (
|
||||||
|
.clk_in(clk_adc),
|
||||||
|
.rst(rst_adc),
|
||||||
|
.data_in(adc_singnal),
|
||||||
|
.out_of_range(out_of_range),
|
||||||
|
.smp_num(smp_num),
|
||||||
|
.m_axis_tdata(m_axis_tdata),
|
||||||
|
.m_axis_tvalid(m_axis_tvalid),
|
||||||
|
.request(adc_request),
|
||||||
|
.done(adc_done)
|
||||||
|
);
|
||||||
|
|
||||||
|
endmodule
|
||||||
308
designs/adc_dac_synchoronizer/tb_sync_top.sv
Normal file
308
designs/adc_dac_synchoronizer/tb_sync_top.sv
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module tb_top;
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Параметры
|
||||||
|
//------------------------------------------------------------
|
||||||
|
localparam DAC_DATA_WIDTH = 14;
|
||||||
|
localparam ADC_DATA_WIDTH = 12;
|
||||||
|
localparam PACK_FACTOR = 1;
|
||||||
|
localparam PROCESS_MODE = 0;
|
||||||
|
localparam LOGIC_ZERO_LEVEL = 0; // DAC -5V for logic zero
|
||||||
|
localparam VOLTAGE_ZERO_LEVEL = 2**(DAC_DATA_WIDTH-1); // DAC 0V for logic zero
|
||||||
|
localparam CLK_DAC_PERIOD = 8;
|
||||||
|
localparam CLK_ADC_PERIOD = 15.385;
|
||||||
|
|
||||||
|
localparam ZERO_LEVEL = LOGIC_ZERO_LEVEL; // "logic" VS "true"
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Тактовые сигналы и сброс
|
||||||
|
//------------------------------------------------------------
|
||||||
|
logic clk_dac;
|
||||||
|
logic rst_dac;
|
||||||
|
logic clk_adc;
|
||||||
|
logic rst_adc;
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Управление и конфиг
|
||||||
|
//------------------------------------------------------------
|
||||||
|
logic dac_start;
|
||||||
|
logic [31:0] pulse_width;
|
||||||
|
logic [31:0] pulse_period;
|
||||||
|
logic [DAC_DATA_WIDTH-1:0] pulse_height;
|
||||||
|
logic [15:0] pulse_num;
|
||||||
|
logic [31:0] smp_num;
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Входы
|
||||||
|
//------------------------------------------------------------
|
||||||
|
reg out_of_range;
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Выходы
|
||||||
|
//------------------------------------------------------------
|
||||||
|
wire [ADC_DATA_WIDTH*PACK_FACTOR-1:0] m_axis_tdata;
|
||||||
|
wire m_axis_tvalid;
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// DUT
|
||||||
|
//------------------------------------------------------------
|
||||||
|
sync_top #(
|
||||||
|
.DAC_DATA_WIDTH(DAC_DATA_WIDTH),
|
||||||
|
.ADC_DATA_WIDTH(ADC_DATA_WIDTH),
|
||||||
|
.PACK_FACTOR(PACK_FACTOR),
|
||||||
|
.PROCESS_MODE(PROCESS_MODE),
|
||||||
|
.ZERO_LEVEL(ZERO_LEVEL)
|
||||||
|
) dut (
|
||||||
|
.clk_adc(clk_adc),
|
||||||
|
.clk_dac(clk_dac),
|
||||||
|
.rst_adc(rst_adc),
|
||||||
|
.rst_dac(rst_dac),
|
||||||
|
.start(dac_start),
|
||||||
|
.pulse_width(pulse_width),
|
||||||
|
.pulse_period(pulse_period),
|
||||||
|
.pulse_height(pulse_height),
|
||||||
|
.pulse_num(pulse_num),
|
||||||
|
.smp_num(smp_num),
|
||||||
|
.m_axis_tdata(m_axis_tdata),
|
||||||
|
.m_axis_tvalid(m_axis_tvalid),
|
||||||
|
.out_of_range(out_of_range)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Тактовые сигналы
|
||||||
|
initial begin
|
||||||
|
clk_adc = 0;
|
||||||
|
forever #(CLK_ADC_PERIOD/2) clk_adc = ~clk_adc;
|
||||||
|
end
|
||||||
|
initial begin
|
||||||
|
clk_dac = 0;
|
||||||
|
forever #(CLK_DAC_PERIOD/2) clk_dac = ~clk_dac;
|
||||||
|
end
|
||||||
|
|
||||||
|
// === Таски для тестипрования ===
|
||||||
|
// Таска сброса DAC DUT
|
||||||
|
task automatic reset_dut_dac(
|
||||||
|
input int rst_duration // сколько тактов держать сброс
|
||||||
|
);
|
||||||
|
rst_dac <= 1;
|
||||||
|
repeat(rst_duration) @(posedge clk_dac);
|
||||||
|
rst_dac <= 0;
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Таска сброса ADC DUT
|
||||||
|
task automatic reset_dut_adc(
|
||||||
|
input int rst_duration // сколько тактов держать сброс
|
||||||
|
);
|
||||||
|
rst_adc <= 1;
|
||||||
|
repeat(rst_duration) @(posedge clk_adc);
|
||||||
|
rst_adc <= 0;
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Таска запуска DUT
|
||||||
|
task automatic start_dut(
|
||||||
|
input int start_duration // сколько тактов держать импульс
|
||||||
|
);
|
||||||
|
dac_start <= 1;
|
||||||
|
repeat(start_duration) @(posedge clk_dac);
|
||||||
|
dac_start <= 0;
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Таска конфигурации DUT
|
||||||
|
task automatic set_config(
|
||||||
|
input logic [31:0] w, // ширина импульса
|
||||||
|
input logic [31:0] p, // период импульса
|
||||||
|
input logic [15:0] n, // количество импульсов
|
||||||
|
input logic [DAC_DATA_WIDTH-1:0] h, // высота импульса
|
||||||
|
input logic [31:0] sn // число сэмплов
|
||||||
|
);
|
||||||
|
// Задаем конфигурационные регистры
|
||||||
|
@(posedge clk_dac);
|
||||||
|
pulse_width <= w;
|
||||||
|
pulse_period <= p;
|
||||||
|
pulse_num <= n;
|
||||||
|
pulse_height <= h;
|
||||||
|
smp_num <= sn;
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// // Таска проверки устойчивости к долгим управляющим импульсам
|
||||||
|
// task automatic check_impulses;
|
||||||
|
// // Локальные переменные для хранения случайных параметров
|
||||||
|
// int rand_start_duration;
|
||||||
|
// int rand_delay;
|
||||||
|
// int rand_ack;
|
||||||
|
// bit rand_first;
|
||||||
|
// int total_impulse_cycles = 0;
|
||||||
|
|
||||||
|
// int pulse_w = 11;
|
||||||
|
// int pulse_p = 31;
|
||||||
|
// int pulse_n = 5;
|
||||||
|
// int pulse_h = 1024;
|
||||||
|
|
||||||
|
// $display("[TB] -check_impulses- Check system stability under random latencies");
|
||||||
|
|
||||||
|
// // Установка конфигурации
|
||||||
|
// set_config(
|
||||||
|
// .w(pulse_w),
|
||||||
|
// .p(pulse_p),
|
||||||
|
// .n(pulse_n),
|
||||||
|
// .h(pulse_h)
|
||||||
|
// );
|
||||||
|
|
||||||
|
// reset_dut(5);
|
||||||
|
// repeat(2) @(posedge clk);
|
||||||
|
|
||||||
|
// // Старт норме 1 такт. Сделаем случайным от 5 до 25 тактов.
|
||||||
|
// rand_start_duration = $urandom_range(5, 25);
|
||||||
|
// $display("[TB] Long start: %0d clocks", rand_start_duration);
|
||||||
|
|
||||||
|
// // Фоновый процесс подсчета тактов импульса
|
||||||
|
// fork
|
||||||
|
// begin : counter_proc
|
||||||
|
// forever begin
|
||||||
|
// @(negedge clk); // 180 deg. phase shift for "DAC strobing signal"
|
||||||
|
// if (dac_out == pulse_h) begin
|
||||||
|
// total_impulse_cycles++;
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
// join_none
|
||||||
|
|
||||||
|
// // Параллельный запуск длинного старта и обработки синхронизации
|
||||||
|
// fork
|
||||||
|
// // Поток 1: Удерживаем старт аномально долго
|
||||||
|
// begin
|
||||||
|
// start_dut(rand_start_duration);
|
||||||
|
// end
|
||||||
|
// // Поток 2: Обслуживаем n=4 циклов синхронизации со случайными задержками
|
||||||
|
// begin
|
||||||
|
// repeat(pulse_n) begin
|
||||||
|
// // Рандомизируем параметры для каждого из 4-х рукопожатий
|
||||||
|
// rand_first = $urandom; // Случайно: Самплер первый (1) или Генератор первый (0)
|
||||||
|
// rand_delay = $urandom_range(1, 8); // Случайная задержка ожидания (1..8 тактов)
|
||||||
|
// rand_ack = $urandom_range(5, 10); // Аномально долгий удерживаемый импульс sampler_done (10..30 тактов)
|
||||||
|
|
||||||
|
// synchronize(
|
||||||
|
// .sampler_first(rand_first),
|
||||||
|
// .delay_before_ack(rand_delay),
|
||||||
|
// .ack_duration(rand_ack)
|
||||||
|
// );
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
// join
|
||||||
|
// repeat(pulse_p+5) @(posedge clk);
|
||||||
|
// disable counter_proc;
|
||||||
|
// // Ожидание завершения переходных процессов
|
||||||
|
// repeat(10) @(posedge clk);
|
||||||
|
// if (total_impulse_cycles == pulse_w*pulse_n)
|
||||||
|
// $display("[TB] -check_impulses- Pulse generation CORRECT");
|
||||||
|
// else begin
|
||||||
|
// $display("[ERROR] -check_impulses- Pulse generation INCORRECT. Total number of pulses: %d, must be: %d", total_impulse_cycles, pulse_w*pulse_n);
|
||||||
|
// $finish;
|
||||||
|
// end
|
||||||
|
// $display("[TB] -check_impulses- Done");
|
||||||
|
// endtask
|
||||||
|
|
||||||
|
// task automatic run_test_case(
|
||||||
|
// input int pulse_w,
|
||||||
|
// input int pulse_p,
|
||||||
|
// input int pulse_n,
|
||||||
|
// input int pulse_h,
|
||||||
|
// input bit skip_reset, // skip reset sequence on demand
|
||||||
|
// input bit count_level // count ticks of amplitude == pulse_h or amplitude != pulse_h
|
||||||
|
// );
|
||||||
|
// int total_impulse_cycles = 0;
|
||||||
|
|
||||||
|
// if (!skip_reset) begin
|
||||||
|
// reset_dut(1);
|
||||||
|
// @(posedge clk);
|
||||||
|
// end
|
||||||
|
|
||||||
|
// set_config(
|
||||||
|
// .w(pulse_w),
|
||||||
|
// .p(pulse_p),
|
||||||
|
// .n(pulse_n),
|
||||||
|
// .h(pulse_h)
|
||||||
|
// );
|
||||||
|
// @(posedge clk);
|
||||||
|
|
||||||
|
// start_dut(1);
|
||||||
|
|
||||||
|
// // Фоновый процесс подсчета тактов импульса
|
||||||
|
// fork
|
||||||
|
// begin : counter_proc
|
||||||
|
// forever begin
|
||||||
|
// @(negedge clk); // 180 deg. phase shift for "DAC strobing signal"
|
||||||
|
// if (count_level) begin
|
||||||
|
// if (dac_out == pulse_h) begin
|
||||||
|
// total_impulse_cycles++;
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
// else begin
|
||||||
|
// if (dac_out != current_zero_level) begin
|
||||||
|
// total_impulse_cycles++;
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
// join_none
|
||||||
|
|
||||||
|
// repeat(pulse_n) begin
|
||||||
|
// synchronize(
|
||||||
|
// .sampler_first(0),
|
||||||
|
// .delay_before_ack(1),
|
||||||
|
// .ack_duration(2)
|
||||||
|
// );
|
||||||
|
// end
|
||||||
|
// repeat(pulse_p+5) @(posedge clk);
|
||||||
|
// disable counter_proc;
|
||||||
|
// repeat(10) @(posedge clk);
|
||||||
|
|
||||||
|
// if (count_level) begin
|
||||||
|
// if (total_impulse_cycles == pulse_w*pulse_n)
|
||||||
|
// $display("[TB] -run_test_case- Pulse generation CORRECT");
|
||||||
|
// else begin
|
||||||
|
// $display("[ERROR] -run_test_case- Pulse generation INCORRECT. Total number of pulses: %d, must be: %d", total_impulse_cycles, pulse_w*pulse_n);
|
||||||
|
// $finish;
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
// else begin
|
||||||
|
// if (total_impulse_cycles == 0)
|
||||||
|
// $display("[TB] -run_test_case- Pulse generation CORRECT");
|
||||||
|
// else begin
|
||||||
|
// $display("[ERROR] -run_test_case- Pulse generation INCORRECT. Total number of pulses: %d, must be: %d", total_impulse_cycles, 0);
|
||||||
|
// $finish;
|
||||||
|
// end
|
||||||
|
// end
|
||||||
|
// endtask
|
||||||
|
|
||||||
|
// --- ОСНОВНОЙ ПРОЦЕСС ТЕСТИРОВАНИЯ ---
|
||||||
|
initial begin
|
||||||
|
$display("[TB] Tests start");
|
||||||
|
|
||||||
|
// Инициализация
|
||||||
|
dac_start = 0;
|
||||||
|
pulse_width = 0;
|
||||||
|
pulse_period = 0;
|
||||||
|
pulse_height = 0;
|
||||||
|
pulse_num = 0;
|
||||||
|
smp_num = 0;
|
||||||
|
out_of_range = 0;
|
||||||
|
fork
|
||||||
|
reset_dut_adc(3);
|
||||||
|
reset_dut_dac(6);
|
||||||
|
join
|
||||||
|
@(posedge clk_dac);
|
||||||
|
@(posedge clk_adc);
|
||||||
|
set_config(
|
||||||
|
.w(50),
|
||||||
|
.p(125),
|
||||||
|
.n(5),
|
||||||
|
.h(1024),
|
||||||
|
.sn(65)
|
||||||
|
);
|
||||||
|
start_dut(1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$display("[TB] ALL PASSED");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
53
designs/reflectometer_base/Makefile
Normal file
53
designs/reflectometer_base/Makefile
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
#
|
||||||
|
# Copyright (c) 2025 FPGA Ninja, LLC
|
||||||
|
#
|
||||||
|
# Authors:
|
||||||
|
# - Alex Forencich
|
||||||
|
#
|
||||||
|
|
||||||
|
# FPGA settings
|
||||||
|
FPGA_PART = xc7a100tfgg484-2
|
||||||
|
FPGA_TOP = reflectometer_top
|
||||||
|
FPGA_ARCH = artix7
|
||||||
|
|
||||||
|
RTL_DIR = ../../rtl
|
||||||
|
|
||||||
|
|
||||||
|
include ../../scripts/vivado.mk
|
||||||
|
|
||||||
|
SYN_FILES += reflectometer.sv
|
||||||
|
SYN_FILES += tb_reflectometer.sv
|
||||||
|
SYN_FILES += $(sort $(shell find ../../rtl -type f \( -name '*.v' -o -name '*.sv' \)))
|
||||||
|
|
||||||
|
XCI_FILES = $(sort $(shell find ../../rtl/ethernet-udp/src -type f -name '*.xci'))
|
||||||
|
XCI_FILES += $(sort $(shell find ip/ -type f -name '*.xci'))
|
||||||
|
|
||||||
|
XDC_FILES += ../../constraints/ax7102.xdc
|
||||||
|
XDC_FILES += debug.xdc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
program: $(PROJECT).bit
|
||||||
|
echo "open_hw_manager" > program.tcl
|
||||||
|
echo "connect_hw_server" >> program.tcl
|
||||||
|
echo "open_hw_target" >> program.tcl
|
||||||
|
echo "current_hw_device [lindex [get_hw_devices] 0]" >> program.tcl
|
||||||
|
echo "refresh_hw_device -update_hw_probes false [current_hw_device]" >> program.tcl
|
||||||
|
echo "set_property PROGRAM.FILE {$(PROJECT).bit} [current_hw_device]" >> program.tcl
|
||||||
|
echo "program_hw_devices [current_hw_device]" >> program.tcl
|
||||||
|
echo "exit" >> program.tcl
|
||||||
|
vivado -nojournal -nolog -mode batch -source program.tcl
|
||||||
|
|
||||||
|
$(PROJECT).mcs $(PROJECT).prm: $(PROJECT).bit
|
||||||
|
echo "write_cfgmem -force -format mcs -size 16 -interface SPIx4 -loadbit {up 0x0000000 $*.bit} -checksum -file $*.mcs" > generate_mcs.tcl
|
||||||
|
echo "exit" >> generate_mcs.tcl
|
||||||
|
vivado -nojournal -nolog -mode batch -source generate_mcs.tcl
|
||||||
|
mkdir -p rev
|
||||||
|
COUNT=100; \
|
||||||
|
while [ -e rev/$*_rev$$COUNT.bit ]; \
|
||||||
|
do COUNT=$$((COUNT+1)); done; \
|
||||||
|
COUNT=$$((COUNT-1)); \
|
||||||
|
for x in .mcs .prm; \
|
||||||
|
do cp $*$$x rev/$*_rev$$COUNT$$x; \
|
||||||
|
echo "Output: rev/$*_rev$$COUNT$$x"; done;
|
||||||
145
designs/reflectometer_base/README.md
Normal file
145
designs/reflectometer_base/README.md
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
# Рефлектометр
|
||||||
|
|
||||||
|
Модуль представляет собой законченную встраиваемую систему рефлектометра, объединяющую:
|
||||||
|
|
||||||
|
- контроллер управления
|
||||||
|
- генератор импульсов (DAC path)
|
||||||
|
- сэмплер данных (ADC path)
|
||||||
|
- аккумулятор и обработчик данных
|
||||||
|
|
||||||
|
Система предназначена для формирования импульсов, синхронного сбора отраженного сигнала, накопления результатов и передачи обработанных данных во внешнюю систему.
|
||||||
|
|
||||||
|
Данный модуль является полноценным интегрируемым блоком, который может использоваться как самостоятельная аппаратная подсистема внутри более крупного проекта.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Назначение системы
|
||||||
|
|
||||||
|
Основная задача системы:
|
||||||
|
|
||||||
|
1. Получить параметры измерения через AXI Stream
|
||||||
|
2. Сформировать последовательность импульсов на DAC
|
||||||
|
3. Выполнить синходную выборку данных с ADC
|
||||||
|
4. Накопить и обработать результаты
|
||||||
|
5. Передать итоговые данные обратно через AXI Stream
|
||||||
|
|
||||||
|
Таким образом реализуется полный цикл измерения без необходимости внешнего управления отдельными блоками.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Состав системы
|
||||||
|
|
||||||
|
### Controller
|
||||||
|
|
||||||
|
Принимает входные команды по AXI Stream (Ethernet RX), декодирует параметры измерения и управляет всеми внутренними модулями системы.
|
||||||
|
|
||||||
|
Формирует:
|
||||||
|
|
||||||
|
- запуск генератора (`dac_start`)
|
||||||
|
- запуск аккумулятора (`adc_start`)
|
||||||
|
- параметры импульсов DAC
|
||||||
|
- параметры выборки ADC
|
||||||
|
- локальные reset-сигналы
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Generator
|
||||||
|
|
||||||
|
Формирует последовательность импульсов на DAC с заданными:
|
||||||
|
|
||||||
|
- амплитудой
|
||||||
|
- длительностью
|
||||||
|
- периодом
|
||||||
|
- количеством повторений
|
||||||
|
|
||||||
|
Для каждого импульса инициирует запуск выборки в сэмплере.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Sampler
|
||||||
|
|
||||||
|
Выполняет синхронный сбор данных с ADC по запросу генератора.
|
||||||
|
|
||||||
|
Поддерживает:
|
||||||
|
|
||||||
|
- фильтрацию `out_of_range`
|
||||||
|
- упаковку данных
|
||||||
|
- преобразование типа кода ( прямой или дополнительный)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Accumulator
|
||||||
|
|
||||||
|
Получает поток данных от сэмплера, выполняет накопление, усреднение и оконную обработку, после чего формирует пакеты для передачи результата.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Управление системой
|
||||||
|
|
||||||
|
Пользователь взаимодействует только с контроллером через AXI Stream-интерфейс.
|
||||||
|
|
||||||
|
Прямое управление генератором, сэмплером и аккумулятором не требуется.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Clock Domain Crossing (CDC)
|
||||||
|
|
||||||
|
Система работает в нескольких тактовых доменах:
|
||||||
|
|
||||||
|
- Ethernet RX (`gmii_rx_clk`)
|
||||||
|
- Ethernet TX (`gmii_tx_clk`)
|
||||||
|
- DAC (`dac_clk`)
|
||||||
|
- ADC (`adc_clk`)
|
||||||
|
|
||||||
|
Для корректной синхронизации между DAC и ADC используются специальные CDC-регистры для сигналов:
|
||||||
|
|
||||||
|
- `sample_req`
|
||||||
|
- `sample_done`
|
||||||
|
|
||||||
|
Это обеспечивает безопасную передачу handshake-сигналов между тактовыми доменами.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Список параметров
|
||||||
|
|
||||||
|
### DAC_DATA_WIDTH
|
||||||
|
Ширина выходных данных отправляемых на ЦАП.
|
||||||
|
|
||||||
|
### ZERO_LEVEL
|
||||||
|
Уровень сигнала в состоянии отсутствия импульса (базовый уровень сигнала).
|
||||||
|
|
||||||
|
Типовые значения:
|
||||||
|
|
||||||
|
- `8192` — середина диапазона ЦАП
|
||||||
|
- `0` — нулевой уровень
|
||||||
|
|
||||||
|
### ADC_DATA_WIDTH
|
||||||
|
Ширина входных данных, получаемых с АЦП.
|
||||||
|
|
||||||
|
### PACK_FACTOR
|
||||||
|
Количество отсчетов, собираемых в один выходной пакет.
|
||||||
|
|
||||||
|
### PROCESS_MODE
|
||||||
|
Режим интерпретации входного кода:
|
||||||
|
|
||||||
|
- `0` — прямой код
|
||||||
|
- `1` — дополнительный код
|
||||||
|
|
||||||
|
### ACCUM_WIDTH
|
||||||
|
Размер данных для аккумуляции, должен быть степенью числа 2. По умолчанию - 32
|
||||||
|
|
||||||
|
### N_MAX
|
||||||
|
Максимальное число окон в последовательности. Должно быть степенью числа 2. Влияет на размер используемой памяти.
|
||||||
|
|
||||||
|
### WINDOW_SIZE
|
||||||
|
Размер окна усреднения
|
||||||
|
|
||||||
|
### PACKET_SIZE
|
||||||
|
Размер выходного пакета
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Сборка
|
||||||
|
```make all``` - собрать все до битстрима
|
||||||
|
|
||||||
|
```make vivado``` - открыть проект в Vivado
|
||||||
1
designs/reflectometer_base/debug.xdc
Normal file
1
designs/reflectometer_base/debug.xdc
Normal file
@ -0,0 +1 @@
|
|||||||
|
set_clock_groups -name ASYNC_UDP_CTRL -asynchronous -group [get_clocks rgmii_rxc] -group [get_clocks clk_out1_clk_wiz_ctrl_inst] -group [get_clocks clk_out2_clk_wiz_ctrl_inst]
|
||||||
689
designs/reflectometer_base/ip/clk_wiz_ctrl_inst.xci
Normal file
689
designs/reflectometer_base/ip/clk_wiz_ctrl_inst.xci
Normal file
@ -0,0 +1,689 @@
|
|||||||
|
{
|
||||||
|
"schema": "xilinx.com:schema:json_instance:1.0",
|
||||||
|
"ip_inst": {
|
||||||
|
"xci_name": "clk_wiz_ctrl_inst",
|
||||||
|
"component_reference": "xilinx.com:ip:clk_wiz:6.0",
|
||||||
|
"ip_revision": "16",
|
||||||
|
"gen_directory": "../../../../eth_generator_top.gen/sources_1/ip/clk_wiz_ctrl_inst",
|
||||||
|
"parameters": {
|
||||||
|
"component_parameters": {
|
||||||
|
"Component_Name": [ { "value": "clk_wiz_ctrl_inst", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USER_CLK_FREQ0": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"USER_CLK_FREQ1": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"USER_CLK_FREQ2": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"USER_CLK_FREQ3": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"ENABLE_CLOCK_MONITOR": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"OPTIMIZE_CLOCKING_STRUCTURE_EN": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"ENABLE_USER_CLOCK0": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"ENABLE_USER_CLOCK1": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"ENABLE_USER_CLOCK2": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"ENABLE_USER_CLOCK3": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"Enable_PLL0": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"Enable_PLL1": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"REF_CLK_FREQ": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PRECISION": [ { "value": "1", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PRIMITIVE": [ { "value": "MMCM", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PRIMTYPE_SEL": [ { "value": "mmcm_adv", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLOCK_MGR_TYPE": [ { "value": "auto", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USE_FREQ_SYNTH": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_SPREAD_SPECTRUM": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_PHASE_ALIGNMENT": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_MIN_POWER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_DYN_PHASE_SHIFT": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_DYN_RECONFIG": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"JITTER_SEL": [ { "value": "No_Jitter", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PRIM_IN_FREQ": [ { "value": "200.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PRIM_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"IN_FREQ_UNITS": [ { "value": "Units_MHz", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PHASESHIFT_MODE": [ { "value": "WAVEFORM", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"IN_JITTER_UNITS": [ { "value": "Units_UI", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"RELATIVE_INCLK": [ { "value": "REL_PRIMARY", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USE_INCLK_SWITCHOVER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"SECONDARY_IN_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"SECONDARY_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"SECONDARY_PORT": [ { "value": "clk_in2", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"SECONDARY_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"JITTER_OPTIONS": [ { "value": "UI", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKIN1_UI_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKIN2_UI_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PRIM_IN_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"SECONDARY_IN_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKIN1_JITTER_PS": [ { "value": "50.0", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKIN2_JITTER_PS": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT1_USED": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT2_USED": [ { "value": "true", "value_src": "user", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT3_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT4_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT5_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT6_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT7_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"NUM_OUT_CLKS": [ { "value": "2", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLK_OUT1_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT2_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT3_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT4_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT5_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT6_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT7_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"PRIMARY_PORT": [ { "value": "clk_in1", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT1_PORT": [ { "value": "clk_out1", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT2_PORT": [ { "value": "clk_out2", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT3_PORT": [ { "value": "clk_out3", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT4_PORT": [ { "value": "clk_out4", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT5_PORT": [ { "value": "clk_out5", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT6_PORT": [ { "value": "clk_out6", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT7_PORT": [ { "value": "clk_out7", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DADDR_PORT": [ { "value": "daddr", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DCLK_PORT": [ { "value": "dclk", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DRDY_PORT": [ { "value": "drdy", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DWE_PORT": [ { "value": "dwe", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DIN_PORT": [ { "value": "din", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DOUT_PORT": [ { "value": "dout", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DEN_PORT": [ { "value": "den", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PSCLK_PORT": [ { "value": "psclk", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PSEN_PORT": [ { "value": "psen", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PSINCDEC_PORT": [ { "value": "psincdec", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PSDONE_PORT": [ { "value": "psdone", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT1_REQUESTED_OUT_FREQ": [ { "value": "125", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT1_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT1_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "65.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT2_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT2_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT3_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT3_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT3_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT4_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT4_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT4_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT5_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT5_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT5_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT6_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT6_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT6_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT7_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT7_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT7_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"USE_MAX_I_JITTER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_MIN_O_JITTER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT1_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT2_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT3_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT4_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT5_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT6_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT7_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"PRIM_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT1_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT2_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT3_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT4_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT5_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT6_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT7_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"FEEDBACK_SOURCE": [ { "value": "FDBK_AUTO", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_IN_SIGNALING": [ { "value": "SINGLE", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_IN_PORT": [ { "value": "clkfb_in", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_IN_P_PORT": [ { "value": "clkfb_in_p", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_IN_N_PORT": [ { "value": "clkfb_in_n", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_OUT_PORT": [ { "value": "clkfb_out", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_OUT_P_PORT": [ { "value": "clkfb_out_p", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_OUT_N_PORT": [ { "value": "clkfb_out_n", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PLATFORM": [ { "value": "UNKNOWN", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"SUMMARY_STRINGS": [ { "value": "empty", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USE_LOCKED": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CALC_DONE": [ { "value": "empty", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USE_RESET": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_POWER_DOWN": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_STATUS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_FREEZE": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_CLK_VALID": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_INCLK_STOPPED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_CLKFB_STOPPED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"RESET_PORT": [ { "value": "reset", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"LOCKED_PORT": [ { "value": "locked", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"POWER_DOWN_PORT": [ { "value": "power_down", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_VALID_PORT": [ { "value": "CLK_VALID", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"STATUS_PORT": [ { "value": "STATUS", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_IN_SEL_PORT": [ { "value": "clk_in_sel", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"INPUT_CLK_STOPPED_PORT": [ { "value": "input_clk_stopped", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_STOPPED_PORT": [ { "value": "clkfb_stopped", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"SS_MODE": [ { "value": "CENTER_HIGH", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"SS_MOD_FREQ": [ { "value": "250", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"SS_MOD_TIME": [ { "value": "0.004", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"OVERRIDE_MMCM": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_NOTES": [ { "value": "None", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"MMCM_DIVCLK_DIVIDE": [ { "value": "4", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"MMCM_CLKFBOUT_MULT_F": [ { "value": "16.875", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKFBOUT_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKIN1_PERIOD": [ { "value": "5.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKIN2_PERIOD": [ { "value": "10.0", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT4_CASCADE": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLOCK_HOLD": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_COMPENSATION": [ { "value": "ZHOLD", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"MMCM_REF_JITTER1": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_REF_JITTER2": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_STARTUP_WAIT": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT0_DIVIDE_F": [ { "value": "6.750", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT0_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT1_DIVIDE": [ { "value": "13", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT1_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT2_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT3_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT4_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT5_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT6_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT6_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT6_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT6_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"OVERRIDE_PLL": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"PLL_NOTES": [ { "value": "None", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PLL_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PLL_CLKFBOUT_MULT": [ { "value": "4", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLK_FEEDBACK": [ { "value": "CLKFBOUT", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PLL_DIVCLK_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKIN_PERIOD": [ { "value": "10.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_COMPENSATION": [ { "value": "SYSTEM_SYNCHRONOUS", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PLL_REF_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT0_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT1_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"RESET_TYPE": [ { "value": "ACTIVE_HIGH", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USE_SAFE_CLOCK_STARTUP": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_CLOCK_SEQUENCING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT1_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT2_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT3_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT4_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT5_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT6_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT7_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"USE_BOARD_FLOW": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_IN1_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_IN2_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DIFF_CLK_IN1_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DIFF_CLK_IN2_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"AUTO_PRIMITIVE": [ { "value": "MMCM", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"RESET_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"ENABLE_CDDC": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CDDCDONE_PORT": [ { "value": "cddcdone", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CDDCREQ_PORT": [ { "value": "cddcreq", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"ENABLE_CLKOUTPHY": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUTPHY_REQUESTED_FREQ": [ { "value": "600.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT1_JITTER": [ { "value": "162.582", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT1_PHASE_ERROR": [ { "value": "137.238", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT2_JITTER": [ { "value": "185.296", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT2_PHASE_ERROR": [ { "value": "137.238", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT3_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT3_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT4_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT4_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT5_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT5_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT6_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT6_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT7_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT7_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"INPUT_MODE": [ { "value": "frequency", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"INTERFACE_SELECTION": [ { "value": "Enable_AXI", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"AXI_DRP": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"PHASE_DUTY_CONFIG": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ]
|
||||||
|
},
|
||||||
|
"model_parameters": {
|
||||||
|
"C_CLKOUT2_USED": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USER_CLK_FREQ0": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_AUTO_PRIMITIVE": [ { "value": "MMCM", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_USER_CLK_FREQ1": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_USER_CLK_FREQ2": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_USER_CLK_FREQ3": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_ENABLE_CLOCK_MONITOR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_ENABLE_USER_CLOCK0": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_ENABLE_USER_CLOCK1": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_ENABLE_USER_CLOCK2": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_ENABLE_USER_CLOCK3": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_Enable_PLL0": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_Enable_PLL1": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_REF_CLK_FREQ": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PRECISION": [ { "value": "1", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLKOUT1_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLKOUT2_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLKOUT3_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLKOUT4_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"c_component_name": [ { "value": "clk_wiz_ctrl_inst", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLATFORM": [ { "value": "UNKNOWN", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_USE_FREQ_SYNTH": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_PHASE_ALIGNMENT": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PRIM_IN_JITTER": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_SECONDARY_IN_JITTER": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_JITTER_SEL": [ { "value": "No_Jitter", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_USE_MIN_POWER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_MIN_O_JITTER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_MAX_I_JITTER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_DYN_PHASE_SHIFT": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_OPTIMIZE_CLOCKING_STRUCTURE_EN": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_INCLK_SWITCHOVER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_DYN_RECONFIG": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_SPREAD_SPECTRUM": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_FAST_SIMULATION": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PRIMTYPE_SEL": [ { "value": "AUTO", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_USE_CLK_VALID": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PRIM_IN_FREQ": [ { "value": "200.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PRIM_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_IN_FREQ_UNITS": [ { "value": "Units_MHz", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_SECONDARY_IN_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_SECONDARY_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_FEEDBACK_SOURCE": [ { "value": "FDBK_AUTO", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PRIM_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PHASESHIFT_MODE": [ { "value": "WAVEFORM", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_SECONDARY_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_IN_SIGNALING": [ { "value": "SINGLE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_USE_RESET": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_RESET_LOW": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_LOCKED": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_INCLK_STOPPED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLKFB_STOPPED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_POWER_DOWN": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_STATUS": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_FREEZE": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_NUM_OUT_CLKS": [ { "value": "2", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_INCLK_SUM_ROW0": [ { "value": "Input Clock Freq (MHz) Input Jitter (UI)", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_INCLK_SUM_ROW1": [ { "value": "__primary_________200.000____________0.010", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_INCLK_SUM_ROW2": [ { "value": "no_secondary_input_clock ", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW0A": [ { "value": " Output Output Phase Duty Cycle Pk-to-Pk Phase", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW0B": [ { "value": " Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW1": [ { "value": "clk_out1__125.00000______0.000______50.0______162.582____137.238", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW2": [ { "value": "clk_out2__64.90385______0.000______50.0______185.296____137.238", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW3": [ { "value": "no_CLK_OUT3_output", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW4": [ { "value": "no_CLK_OUT4_output", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW5": [ { "value": "no_CLK_OUT5_output", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW6": [ { "value": "no_CLK_OUT6_output", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW7": [ { "value": "no_CLK_OUT7_output", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_REQUESTED_OUT_FREQ": [ { "value": "125", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "65.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_OUT_FREQ": [ { "value": "125.00000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_OUT_FREQ": [ { "value": "64.90385", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_DUTY_CYCLE": [ { "value": "50.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_DUTY_CYCLE": [ { "value": "50.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_USE_SAFE_CLOCK_STARTUP": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLOCK_SEQUENCING": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_NOTES": [ { "value": "None", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKFBOUT_MULT_F": [ { "value": "16.875", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKIN1_PERIOD": [ { "value": "5.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKIN2_PERIOD": [ { "value": "10.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT4_CASCADE": [ { "value": "FALSE", "resolve_type": "generated", "format": "bool", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLOCK_HOLD": [ { "value": "FALSE", "resolve_type": "generated", "format": "bool", "usage": "all" } ],
|
||||||
|
"C_MMCM_COMPENSATION": [ { "value": "ZHOLD", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_DIVCLK_DIVIDE": [ { "value": "4", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_REF_JITTER1": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_REF_JITTER2": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_STARTUP_WAIT": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT0_DIVIDE_F": [ { "value": "6.750", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT1_DIVIDE": [ { "value": "13", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT6_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT6_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT6_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKFBOUT_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT0_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT1_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT2_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT3_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT4_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT5_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT6_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLL_NOTES": [ { "value": "No notes", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLL_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLL_CLK_FEEDBACK": [ { "value": "CLKFBOUT", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKFBOUT_MULT": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKIN_PERIOD": [ { "value": "1.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_COMPENSATION": [ { "value": "SYSTEM_SYNCHRONOUS", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLL_DIVCLK_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_REF_JITTER": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT0_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT1_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLOCK_MGR_TYPE": [ { "value": "NA", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OVERRIDE_MMCM": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_OVERRIDE_PLL": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PRIMARY_PORT": [ { "value": "clk_in1", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_SECONDARY_PORT": [ { "value": "clk_in2", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT1_PORT": [ { "value": "clk_out1", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT2_PORT": [ { "value": "clk_out2", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT3_PORT": [ { "value": "clk_out3", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT4_PORT": [ { "value": "clk_out4", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT5_PORT": [ { "value": "clk_out5", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT6_PORT": [ { "value": "clk_out6", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT7_PORT": [ { "value": "clk_out7", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_RESET_PORT": [ { "value": "reset", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_LOCKED_PORT": [ { "value": "locked", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_IN_PORT": [ { "value": "clkfb_in", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_IN_P_PORT": [ { "value": "clkfb_in_p", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_IN_N_PORT": [ { "value": "clkfb_in_n", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_OUT_PORT": [ { "value": "clkfb_out", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_OUT_P_PORT": [ { "value": "clkfb_out_p", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_OUT_N_PORT": [ { "value": "clkfb_out_n", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_POWER_DOWN_PORT": [ { "value": "power_down", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DADDR_PORT": [ { "value": "daddr", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DCLK_PORT": [ { "value": "dclk", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DRDY_PORT": [ { "value": "drdy", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DWE_PORT": [ { "value": "dwe", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIN_PORT": [ { "value": "din", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DOUT_PORT": [ { "value": "dout", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DEN_PORT": [ { "value": "den", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PSCLK_PORT": [ { "value": "psclk", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PSEN_PORT": [ { "value": "psen", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PSINCDEC_PORT": [ { "value": "psincdec", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PSDONE_PORT": [ { "value": "psdone", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_VALID_PORT": [ { "value": "CLK_VALID", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_STATUS_PORT": [ { "value": "STATUS", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_IN_SEL_PORT": [ { "value": "clk_in_sel", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_INPUT_CLK_STOPPED_PORT": [ { "value": "input_clk_stopped", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_STOPPED_PORT": [ { "value": "clkfb_stopped", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKIN1_JITTER_PS": [ { "value": "50.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKIN2_JITTER_PS": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PRIMITIVE": [ { "value": "MMCM", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_SS_MODE": [ { "value": "CENTER_HIGH", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_SS_MOD_PERIOD": [ { "value": "4000", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_SS_MOD_TIME": [ { "value": "0.004", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_HAS_CDDC": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CDDCDONE_PORT": [ { "value": "cddcdone", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CDDCREQ_PORT": [ { "value": "cddcreq", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUTPHY_MODE": [ { "value": "VCO", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_ENABLE_CLKOUTPHY": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_INTERFACE_SELECTION": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_S_AXI_ADDR_WIDTH": [ { "value": "11", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_S_AXI_DATA_WIDTH": [ { "value": "32", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_POWER_REG": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT0_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT0_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFBOUT_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFBOUT_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVCLK": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_LOCK_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_LOCK_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_LOCK_3": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_FILTER_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_FILTER_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE1_AUTO": [ { "value": "1", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE2_AUTO": [ { "value": "1.9259259259259258", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE3_AUTO": [ { "value": "0.14814814814814814", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE4_AUTO": [ { "value": "0.14814814814814814", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE5_AUTO": [ { "value": "0.14814814814814814", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE6_AUTO": [ { "value": "0.14814814814814814", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE7_AUTO": [ { "value": "0.14814814814814814", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLLBUFGCEDIV": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLLBUFGCEDIV1": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLLBUFGCEDIV2": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLLBUFGCEDIV3": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLLBUFGCEDIV4": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV1": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV2": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV3": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV4": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV5": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV6": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV7": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT0_ACTUAL_FREQ": [ { "value": "125.00000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_ACTUAL_FREQ": [ { "value": "64.90385", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_M_MAX": [ { "value": "64.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_M_MIN": [ { "value": "2.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_D_MAX": [ { "value": "80.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_D_MIN": [ { "value": "1.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_O_MAX": [ { "value": "128.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_O_MIN": [ { "value": "1.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_VCO_MIN": [ { "value": "600.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_VCO_MAX": [ { "value": "1200.000", "resolve_type": "generated", "format": "float", "usage": "all" } ]
|
||||||
|
},
|
||||||
|
"project_parameters": {
|
||||||
|
"ARCHITECTURE": [ { "value": "artix7" } ],
|
||||||
|
"BASE_BOARD_PART": [ { "value": "" } ],
|
||||||
|
"BOARD_CONNECTIONS": [ { "value": "" } ],
|
||||||
|
"DEVICE": [ { "value": "xc7a35t" } ],
|
||||||
|
"PACKAGE": [ { "value": "fgg484" } ],
|
||||||
|
"PREFHDL": [ { "value": "VERILOG" } ],
|
||||||
|
"SILICON_REVISION": [ { "value": "" } ],
|
||||||
|
"SIMULATOR_LANGUAGE": [ { "value": "MIXED" } ],
|
||||||
|
"SPEEDGRADE": [ { "value": "-1" } ],
|
||||||
|
"STATIC_POWER": [ { "value": "" } ],
|
||||||
|
"TEMPERATURE_GRADE": [ { "value": "" } ]
|
||||||
|
},
|
||||||
|
"runtime_parameters": {
|
||||||
|
"IPCONTEXT": [ { "value": "IP_Flow" } ],
|
||||||
|
"IPREVISION": [ { "value": "16" } ],
|
||||||
|
"MANAGED": [ { "value": "TRUE" } ],
|
||||||
|
"OUTPUTDIR": [ { "value": "../../../../eth_generator_top.gen/sources_1/ip/clk_wiz_ctrl_inst" } ],
|
||||||
|
"SELECTEDSIMMODEL": [ { "value": "" } ],
|
||||||
|
"SHAREDDIR": [ { "value": "." } ],
|
||||||
|
"SWVERSION": [ { "value": "2025.1" } ],
|
||||||
|
"SYNTHESISFLOW": [ { "value": "OUT_OF_CONTEXT" } ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"boundary": {
|
||||||
|
"ports": {
|
||||||
|
"reset": [ { "direction": "in", "driver_value": "0" } ],
|
||||||
|
"clk_in1": [ { "direction": "in" } ],
|
||||||
|
"clk_out1": [ { "direction": "out" } ],
|
||||||
|
"clk_out2": [ { "direction": "out" } ],
|
||||||
|
"locked": [ { "direction": "out" } ]
|
||||||
|
},
|
||||||
|
"interfaces": {
|
||||||
|
"reset": {
|
||||||
|
"vlnv": "xilinx.com:signal:reset:1.0",
|
||||||
|
"abstraction_type": "xilinx.com:signal:reset_rtl:1.0",
|
||||||
|
"mode": "slave",
|
||||||
|
"parameters": {
|
||||||
|
"POLARITY": [ { "value": "ACTIVE_HIGH", "value_src": "constant", "usage": "all" } ],
|
||||||
|
"BOARD.ASSOCIATED_PARAM": [ { "value": "RESET_BOARD_INTERFACE", "value_src": "constant", "usage": "all" } ],
|
||||||
|
"INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ]
|
||||||
|
},
|
||||||
|
"port_maps": {
|
||||||
|
"RST": [ { "physical_name": "reset" } ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clock_CLK_IN1": {
|
||||||
|
"vlnv": "xilinx.com:signal:clock:1.0",
|
||||||
|
"abstraction_type": "xilinx.com:signal:clock_rtl:1.0",
|
||||||
|
"mode": "slave",
|
||||||
|
"parameters": {
|
||||||
|
"FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"BOARD.ASSOCIATED_PARAM": [ { "value": "CLK_IN1_BOARD_INTERFACE", "usage": "all", "is_static_object": false } ]
|
||||||
|
},
|
||||||
|
"port_maps": {
|
||||||
|
"CLK_IN1": [ { "physical_name": "clk_in1" } ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clock_CLK_OUT1": {
|
||||||
|
"vlnv": "xilinx.com:signal:clock:1.0",
|
||||||
|
"abstraction_type": "xilinx.com:signal:clock_rtl:1.0",
|
||||||
|
"mode": "master",
|
||||||
|
"parameters": {
|
||||||
|
"FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ]
|
||||||
|
},
|
||||||
|
"port_maps": {
|
||||||
|
"CLK_OUT1": [ { "physical_name": "clk_out1" } ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clock_CLK_OUT2": {
|
||||||
|
"vlnv": "xilinx.com:signal:clock:1.0",
|
||||||
|
"abstraction_type": "xilinx.com:signal:clock_rtl:1.0",
|
||||||
|
"mode": "master",
|
||||||
|
"parameters": {
|
||||||
|
"FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ]
|
||||||
|
},
|
||||||
|
"port_maps": {
|
||||||
|
"CLK_OUT2": [ { "physical_name": "clk_out2" } ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
320
designs/reflectometer_base/reflectometer.sv
Normal file
320
designs/reflectometer_base/reflectometer.sv
Normal file
@ -0,0 +1,320 @@
|
|||||||
|
`timescale 1 ns / 1 ns
|
||||||
|
|
||||||
|
module reflectometer_top #(
|
||||||
|
parameter int unsigned DAC_DATA_WIDTH = 14,
|
||||||
|
parameter int unsigned ADC_DATA_WIDTH = 12,
|
||||||
|
parameter PACK_FACTOR = 1,
|
||||||
|
parameter PROCESS_MODE = 0,
|
||||||
|
parameter ZERO_LEVEL = 8192,
|
||||||
|
parameter ACCUM_WIDTH = 32,
|
||||||
|
parameter N_MAX = 4096,
|
||||||
|
parameter WINDOW_SIZE = 65,
|
||||||
|
parameter PACKET_SIZE = 1024
|
||||||
|
)(
|
||||||
|
input sys_clk,
|
||||||
|
input rst_n,
|
||||||
|
|
||||||
|
output [3:0] led,
|
||||||
|
|
||||||
|
input gmii_rx_clk,
|
||||||
|
input gmii_tx_clk,
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) output logic [7:0] s_axis_tx_tdata,
|
||||||
|
(* MARK_DEBUG="true" *) output logic s_axis_tx_tvalid,
|
||||||
|
(* MARK_DEBUG="true" *) input logic s_axis_tx_tready,
|
||||||
|
(* MARK_DEBUG="true" *) output logic s_axis_tx_tlast,
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) input wire [7:0] m_axis_rx_tdata,
|
||||||
|
(* MARK_DEBUG="true" *) input wire m_axis_rx_tvalid,
|
||||||
|
(* MARK_DEBUG="true" *) input wire m_axis_rx_tlast,
|
||||||
|
(* MARK_DEBUG="true" *) output wire m_axis_rx_tready,
|
||||||
|
|
||||||
|
// axis_mac
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) input logic req_ready,
|
||||||
|
(* MARK_DEBUG="true" *) output logic send_req,
|
||||||
|
|
||||||
|
// DAC
|
||||||
|
|
||||||
|
output wire p2_clk,
|
||||||
|
(* MARK_DEBUG="true" *) output wire [DAC_DATA_WIDTH-1:0] p2_data,
|
||||||
|
(* MARK_DEBUG="true" *) output wire p2_wrt,
|
||||||
|
|
||||||
|
// ADC
|
||||||
|
output ch2_clk,
|
||||||
|
(* MARK_DEBUG="true" *) input [ADC_DATA_WIDTH-1:0] ch2_data,
|
||||||
|
input ch2_otr
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// IDELAYCTRL
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
(* IODELAY_GROUP = "rgmii_idelay_group" *)
|
||||||
|
IDELAYCTRL IDELAYCTRL_inst (
|
||||||
|
.RDY (),
|
||||||
|
.REFCLK (sys_clk),
|
||||||
|
.RST (1'b0)
|
||||||
|
);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Generated clocks for controller
|
||||||
|
// Need to create this IP in Vivado:
|
||||||
|
// input : 200 MHz
|
||||||
|
// output0: 130 MHz
|
||||||
|
// output1: 65 MHz
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
wire dac_clk;
|
||||||
|
wire adc_clk;
|
||||||
|
wire clk_wiz_locked;
|
||||||
|
|
||||||
|
clk_wiz_ctrl_inst clk_wiz_ctrl_inst (
|
||||||
|
.clk_in1 (sys_clk),
|
||||||
|
.reset (~rst_n),
|
||||||
|
.clk_out1 (dac_clk), // 130 MHz
|
||||||
|
.clk_out2 (adc_clk), // 65 MHz
|
||||||
|
.locked (clk_wiz_locked)
|
||||||
|
);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// axis_mac interface
|
||||||
|
// RX stream from Ethernet goes into controller
|
||||||
|
// TX stream is unused for now
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Controller reset
|
||||||
|
// Use both external reset and clk_wiz lock
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
wire ctrl_rst_n = rst_n & clk_wiz_locked;
|
||||||
|
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) logic finish;
|
||||||
|
|
||||||
|
// Controller outputs to debug
|
||||||
|
(* MARK_DEBUG="true" *) wire [31:0] dac_pulse_width;
|
||||||
|
(* MARK_DEBUG="true" *) wire [31:0] dac_pulse_period;
|
||||||
|
(* MARK_DEBUG="true" *) wire [DAC_DATA_WIDTH-1:0] dac_pulse_height;
|
||||||
|
(* MARK_DEBUG="true" *) wire [15:0] dac_pulse_num;
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) wire [31:0] adc_pulse_period;
|
||||||
|
(* MARK_DEBUG="true" *) wire [15:0] adc_pulse_num;
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) wire dac_start;
|
||||||
|
(* MARK_DEBUG="true" *) wire adc_start;
|
||||||
|
(* MARK_DEBUG="true" *) wire dac_rst;
|
||||||
|
(* MARK_DEBUG="true" *) wire adc_rst;
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Controller
|
||||||
|
// ETH domain = gmii_rx_clk, because RX AXI master comes from axis_mac RX side
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
control #(
|
||||||
|
.DAC_DATA_WIDTH(DAC_DATA_WIDTH)
|
||||||
|
) udp_ctrl_inst (
|
||||||
|
.eth_clk_in (gmii_rx_clk),
|
||||||
|
.dac_clk_in (dac_clk),
|
||||||
|
.adc_clk_in (adc_clk),
|
||||||
|
.rst_n (ctrl_rst_n),
|
||||||
|
|
||||||
|
.s_axis_tdata (m_axis_rx_tdata),
|
||||||
|
.s_axis_tvalid (m_axis_rx_tvalid),
|
||||||
|
.s_axis_tready (m_axis_rx_tready),
|
||||||
|
.s_axis_tlast (m_axis_rx_tlast),
|
||||||
|
|
||||||
|
.finish (finish),
|
||||||
|
|
||||||
|
.dac_pulse_width (dac_pulse_width),
|
||||||
|
.dac_pulse_period (dac_pulse_period),
|
||||||
|
.dac_pulse_height (dac_pulse_height),
|
||||||
|
.dac_pulse_num (dac_pulse_num),
|
||||||
|
|
||||||
|
.adc_pulse_period (adc_pulse_period),
|
||||||
|
.adc_pulse_num (adc_pulse_num),
|
||||||
|
|
||||||
|
.dac_start (dac_start),
|
||||||
|
.adc_start (adc_start),
|
||||||
|
|
||||||
|
.dac_rst (dac_rst),
|
||||||
|
.adc_rst (adc_rst)
|
||||||
|
);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// DAC
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) logic sample_req;
|
||||||
|
(* MARK_DEBUG="true" *) logic sample_req_sync1;
|
||||||
|
(* MARK_DEBUG="true" *) logic sample_req_sync2;
|
||||||
|
(* MARK_DEBUG="true" *) logic sample_req_sync3;
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) logic sample_done;
|
||||||
|
(* MARK_DEBUG="true" *) logic sample_done_sync1;
|
||||||
|
(* MARK_DEBUG="true" *) logic sample_done_sync2;
|
||||||
|
(* MARK_DEBUG="true" *) logic sample_done_sync3;
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// DAC -> ADC CDC
|
||||||
|
//------------------------------------------------------------
|
||||||
|
always_ff @(posedge adc_clk or posedge adc_rst) begin
|
||||||
|
if (adc_rst) begin
|
||||||
|
sample_req <= 1'b0;
|
||||||
|
sample_req_sync2 <= 1'b0;
|
||||||
|
sample_req_sync3 <= 1'b0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
sample_req_sync2 <= sample_req_sync1;
|
||||||
|
sample_req_sync3 <= sample_req_sync2;
|
||||||
|
sample_req <= sample_req_sync3;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// ADC -> DAC CDC
|
||||||
|
//------------------------------------------------------------
|
||||||
|
always_ff @(posedge dac_clk or posedge dac_rst) begin
|
||||||
|
if (dac_rst) begin
|
||||||
|
sample_done <= 1'b0;
|
||||||
|
sample_done_sync2 <= 1'b0;
|
||||||
|
sample_done_sync3 <= 1'b0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
sample_done_sync2 <= sample_done_sync1;
|
||||||
|
sample_done_sync3 <= sample_done_sync2;
|
||||||
|
sample_done <= sample_done_sync3;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Generator
|
||||||
|
//------------------------------------------------------------
|
||||||
|
|
||||||
|
generator #(
|
||||||
|
.DATA_WIDTH(DAC_DATA_WIDTH),
|
||||||
|
.ZERO_LEVEL(ZERO_LEVEL)
|
||||||
|
) generator_inst (
|
||||||
|
.clk_in(dac_clk),
|
||||||
|
.rst(dac_rst),
|
||||||
|
.start(dac_start),
|
||||||
|
.pulse_width(dac_pulse_width),
|
||||||
|
.pulse_period(dac_pulse_period),
|
||||||
|
.pulse_height(dac_pulse_height),
|
||||||
|
.pulse_num(dac_pulse_num),
|
||||||
|
.pulse(p2_wrt),
|
||||||
|
.pulse_height_out(p2_data),
|
||||||
|
.sample_done(sample_done),
|
||||||
|
.sample_req(sample_req_sync1)
|
||||||
|
);
|
||||||
|
|
||||||
|
wire ch2_clk_oddr;
|
||||||
|
|
||||||
|
ODDR #(
|
||||||
|
.DDR_CLK_EDGE("SAME_EDGE"),
|
||||||
|
.INIT(1'b0),
|
||||||
|
.SRTYPE("SYNC")
|
||||||
|
) ODDR_ch2_clk (
|
||||||
|
.Q (ch2_clk_oddr),
|
||||||
|
.C (adc_clk),
|
||||||
|
.CE(1'b1),
|
||||||
|
.D1(1'b1),
|
||||||
|
.D2(1'b0),
|
||||||
|
.R (1'b0),
|
||||||
|
.S (1'b0)
|
||||||
|
);
|
||||||
|
|
||||||
|
OBUF OBUF_ch2_clk (
|
||||||
|
.I(ch2_clk_oddr),
|
||||||
|
.O(ch2_clk)
|
||||||
|
);
|
||||||
|
|
||||||
|
wire p2_clk_oddr;
|
||||||
|
|
||||||
|
ODDR #(
|
||||||
|
.DDR_CLK_EDGE("SAME_EDGE"),
|
||||||
|
.INIT(1'b0),
|
||||||
|
.SRTYPE("SYNC")
|
||||||
|
) ODDR_p2_clk (
|
||||||
|
.Q (p2_clk_oddr),
|
||||||
|
.C (dac_clk),
|
||||||
|
.CE(1'b1),
|
||||||
|
.D1(1'b1),
|
||||||
|
.D2(1'b0),
|
||||||
|
.R (1'b0),
|
||||||
|
.S (1'b0)
|
||||||
|
);
|
||||||
|
|
||||||
|
OBUF OBUF_p2_clk (
|
||||||
|
.I(p2_clk_oddr),
|
||||||
|
.O(p2_clk)
|
||||||
|
);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// ADC
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) logic [ADC_DATA_WIDTH*PACK_FACTOR-1:0] accum_m_axis_tdata;
|
||||||
|
(* MARK_DEBUG="true" *) logic acum_m_axis_tvalid;
|
||||||
|
|
||||||
|
sampler
|
||||||
|
#(
|
||||||
|
.DATA_WIDTH(ADC_DATA_WIDTH),
|
||||||
|
.PACK_FACTOR(PACK_FACTOR),
|
||||||
|
.PROCESS_MODE(PROCESS_MODE)
|
||||||
|
)
|
||||||
|
sampler_dut
|
||||||
|
(
|
||||||
|
.clk_in(adc_clk),
|
||||||
|
.rst(adc_rst),
|
||||||
|
.data_in(ch2_data),
|
||||||
|
.out_of_range(ch2_otr),
|
||||||
|
.m_axis_tdata(accum_m_axis_tdata),
|
||||||
|
.m_axis_tvalid(acum_m_axis_tvalid),
|
||||||
|
.smp_num(adc_pulse_period),
|
||||||
|
.sample_req(sample_req),
|
||||||
|
.sample_done(sample_done_sync1)
|
||||||
|
);
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Accumulator
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
|
||||||
|
accumulator_top
|
||||||
|
#(
|
||||||
|
.DATA_WIDTH(ADC_DATA_WIDTH),
|
||||||
|
.ACCUM_WIDTH(ACCUM_WIDTH),
|
||||||
|
.N_MAX(N_MAX),
|
||||||
|
.WINDOW_SIZE(WINDOW_SIZE),
|
||||||
|
.PACKET_SIZE(PACKET_SIZE)
|
||||||
|
)
|
||||||
|
accumulator_top_dut
|
||||||
|
(
|
||||||
|
.clk_in(adc_clk),
|
||||||
|
.rst(adc_rst),
|
||||||
|
.s_axis_tdata(accum_m_axis_tdata),
|
||||||
|
.s_axis_tvalid(acum_m_axis_tvalid),
|
||||||
|
.start(adc_start),
|
||||||
|
.smp_num(adc_pulse_period),
|
||||||
|
.seq_num(adc_pulse_num),
|
||||||
|
|
||||||
|
.eth_clk_in(gmii_tx_clk),
|
||||||
|
.req_ready(req_ready),
|
||||||
|
.send_req(send_req),
|
||||||
|
.m_axis_tdata(s_axis_tx_tdata),
|
||||||
|
.m_axis_tvalid(s_axis_tx_tvalid),
|
||||||
|
.m_axis_tready(s_axis_tx_tready),
|
||||||
|
.m_axis_tlast(s_axis_tx_tlast),
|
||||||
|
|
||||||
|
.finish(finish)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Simple LED status
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
assign led[0] = clk_wiz_locked;
|
||||||
|
assign led[1] = m_axis_rx_tvalid;
|
||||||
|
assign led[2] = dac_start;
|
||||||
|
|
||||||
|
endmodule
|
||||||
267
designs/reflectometer_base/tb_reflectometer.sv
Normal file
267
designs/reflectometer_base/tb_reflectometer.sv
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module tb_reflectometer;
|
||||||
|
|
||||||
|
// parameters
|
||||||
|
localparam int unsigned DAC_DATA_WIDTH = 14;
|
||||||
|
localparam int unsigned ADC_DATA_WIDTH = 12;
|
||||||
|
localparam PACK_FACTOR = 1; // not used in TB
|
||||||
|
localparam PROCESS_MODE = 0; // 0 - uint, 1 - int
|
||||||
|
localparam ZERO_LEVEL = 8192; // DAC zero voltage representation (2^14 / 2)
|
||||||
|
localparam ACCUM_WIDTH = 32; // accumulator number bit witdth
|
||||||
|
localparam N_MAX = 4096; // max value of windows to average by experiments
|
||||||
|
localparam WINDOW_SIZE = 65; // fixed subwindow size to average by time
|
||||||
|
localparam PACKET_SIZE = 1024; // bytes per UDP packet
|
||||||
|
|
||||||
|
localparam int unsigned ADC_CLK_MHZ = 65;
|
||||||
|
localparam int unsigned DAC_CLK_MHZ = 125;
|
||||||
|
|
||||||
|
// may be changed for test purposes
|
||||||
|
localparam int unsigned PULSE_WIDTH = 2**6;
|
||||||
|
localparam int unsigned PULSE_PERIOD = 2**8;
|
||||||
|
localparam int unsigned PULSE_NUM = 10;
|
||||||
|
localparam int unsigned PULSE_HEIGHT = 2**12;
|
||||||
|
localparam int unsigned PULSE_PERIOD_ADC = (int'(real'(ADC_CLK_MHZ) / real'(DAC_CLK_MHZ) * real'(PULSE_PERIOD)) / int'(WINDOW_SIZE)) * int'(WINDOW_SIZE);
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
if (PULSE_WIDTH <= 0)
|
||||||
|
$fatal(1, "PULSE_WIDTH should be positive");
|
||||||
|
if (PULSE_PERIOD <= 0)
|
||||||
|
$fatal(1, "PULSE_PERIOD should be positive");
|
||||||
|
if (PULSE_NUM <= 0)
|
||||||
|
$fatal(1, "PULSE_NUM should be positive");
|
||||||
|
if (PULSE_HEIGHT <= 0)
|
||||||
|
$fatal(1, "PULSE_HEIGHT should be positive");
|
||||||
|
if (PULSE_WIDTH >= 2**32-1)
|
||||||
|
$fatal(1, "PULSE_WIDTH too high");
|
||||||
|
if (PULSE_PERIOD >= 2**32-1)
|
||||||
|
$fatal(1, "PULSE_PERIOD too high");
|
||||||
|
if (PULSE_NUM >= 2**16-1)
|
||||||
|
$fatal(1, "PULSE_NUM too high");
|
||||||
|
if (PULSE_HEIGHT >= 2**DAC_DATA_WIDTH-1)
|
||||||
|
$fatal(1, "PULSE_HEIGHT too high");
|
||||||
|
if (PULSE_PERIOD_ADC % WINDOW_SIZE == 0)
|
||||||
|
$fatal(1, "PULSE_PERIOD_ADC isn't multiple of WINDOW_SIZE");
|
||||||
|
end
|
||||||
|
|
||||||
|
// DUT signals
|
||||||
|
logic clk200, clk_eth_phy_tx, clk_eth_phy_rx; // GMII clocks
|
||||||
|
logic rst_n;
|
||||||
|
wire [3:0] status_leds; // [ None, dac_start, m_axis_valid, clk_wiz_locked ]
|
||||||
|
|
||||||
|
wire dac_clk, dac_en;
|
||||||
|
wire [DAC_DATA_WIDTH-1:0] dac_data;
|
||||||
|
wire adc_clk;
|
||||||
|
logic adc_otr;
|
||||||
|
logic [ADC_DATA_WIDTH-1:0] adc_data;
|
||||||
|
|
||||||
|
wire [7:0] s_axis_tx_tdata;
|
||||||
|
wire s_axis_tx_tvalid;
|
||||||
|
logic s_axis_tx_tready;
|
||||||
|
wire s_axis_tx_tlast;
|
||||||
|
|
||||||
|
logic phy_ready;
|
||||||
|
wire accum_tx_start;
|
||||||
|
logic [7:0] m_axis_rx_tdata;
|
||||||
|
logic m_axis_rx_tvalid;
|
||||||
|
logic m_axis_rx_tlast;
|
||||||
|
logic m_axis_rx_tready;
|
||||||
|
|
||||||
|
logic [127:0] dut_config = 0;
|
||||||
|
|
||||||
|
// DUT
|
||||||
|
reflectometer_top #(
|
||||||
|
.DAC_DATA_WIDTH(DAC_DATA_WIDTH),
|
||||||
|
.ADC_DATA_WIDTH(ADC_DATA_WIDTH),
|
||||||
|
.PACK_FACTOR(PACK_FACTOR),
|
||||||
|
.PROCESS_MODE(PROCESS_MODE),
|
||||||
|
.ZERO_LEVEL(ZERO_LEVEL),
|
||||||
|
.ACCUM_WIDTH(ACCUM_WIDTH),
|
||||||
|
.N_MAX(N_MAX),
|
||||||
|
.WINDOW_SIZE(WINDOW_SIZE),
|
||||||
|
.PACKET_SIZE(PACKET_SIZE)
|
||||||
|
) DUT (
|
||||||
|
.sys_clk(clk200), // main clk 200 mhz
|
||||||
|
.rst_n(rst_n), // rst_n
|
||||||
|
.led(status_leds), // indication [3:0]
|
||||||
|
.gmii_rx_clk(clk_eth_phy_rx), // ext. clk from PHY
|
||||||
|
.gmii_tx_clk(clk_eth_phy_tx), // ext. clk from PHY
|
||||||
|
// accumulated data stream
|
||||||
|
.s_axis_tx_tdata(s_axis_tx_tdata),
|
||||||
|
.s_axis_tx_tvalid(s_axis_tx_tvalid),
|
||||||
|
.s_axis_tx_tready(s_axis_tx_tready),
|
||||||
|
.s_axis_tx_tlast(s_axis_tx_tlast),
|
||||||
|
// controller data stream
|
||||||
|
.m_axis_rx_tdata(m_axis_rx_tdata),
|
||||||
|
.m_axis_rx_tvalid(m_axis_rx_tvalid),
|
||||||
|
.m_axis_rx_tlast(m_axis_rx_tlast),
|
||||||
|
.m_axis_rx_tready(m_axis_rx_tready),
|
||||||
|
|
||||||
|
.req_ready(phy_ready), // AXI-stream requester ready
|
||||||
|
.send_req(accum_tx_start), // AXI-stream start transmit
|
||||||
|
.p2_clk(dac_clk), // DAC clk
|
||||||
|
.p2_data(dac_data), // DAC [DAC_DATA_WIDTH-1:0] data
|
||||||
|
.p2_wrt(dac_en), // DAC write enable
|
||||||
|
.ch2_clk(adc_clk), // ADC clk
|
||||||
|
.ch2_data(adc_data), // ADC [ADC_DATA_WIDTH-1:0] data
|
||||||
|
.ch2_otr(adc_otr) // ADC signal out-of-range
|
||||||
|
);
|
||||||
|
|
||||||
|
// clocks
|
||||||
|
initial begin
|
||||||
|
// 200 MHz
|
||||||
|
clk200 = 1'b0;
|
||||||
|
forever #2.5 clk200 = ~clk200;
|
||||||
|
end
|
||||||
|
initial begin
|
||||||
|
// 125 MHz
|
||||||
|
clk_eth_phy_tx = 1'b0;
|
||||||
|
forever #4 clk_eth_phy_tx = ~clk_eth_phy_tx;
|
||||||
|
end
|
||||||
|
initial begin
|
||||||
|
// 125 MHz
|
||||||
|
clk_eth_phy_rx = 1'b0;
|
||||||
|
forever #4 clk_eth_phy_rx = ~clk_eth_phy_rx;
|
||||||
|
end
|
||||||
|
|
||||||
|
// ADC input noise simulation
|
||||||
|
always @(posedge adc_clk or negedge rst_n) begin
|
||||||
|
if (!rst_n) begin
|
||||||
|
adc_data <= '0;
|
||||||
|
end else begin
|
||||||
|
adc_data <= $urandom() & ((1 << ADC_DATA_WIDTH) - 1);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assign adc_otr = 1'b0;
|
||||||
|
|
||||||
|
// AXIS tasks
|
||||||
|
task automatic axis_send_byte(
|
||||||
|
ref logic clk,
|
||||||
|
input logic [7:0] data,
|
||||||
|
input logic last,
|
||||||
|
ref logic tvalid,
|
||||||
|
ref logic [7:0] tdata,
|
||||||
|
ref logic tlast,
|
||||||
|
input logic tready
|
||||||
|
);
|
||||||
|
@(posedge clk);
|
||||||
|
tdata <= data;
|
||||||
|
tlast <= last;
|
||||||
|
tvalid <= 1'b1;
|
||||||
|
|
||||||
|
// Ждем готовности приемника
|
||||||
|
wait(tready === 1'b1);
|
||||||
|
|
||||||
|
@(posedge clk);
|
||||||
|
tvalid <= 1'b0;
|
||||||
|
tlast <= 1'b0;
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic dut_soft_reset();
|
||||||
|
axis_send_byte(
|
||||||
|
.clk(clk_eth_phy_rx),
|
||||||
|
.data(8'b00001111),
|
||||||
|
.last(1'b1),
|
||||||
|
.tvalid(m_axis_rx_tvalid),
|
||||||
|
.tdata(m_axis_rx_tdata),
|
||||||
|
.tlast(m_axis_rx_tlast),
|
||||||
|
.tready(m_axis_rx_tready)
|
||||||
|
);
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic dut_start();
|
||||||
|
axis_send_byte(
|
||||||
|
.clk(clk_eth_phy_rx),
|
||||||
|
.data(8'b11110000),
|
||||||
|
.last(1'b1),
|
||||||
|
.tvalid(m_axis_rx_tvalid),
|
||||||
|
.tdata(m_axis_rx_tdata),
|
||||||
|
.tlast(m_axis_rx_tlast),
|
||||||
|
.tready(m_axis_rx_tready)
|
||||||
|
);
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// task automatic dut_send_config(
|
||||||
|
// input logic [127:0] ctrl_config
|
||||||
|
// );
|
||||||
|
// // команда set_data
|
||||||
|
// axis_send_byte(
|
||||||
|
// .clk(clk_eth_phy_rx),
|
||||||
|
// .data(8'b10001000),
|
||||||
|
// .last(1'b0),
|
||||||
|
// .tvalid(m_axis_rx_tvalid),
|
||||||
|
// .tdata(m_axis_rx_tdata),
|
||||||
|
// .tlast(m_axis_rx_tlast),
|
||||||
|
// .tready(m_axis_rx_tready)
|
||||||
|
// );
|
||||||
|
// // config burst
|
||||||
|
// for (int i = 0; i < 16; i++) begin
|
||||||
|
// logic [7:0] byte_to_send;
|
||||||
|
// logic is_last;
|
||||||
|
|
||||||
|
// // get byte
|
||||||
|
// byte_to_send = ctrl_config[i*8 +: 8];
|
||||||
|
// // tlast for last byte
|
||||||
|
// is_last = (i == 15);
|
||||||
|
|
||||||
|
// axis_send_byte(
|
||||||
|
// .clk(clk_eth_phy_rx),
|
||||||
|
// .data(byte_to_send),
|
||||||
|
// .last(is_last),
|
||||||
|
// .tvalid(m_axis_rx_tvalid),
|
||||||
|
// .tdata(m_axis_rx_tdata),
|
||||||
|
// .tlast(m_axis_rx_tlast),
|
||||||
|
// .tready(m_axis_rx_tready)
|
||||||
|
// );
|
||||||
|
// end
|
||||||
|
// endtask
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// some helpers for controller axis
|
||||||
|
|
||||||
|
// GAME PLAN
|
||||||
|
// 1. setup reflectometer
|
||||||
|
// 2. create some reference signal with noise + virtual ADC
|
||||||
|
// 3. setup m_axis endpoint for controller to start reflectometer (create multiple tasks)
|
||||||
|
// 4. setup s_axis endpoint for data gathering and plotting
|
||||||
|
// 5. check standalone reflectometer
|
||||||
|
// 6. add reference signal averaging loop throw generator pulse posedge detection
|
||||||
|
// 7. visual comparision of reference VS reflectometer
|
||||||
|
// 8. add statistics for signal comparision (MSE/RMSE)
|
||||||
|
|
||||||
|
// main TB
|
||||||
|
initial begin
|
||||||
|
// setup
|
||||||
|
rst_n = 1'b0;
|
||||||
|
s_axis_tx_tready = 1'b0;
|
||||||
|
m_axis_rx_tdata = 1'b0;
|
||||||
|
m_axis_rx_tvalid = 1'b0;
|
||||||
|
m_axis_rx_tlast = 1'b0;
|
||||||
|
phy_ready = 1'b0;
|
||||||
|
|
||||||
|
// startup
|
||||||
|
#100;
|
||||||
|
rst_n = 1'b1;
|
||||||
|
wait(DUT.clk_wiz_ctrl_inst.locked == 1'b1);
|
||||||
|
#20;
|
||||||
|
$display("=== clocks ready / wiz. locked ===");
|
||||||
|
#40;
|
||||||
|
// ready to work
|
||||||
|
|
||||||
|
dut_config[31:0] = PULSE_WIDTH;
|
||||||
|
dut_config[63:32] = PULSE_PERIOD;
|
||||||
|
dut_config[79:64] = PULSE_NUM;
|
||||||
|
dut_config[79+DAC_DATA_WIDTH:80] = PULSE_HEIGHT;
|
||||||
|
dut_config[127:96] = PULSE_PERIOD_ADC;
|
||||||
|
|
||||||
|
// dut_send_config(dut_config);
|
||||||
|
dut_start();
|
||||||
|
// dut_start();
|
||||||
|
#1000;
|
||||||
|
// dut_soft_reset();
|
||||||
|
|
||||||
|
$display("=== ALL BASIC TESTS PASSED ===");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
53
designs/reflectometer_prototype/Makefile
Normal file
53
designs/reflectometer_prototype/Makefile
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
#
|
||||||
|
# Copyright (c) 2025 FPGA Ninja, LLC
|
||||||
|
#
|
||||||
|
# Authors:
|
||||||
|
# - Alex Forencich
|
||||||
|
#
|
||||||
|
|
||||||
|
# FPGA settings
|
||||||
|
FPGA_PART = xc7a100tfgg484-2
|
||||||
|
FPGA_TOP = prototype_top
|
||||||
|
FPGA_ARCH = artix7
|
||||||
|
|
||||||
|
RTL_DIR = ../../rtl
|
||||||
|
|
||||||
|
|
||||||
|
include ../../scripts/vivado.mk
|
||||||
|
|
||||||
|
SYN_FILES += prototype.sv
|
||||||
|
SYN_FILES += ../reflectometer_base/reflectometer.sv
|
||||||
|
SYN_FILES += $(sort $(shell find ../../rtl -type f \( -name '*.v' -o -name '*.sv' \)))
|
||||||
|
|
||||||
|
XCI_FILES = $(sort $(shell find ../../rtl/ethernet-udp/src -type f -name '*.xci'))
|
||||||
|
XCI_FILES += $(sort $(shell find ip/ -type f -name '*.xci'))
|
||||||
|
|
||||||
|
XDC_FILES += ../../constraints/ax7102.xdc
|
||||||
|
XDC_FILES += debug.xdc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
program: $(PROJECT).bit
|
||||||
|
echo "open_hw_manager" > program.tcl
|
||||||
|
echo "connect_hw_server" >> program.tcl
|
||||||
|
echo "open_hw_target" >> program.tcl
|
||||||
|
echo "current_hw_device [lindex [get_hw_devices] 0]" >> program.tcl
|
||||||
|
echo "refresh_hw_device -update_hw_probes false [current_hw_device]" >> program.tcl
|
||||||
|
echo "set_property PROGRAM.FILE {$(PROJECT).bit} [current_hw_device]" >> program.tcl
|
||||||
|
echo "program_hw_devices [current_hw_device]" >> program.tcl
|
||||||
|
echo "exit" >> program.tcl
|
||||||
|
vivado -nojournal -nolog -mode batch -source program.tcl
|
||||||
|
|
||||||
|
$(PROJECT).mcs $(PROJECT).prm: $(PROJECT).bit
|
||||||
|
echo "write_cfgmem -force -format mcs -size 16 -interface SPIx4 -loadbit {up 0x0000000 $*.bit} -checksum -file $*.mcs" > generate_mcs.tcl
|
||||||
|
echo "exit" >> generate_mcs.tcl
|
||||||
|
vivado -nojournal -nolog -mode batch -source generate_mcs.tcl
|
||||||
|
mkdir -p rev
|
||||||
|
COUNT=100; \
|
||||||
|
while [ -e rev/$*_rev$$COUNT.bit ]; \
|
||||||
|
do COUNT=$$((COUNT+1)); done; \
|
||||||
|
COUNT=$$((COUNT-1)); \
|
||||||
|
for x in .mcs .prm; \
|
||||||
|
do cp $*$$x rev/$*_rev$$COUNT$$x; \
|
||||||
|
echo "Output: rev/$*_rev$$COUNT$$x"; done;
|
||||||
13
designs/reflectometer_prototype/README.md
Normal file
13
designs/reflectometer_prototype/README.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Тестовый проект рефлектометра
|
||||||
|
Проект состоит из AXIS Ethernet и основной части рефлектометра - генератора, сэмплера, контроллера и синхронизирующей логики. Разработан для AX7102, АЦП AN9238, ЦАП AD9767. Плата подключается по ethernet к компьютеру, IP должен быть 192.168.0.3 у компьютера, в ПЛИС установлен IP 192.168.0.2, после подключения должен пройти ARP и после этого можно начнить коммуникацию через консольку.
|
||||||
|
## Сборка
|
||||||
|
```make all``` - собрать все до битстрима
|
||||||
|
|
||||||
|
```make vivado``` - открыть проект в Vivado
|
||||||
|
|
||||||
|
## Управление
|
||||||
|
Используйте software/console.py. Примеры:
|
||||||
|
|
||||||
|
```python3 console.py --pulse_width 3500 --pulse_period 20000 --pulse_height 15000 --pulse_num 550 --dac-bits 14```
|
||||||
|
|
||||||
|
```python3 console.py --pulse_width 15000 --pulse_period 20000 --pulse_height 1500 --pulse_num 550 --dac-bits 14```
|
||||||
238
designs/reflectometer_prototype/debug.xdc
Normal file
238
designs/reflectometer_prototype/debug.xdc
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
set_clock_groups -name ASYNC_UDP_CTRL -asynchronous -group [get_clocks rx_clk] -group [get_clocks clk_out1_clk_wiz_ctrl_inst] -group [get_clocks clk_out2_clk_wiz_ctrl_inst]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
connect_debug_port u_ila_0/clk [get_nets [list clk_wiz_ctrl_inst/inst/clk_out2]]
|
||||||
|
connect_debug_port u_ila_0/probe0 [get_nets [list {accumulator_top_dut/output_async_fifo/wr_state[0]} {accumulator_top_dut/output_async_fifo/wr_state[1]} {accumulator_top_dut/output_async_fifo/wr_state[2]}]]
|
||||||
|
connect_debug_port u_ila_0/probe1 [get_nets [list {sampler_dut/smp_num_reg[0]} {sampler_dut/smp_num_reg[1]} {sampler_dut/smp_num_reg[2]} {sampler_dut/smp_num_reg[3]} {sampler_dut/smp_num_reg[4]} {sampler_dut/smp_num_reg[5]} {sampler_dut/smp_num_reg[6]} {sampler_dut/smp_num_reg[7]} {sampler_dut/smp_num_reg[8]} {sampler_dut/smp_num_reg[9]} {sampler_dut/smp_num_reg[10]} {sampler_dut/smp_num_reg[11]} {sampler_dut/smp_num_reg[12]} {sampler_dut/smp_num_reg[13]} {sampler_dut/smp_num_reg[14]} {sampler_dut/smp_num_reg[15]} {sampler_dut/smp_num_reg[16]} {sampler_dut/smp_num_reg[17]} {sampler_dut/smp_num_reg[18]} {sampler_dut/smp_num_reg[19]} {sampler_dut/smp_num_reg[20]} {sampler_dut/smp_num_reg[21]} {sampler_dut/smp_num_reg[22]} {sampler_dut/smp_num_reg[23]} {sampler_dut/smp_num_reg[24]} {sampler_dut/smp_num_reg[25]} {sampler_dut/smp_num_reg[26]} {sampler_dut/smp_num_reg[27]} {sampler_dut/smp_num_reg[28]} {sampler_dut/smp_num_reg[29]} {sampler_dut/smp_num_reg[30]} {sampler_dut/smp_num_reg[31]}]]
|
||||||
|
connect_debug_port u_ila_0/probe2 [get_nets [list {adc_pulse_num[0]} {adc_pulse_num[1]} {adc_pulse_num[2]} {adc_pulse_num[3]} {adc_pulse_num[4]} {adc_pulse_num[5]} {adc_pulse_num[6]} {adc_pulse_num[7]} {adc_pulse_num[8]} {adc_pulse_num[9]} {adc_pulse_num[10]} {adc_pulse_num[11]} {adc_pulse_num[12]} {adc_pulse_num[13]} {adc_pulse_num[14]} {adc_pulse_num[15]}]]
|
||||||
|
connect_debug_port u_ila_0/probe4 [get_nets [list {accum_m_axis_tdata[0]} {accum_m_axis_tdata[1]} {accum_m_axis_tdata[2]} {accum_m_axis_tdata[3]} {accum_m_axis_tdata[4]} {accum_m_axis_tdata[5]} {accum_m_axis_tdata[6]} {accum_m_axis_tdata[7]} {accum_m_axis_tdata[8]} {accum_m_axis_tdata[9]} {accum_m_axis_tdata[10]} {accum_m_axis_tdata[11]}]]
|
||||||
|
connect_debug_port u_ila_0/probe5 [get_nets [list {sampler_dut/cnt_smp_num[0]} {sampler_dut/cnt_smp_num[1]} {sampler_dut/cnt_smp_num[2]} {sampler_dut/cnt_smp_num[3]} {sampler_dut/cnt_smp_num[4]} {sampler_dut/cnt_smp_num[5]} {sampler_dut/cnt_smp_num[6]} {sampler_dut/cnt_smp_num[7]} {sampler_dut/cnt_smp_num[8]} {sampler_dut/cnt_smp_num[9]} {sampler_dut/cnt_smp_num[10]} {sampler_dut/cnt_smp_num[11]} {sampler_dut/cnt_smp_num[12]} {sampler_dut/cnt_smp_num[13]} {sampler_dut/cnt_smp_num[14]} {sampler_dut/cnt_smp_num[15]} {sampler_dut/cnt_smp_num[16]} {sampler_dut/cnt_smp_num[17]} {sampler_dut/cnt_smp_num[18]} {sampler_dut/cnt_smp_num[19]} {sampler_dut/cnt_smp_num[20]} {sampler_dut/cnt_smp_num[21]} {sampler_dut/cnt_smp_num[22]} {sampler_dut/cnt_smp_num[23]} {sampler_dut/cnt_smp_num[24]} {sampler_dut/cnt_smp_num[25]} {sampler_dut/cnt_smp_num[26]} {sampler_dut/cnt_smp_num[27]} {sampler_dut/cnt_smp_num[28]} {sampler_dut/cnt_smp_num[29]} {sampler_dut/cnt_smp_num[30]} {sampler_dut/cnt_smp_num[31]}]]
|
||||||
|
connect_debug_port u_ila_0/probe6 [get_nets [list {sampler_dut/data_converted[0]} {sampler_dut/data_converted[1]} {sampler_dut/data_converted[2]} {sampler_dut/data_converted[3]} {sampler_dut/data_converted[4]} {sampler_dut/data_converted[5]} {sampler_dut/data_converted[6]} {sampler_dut/data_converted[7]} {sampler_dut/data_converted[8]} {sampler_dut/data_converted[9]} {sampler_dut/data_converted[10]} {sampler_dut/data_converted[11]}]]
|
||||||
|
connect_debug_port u_ila_0/probe7 [get_nets [list {adc_pulse_period[0]} {adc_pulse_period[1]} {adc_pulse_period[2]} {adc_pulse_period[3]} {adc_pulse_period[4]} {adc_pulse_period[5]} {adc_pulse_period[6]} {adc_pulse_period[7]} {adc_pulse_period[8]} {adc_pulse_period[9]} {adc_pulse_period[10]} {adc_pulse_period[11]} {adc_pulse_period[12]} {adc_pulse_period[13]} {adc_pulse_period[14]} {adc_pulse_period[15]} {adc_pulse_period[16]} {adc_pulse_period[17]} {adc_pulse_period[18]} {adc_pulse_period[19]} {adc_pulse_period[20]} {adc_pulse_period[21]} {adc_pulse_period[22]} {adc_pulse_period[23]} {adc_pulse_period[24]} {adc_pulse_period[25]} {adc_pulse_period[26]} {adc_pulse_period[27]} {adc_pulse_period[28]} {adc_pulse_period[29]} {adc_pulse_period[30]} {adc_pulse_period[31]}]]
|
||||||
|
connect_debug_port u_ila_0/probe8 [get_nets [list {accumulator_top_dut/accum_main/wr_state[0]} {accumulator_top_dut/accum_main/wr_state[1]} {accumulator_top_dut/accum_main/wr_state[2]} {accumulator_top_dut/accum_main/wr_state[3]}]]
|
||||||
|
connect_debug_port u_ila_0/probe9 [get_nets [list {accumulator_top_dut/accum_main/adder_dut/cnt[0]} {accumulator_top_dut/accum_main/adder_dut/cnt[1]} {accumulator_top_dut/accum_main/adder_dut/cnt[2]} {accumulator_top_dut/accum_main/adder_dut/cnt[3]} {accumulator_top_dut/accum_main/adder_dut/cnt[4]} {accumulator_top_dut/accum_main/adder_dut/cnt[5]} {accumulator_top_dut/accum_main/adder_dut/cnt[6]} {accumulator_top_dut/accum_main/adder_dut/cnt[7]} {accumulator_top_dut/accum_main/adder_dut/cnt[8]} {accumulator_top_dut/accum_main/adder_dut/cnt[9]} {accumulator_top_dut/accum_main/adder_dut/cnt[10]} {accumulator_top_dut/accum_main/adder_dut/cnt[11]} {accumulator_top_dut/accum_main/adder_dut/cnt[12]} {accumulator_top_dut/accum_main/adder_dut/cnt[13]} {accumulator_top_dut/accum_main/adder_dut/cnt[14]} {accumulator_top_dut/accum_main/adder_dut/cnt[15]}]]
|
||||||
|
connect_debug_port u_ila_0/probe10 [get_nets [list acum_m_axis_tvalid]]
|
||||||
|
connect_debug_port u_ila_0/probe11 [get_nets [list adc_rst]]
|
||||||
|
connect_debug_port u_ila_0/probe12 [get_nets [list adc_start]]
|
||||||
|
connect_debug_port u_ila_0/probe13 [get_nets [list sampler_dut/enable]]
|
||||||
|
connect_debug_port u_ila_0/probe14 [get_nets [list finish]]
|
||||||
|
connect_debug_port u_ila_0/probe15 [get_nets [list sampler_dut/out_of_range_reg]]
|
||||||
|
connect_debug_port u_ila_0/probe16 [get_nets [list sample_req]]
|
||||||
|
connect_debug_port u_ila_1/clk [get_nets [list clk_wiz_ctrl_inst/inst/clk_out1]]
|
||||||
|
connect_debug_port u_ila_1/probe0 [get_nets [list {generator_inst/pulse_num_reg[0]} {generator_inst/pulse_num_reg[1]} {generator_inst/pulse_num_reg[2]} {generator_inst/pulse_num_reg[3]} {generator_inst/pulse_num_reg[4]} {generator_inst/pulse_num_reg[5]} {generator_inst/pulse_num_reg[6]} {generator_inst/pulse_num_reg[7]} {generator_inst/pulse_num_reg[8]} {generator_inst/pulse_num_reg[9]} {generator_inst/pulse_num_reg[10]} {generator_inst/pulse_num_reg[11]} {generator_inst/pulse_num_reg[12]} {generator_inst/pulse_num_reg[13]} {generator_inst/pulse_num_reg[14]} {generator_inst/pulse_num_reg[15]}]]
|
||||||
|
connect_debug_port u_ila_1/probe1 [get_nets [list {dac_pulse_num[0]} {dac_pulse_num[1]} {dac_pulse_num[2]} {dac_pulse_num[3]} {dac_pulse_num[4]} {dac_pulse_num[5]} {dac_pulse_num[6]} {dac_pulse_num[7]} {dac_pulse_num[8]} {dac_pulse_num[9]} {dac_pulse_num[10]} {dac_pulse_num[11]} {dac_pulse_num[12]} {dac_pulse_num[13]} {dac_pulse_num[14]} {dac_pulse_num[15]}]]
|
||||||
|
connect_debug_port u_ila_1/probe2 [get_nets [list {dac_pulse_period[0]} {dac_pulse_period[1]} {dac_pulse_period[2]} {dac_pulse_period[3]} {dac_pulse_period[4]} {dac_pulse_period[5]} {dac_pulse_period[6]} {dac_pulse_period[7]} {dac_pulse_period[8]} {dac_pulse_period[9]} {dac_pulse_period[10]} {dac_pulse_period[11]} {dac_pulse_period[12]} {dac_pulse_period[13]} {dac_pulse_period[14]} {dac_pulse_period[15]} {dac_pulse_period[16]} {dac_pulse_period[17]} {dac_pulse_period[18]} {dac_pulse_period[19]} {dac_pulse_period[20]} {dac_pulse_period[21]} {dac_pulse_period[22]} {dac_pulse_period[23]} {dac_pulse_period[24]} {dac_pulse_period[25]} {dac_pulse_period[26]} {dac_pulse_period[27]} {dac_pulse_period[28]} {dac_pulse_period[29]} {dac_pulse_period[30]} {dac_pulse_period[31]}]]
|
||||||
|
connect_debug_port u_ila_1/probe3 [get_nets [list {dac_pulse_width[0]} {dac_pulse_width[1]} {dac_pulse_width[2]} {dac_pulse_width[3]} {dac_pulse_width[4]} {dac_pulse_width[5]} {dac_pulse_width[6]} {dac_pulse_width[7]} {dac_pulse_width[8]} {dac_pulse_width[9]} {dac_pulse_width[10]} {dac_pulse_width[11]} {dac_pulse_width[12]} {dac_pulse_width[13]} {dac_pulse_width[14]} {dac_pulse_width[15]} {dac_pulse_width[16]} {dac_pulse_width[17]} {dac_pulse_width[18]} {dac_pulse_width[19]} {dac_pulse_width[20]} {dac_pulse_width[21]} {dac_pulse_width[22]} {dac_pulse_width[23]} {dac_pulse_width[24]} {dac_pulse_width[25]} {dac_pulse_width[26]} {dac_pulse_width[27]} {dac_pulse_width[28]} {dac_pulse_width[29]} {dac_pulse_width[30]} {dac_pulse_width[31]}]]
|
||||||
|
connect_debug_port u_ila_1/probe4 [get_nets [list {generator_inst/cnt_pulse_num[0]} {generator_inst/cnt_pulse_num[1]} {generator_inst/cnt_pulse_num[2]} {generator_inst/cnt_pulse_num[3]} {generator_inst/cnt_pulse_num[4]} {generator_inst/cnt_pulse_num[5]} {generator_inst/cnt_pulse_num[6]} {generator_inst/cnt_pulse_num[7]} {generator_inst/cnt_pulse_num[8]} {generator_inst/cnt_pulse_num[9]} {generator_inst/cnt_pulse_num[10]} {generator_inst/cnt_pulse_num[11]} {generator_inst/cnt_pulse_num[12]} {generator_inst/cnt_pulse_num[13]} {generator_inst/cnt_pulse_num[14]} {generator_inst/cnt_pulse_num[15]}]]
|
||||||
|
connect_debug_port u_ila_1/probe5 [get_nets [list {generator_inst/pulse_width_reg[0]} {generator_inst/pulse_width_reg[1]} {generator_inst/pulse_width_reg[2]} {generator_inst/pulse_width_reg[3]} {generator_inst/pulse_width_reg[4]} {generator_inst/pulse_width_reg[5]} {generator_inst/pulse_width_reg[6]} {generator_inst/pulse_width_reg[7]} {generator_inst/pulse_width_reg[8]} {generator_inst/pulse_width_reg[9]} {generator_inst/pulse_width_reg[10]} {generator_inst/pulse_width_reg[11]} {generator_inst/pulse_width_reg[12]} {generator_inst/pulse_width_reg[13]} {generator_inst/pulse_width_reg[14]} {generator_inst/pulse_width_reg[15]} {generator_inst/pulse_width_reg[16]} {generator_inst/pulse_width_reg[17]} {generator_inst/pulse_width_reg[18]} {generator_inst/pulse_width_reg[19]} {generator_inst/pulse_width_reg[20]} {generator_inst/pulse_width_reg[21]} {generator_inst/pulse_width_reg[22]} {generator_inst/pulse_width_reg[23]} {generator_inst/pulse_width_reg[24]} {generator_inst/pulse_width_reg[25]} {generator_inst/pulse_width_reg[26]} {generator_inst/pulse_width_reg[27]} {generator_inst/pulse_width_reg[28]} {generator_inst/pulse_width_reg[29]} {generator_inst/pulse_width_reg[30]} {generator_inst/pulse_width_reg[31]}]]
|
||||||
|
connect_debug_port u_ila_1/probe6 [get_nets [list {generator_inst/pulse_period_reg[0]} {generator_inst/pulse_period_reg[1]} {generator_inst/pulse_period_reg[2]} {generator_inst/pulse_period_reg[3]} {generator_inst/pulse_period_reg[4]} {generator_inst/pulse_period_reg[5]} {generator_inst/pulse_period_reg[6]} {generator_inst/pulse_period_reg[7]} {generator_inst/pulse_period_reg[8]} {generator_inst/pulse_period_reg[9]} {generator_inst/pulse_period_reg[10]} {generator_inst/pulse_period_reg[11]} {generator_inst/pulse_period_reg[12]} {generator_inst/pulse_period_reg[13]} {generator_inst/pulse_period_reg[14]} {generator_inst/pulse_period_reg[15]} {generator_inst/pulse_period_reg[16]} {generator_inst/pulse_period_reg[17]} {generator_inst/pulse_period_reg[18]} {generator_inst/pulse_period_reg[19]} {generator_inst/pulse_period_reg[20]} {generator_inst/pulse_period_reg[21]} {generator_inst/pulse_period_reg[22]} {generator_inst/pulse_period_reg[23]} {generator_inst/pulse_period_reg[24]} {generator_inst/pulse_period_reg[25]} {generator_inst/pulse_period_reg[26]} {generator_inst/pulse_period_reg[27]} {generator_inst/pulse_period_reg[28]} {generator_inst/pulse_period_reg[29]} {generator_inst/pulse_period_reg[30]} {generator_inst/pulse_period_reg[31]}]]
|
||||||
|
connect_debug_port u_ila_1/probe7 [get_nets [list {generator_inst/cnt_period[0]} {generator_inst/cnt_period[1]} {generator_inst/cnt_period[2]} {generator_inst/cnt_period[3]} {generator_inst/cnt_period[4]} {generator_inst/cnt_period[5]} {generator_inst/cnt_period[6]} {generator_inst/cnt_period[7]} {generator_inst/cnt_period[8]} {generator_inst/cnt_period[9]} {generator_inst/cnt_period[10]} {generator_inst/cnt_period[11]} {generator_inst/cnt_period[12]} {generator_inst/cnt_period[13]} {generator_inst/cnt_period[14]} {generator_inst/cnt_period[15]} {generator_inst/cnt_period[16]} {generator_inst/cnt_period[17]} {generator_inst/cnt_period[18]} {generator_inst/cnt_period[19]} {generator_inst/cnt_period[20]} {generator_inst/cnt_period[21]} {generator_inst/cnt_period[22]} {generator_inst/cnt_period[23]} {generator_inst/cnt_period[24]} {generator_inst/cnt_period[25]} {generator_inst/cnt_period[26]} {generator_inst/cnt_period[27]} {generator_inst/cnt_period[28]} {generator_inst/cnt_period[29]} {generator_inst/cnt_period[30]} {generator_inst/cnt_period[31]}]]
|
||||||
|
connect_debug_port u_ila_1/probe8 [get_nets [list dac_rst]]
|
||||||
|
connect_debug_port u_ila_1/probe9 [get_nets [list dac_start]]
|
||||||
|
connect_debug_port u_ila_1/probe10 [get_nets [list debug_dac_OBUF]]
|
||||||
|
connect_debug_port u_ila_1/probe11 [get_nets [list generator_inst/enable]]
|
||||||
|
connect_debug_port u_ila_1/probe12 [get_nets [list sample_done]]
|
||||||
|
connect_debug_port u_ila_2/clk [get_nets [list rgmii_rxc_IBUF_BUFG]]
|
||||||
|
connect_debug_port u_ila_2/probe0 [get_nets [list {accumulator_top_dut/output_async_fifo/rd_state[0]} {accumulator_top_dut/output_async_fifo/rd_state[1]} {accumulator_top_dut/output_async_fifo/rd_state[2]}]]
|
||||||
|
connect_debug_port dbg_hub/clk [get_nets rgmii_rxc_IBUF_BUFG]
|
||||||
|
|
||||||
|
create_debug_core u_ila_0 ila
|
||||||
|
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
|
||||||
|
set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_0]
|
||||||
|
set_property C_ADV_TRIGGER false [get_debug_cores u_ila_0]
|
||||||
|
set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_0]
|
||||||
|
set_property C_EN_STRG_QUAL false [get_debug_cores u_ila_0]
|
||||||
|
set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_0]
|
||||||
|
set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
|
||||||
|
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_0/clk]
|
||||||
|
connect_debug_port u_ila_0/clk [get_nets [list reflectometer_inst/clk_wiz_ctrl_inst/inst/clk_out2]]
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0]
|
||||||
|
set_property port_width 4 [get_debug_ports u_ila_0/probe0]
|
||||||
|
connect_debug_port u_ila_0/probe0 [get_nets [list {reflectometer_inst/accumulator_top_dut/accum_main/wr_state[0]} {reflectometer_inst/accumulator_top_dut/accum_main/wr_state[1]} {reflectometer_inst/accumulator_top_dut/accum_main/wr_state[2]} {reflectometer_inst/accumulator_top_dut/accum_main/wr_state[3]}]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe1]
|
||||||
|
set_property port_width 3 [get_debug_ports u_ila_0/probe1]
|
||||||
|
connect_debug_port u_ila_0/probe1 [get_nets [list {reflectometer_inst/accumulator_top_dut/output_async_fifo/wr_state[0]} {reflectometer_inst/accumulator_top_dut/output_async_fifo/wr_state[1]} {reflectometer_inst/accumulator_top_dut/output_async_fifo/wr_state[2]}]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe2]
|
||||||
|
set_property port_width 32 [get_debug_ports u_ila_0/probe2]
|
||||||
|
connect_debug_port u_ila_0/probe2 [get_nets [list {reflectometer_inst/sampler_dut/cnt_smp_num[0]} {reflectometer_inst/sampler_dut/cnt_smp_num[1]} {reflectometer_inst/sampler_dut/cnt_smp_num[2]} {reflectometer_inst/sampler_dut/cnt_smp_num[3]} {reflectometer_inst/sampler_dut/cnt_smp_num[4]} {reflectometer_inst/sampler_dut/cnt_smp_num[5]} {reflectometer_inst/sampler_dut/cnt_smp_num[6]} {reflectometer_inst/sampler_dut/cnt_smp_num[7]} {reflectometer_inst/sampler_dut/cnt_smp_num[8]} {reflectometer_inst/sampler_dut/cnt_smp_num[9]} {reflectometer_inst/sampler_dut/cnt_smp_num[10]} {reflectometer_inst/sampler_dut/cnt_smp_num[11]} {reflectometer_inst/sampler_dut/cnt_smp_num[12]} {reflectometer_inst/sampler_dut/cnt_smp_num[13]} {reflectometer_inst/sampler_dut/cnt_smp_num[14]} {reflectometer_inst/sampler_dut/cnt_smp_num[15]} {reflectometer_inst/sampler_dut/cnt_smp_num[16]} {reflectometer_inst/sampler_dut/cnt_smp_num[17]} {reflectometer_inst/sampler_dut/cnt_smp_num[18]} {reflectometer_inst/sampler_dut/cnt_smp_num[19]} {reflectometer_inst/sampler_dut/cnt_smp_num[20]} {reflectometer_inst/sampler_dut/cnt_smp_num[21]} {reflectometer_inst/sampler_dut/cnt_smp_num[22]} {reflectometer_inst/sampler_dut/cnt_smp_num[23]} {reflectometer_inst/sampler_dut/cnt_smp_num[24]} {reflectometer_inst/sampler_dut/cnt_smp_num[25]} {reflectometer_inst/sampler_dut/cnt_smp_num[26]} {reflectometer_inst/sampler_dut/cnt_smp_num[27]} {reflectometer_inst/sampler_dut/cnt_smp_num[28]} {reflectometer_inst/sampler_dut/cnt_smp_num[29]} {reflectometer_inst/sampler_dut/cnt_smp_num[30]} {reflectometer_inst/sampler_dut/cnt_smp_num[31]}]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe3]
|
||||||
|
set_property port_width 12 [get_debug_ports u_ila_0/probe3]
|
||||||
|
connect_debug_port u_ila_0/probe3 [get_nets [list {reflectometer_inst/sampler_dut/data_converted[0]} {reflectometer_inst/sampler_dut/data_converted[1]} {reflectometer_inst/sampler_dut/data_converted[2]} {reflectometer_inst/sampler_dut/data_converted[3]} {reflectometer_inst/sampler_dut/data_converted[4]} {reflectometer_inst/sampler_dut/data_converted[5]} {reflectometer_inst/sampler_dut/data_converted[6]} {reflectometer_inst/sampler_dut/data_converted[7]} {reflectometer_inst/sampler_dut/data_converted[8]} {reflectometer_inst/sampler_dut/data_converted[9]} {reflectometer_inst/sampler_dut/data_converted[10]} {reflectometer_inst/sampler_dut/data_converted[11]}]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe4]
|
||||||
|
set_property port_width 32 [get_debug_ports u_ila_0/probe4]
|
||||||
|
connect_debug_port u_ila_0/probe4 [get_nets [list {reflectometer_inst/sampler_dut/smp_num_reg[0]} {reflectometer_inst/sampler_dut/smp_num_reg[1]} {reflectometer_inst/sampler_dut/smp_num_reg[2]} {reflectometer_inst/sampler_dut/smp_num_reg[3]} {reflectometer_inst/sampler_dut/smp_num_reg[4]} {reflectometer_inst/sampler_dut/smp_num_reg[5]} {reflectometer_inst/sampler_dut/smp_num_reg[6]} {reflectometer_inst/sampler_dut/smp_num_reg[7]} {reflectometer_inst/sampler_dut/smp_num_reg[8]} {reflectometer_inst/sampler_dut/smp_num_reg[9]} {reflectometer_inst/sampler_dut/smp_num_reg[10]} {reflectometer_inst/sampler_dut/smp_num_reg[11]} {reflectometer_inst/sampler_dut/smp_num_reg[12]} {reflectometer_inst/sampler_dut/smp_num_reg[13]} {reflectometer_inst/sampler_dut/smp_num_reg[14]} {reflectometer_inst/sampler_dut/smp_num_reg[15]} {reflectometer_inst/sampler_dut/smp_num_reg[16]} {reflectometer_inst/sampler_dut/smp_num_reg[17]} {reflectometer_inst/sampler_dut/smp_num_reg[18]} {reflectometer_inst/sampler_dut/smp_num_reg[19]} {reflectometer_inst/sampler_dut/smp_num_reg[20]} {reflectometer_inst/sampler_dut/smp_num_reg[21]} {reflectometer_inst/sampler_dut/smp_num_reg[22]} {reflectometer_inst/sampler_dut/smp_num_reg[23]} {reflectometer_inst/sampler_dut/smp_num_reg[24]} {reflectometer_inst/sampler_dut/smp_num_reg[25]} {reflectometer_inst/sampler_dut/smp_num_reg[26]} {reflectometer_inst/sampler_dut/smp_num_reg[27]} {reflectometer_inst/sampler_dut/smp_num_reg[28]} {reflectometer_inst/sampler_dut/smp_num_reg[29]} {reflectometer_inst/sampler_dut/smp_num_reg[30]} {reflectometer_inst/sampler_dut/smp_num_reg[31]}]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe5]
|
||||||
|
set_property port_width 12 [get_debug_ports u_ila_0/probe5]
|
||||||
|
connect_debug_port u_ila_0/probe5 [get_nets [list {reflectometer_inst/accum_m_axis_tdata[0]} {reflectometer_inst/accum_m_axis_tdata[1]} {reflectometer_inst/accum_m_axis_tdata[2]} {reflectometer_inst/accum_m_axis_tdata[3]} {reflectometer_inst/accum_m_axis_tdata[4]} {reflectometer_inst/accum_m_axis_tdata[5]} {reflectometer_inst/accum_m_axis_tdata[6]} {reflectometer_inst/accum_m_axis_tdata[7]} {reflectometer_inst/accum_m_axis_tdata[8]} {reflectometer_inst/accum_m_axis_tdata[9]} {reflectometer_inst/accum_m_axis_tdata[10]} {reflectometer_inst/accum_m_axis_tdata[11]}]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe6]
|
||||||
|
set_property port_width 16 [get_debug_ports u_ila_0/probe6]
|
||||||
|
connect_debug_port u_ila_0/probe6 [get_nets [list {reflectometer_inst/adc_pulse_num[0]} {reflectometer_inst/adc_pulse_num[1]} {reflectometer_inst/adc_pulse_num[2]} {reflectometer_inst/adc_pulse_num[3]} {reflectometer_inst/adc_pulse_num[4]} {reflectometer_inst/adc_pulse_num[5]} {reflectometer_inst/adc_pulse_num[6]} {reflectometer_inst/adc_pulse_num[7]} {reflectometer_inst/adc_pulse_num[8]} {reflectometer_inst/adc_pulse_num[9]} {reflectometer_inst/adc_pulse_num[10]} {reflectometer_inst/adc_pulse_num[11]} {reflectometer_inst/adc_pulse_num[12]} {reflectometer_inst/adc_pulse_num[13]} {reflectometer_inst/adc_pulse_num[14]} {reflectometer_inst/adc_pulse_num[15]}]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe7]
|
||||||
|
set_property port_width 32 [get_debug_ports u_ila_0/probe7]
|
||||||
|
connect_debug_port u_ila_0/probe7 [get_nets [list {reflectometer_inst/adc_pulse_period[0]} {reflectometer_inst/adc_pulse_period[1]} {reflectometer_inst/adc_pulse_period[2]} {reflectometer_inst/adc_pulse_period[3]} {reflectometer_inst/adc_pulse_period[4]} {reflectometer_inst/adc_pulse_period[5]} {reflectometer_inst/adc_pulse_period[6]} {reflectometer_inst/adc_pulse_period[7]} {reflectometer_inst/adc_pulse_period[8]} {reflectometer_inst/adc_pulse_period[9]} {reflectometer_inst/adc_pulse_period[10]} {reflectometer_inst/adc_pulse_period[11]} {reflectometer_inst/adc_pulse_period[12]} {reflectometer_inst/adc_pulse_period[13]} {reflectometer_inst/adc_pulse_period[14]} {reflectometer_inst/adc_pulse_period[15]} {reflectometer_inst/adc_pulse_period[16]} {reflectometer_inst/adc_pulse_period[17]} {reflectometer_inst/adc_pulse_period[18]} {reflectometer_inst/adc_pulse_period[19]} {reflectometer_inst/adc_pulse_period[20]} {reflectometer_inst/adc_pulse_period[21]} {reflectometer_inst/adc_pulse_period[22]} {reflectometer_inst/adc_pulse_period[23]} {reflectometer_inst/adc_pulse_period[24]} {reflectometer_inst/adc_pulse_period[25]} {reflectometer_inst/adc_pulse_period[26]} {reflectometer_inst/adc_pulse_period[27]} {reflectometer_inst/adc_pulse_period[28]} {reflectometer_inst/adc_pulse_period[29]} {reflectometer_inst/adc_pulse_period[30]} {reflectometer_inst/adc_pulse_period[31]}]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe8]
|
||||||
|
set_property port_width 12 [get_debug_ports u_ila_0/probe8]
|
||||||
|
connect_debug_port u_ila_0/probe8 [get_nets [list {ch2_data_IBUF[0]} {ch2_data_IBUF[1]} {ch2_data_IBUF[2]} {ch2_data_IBUF[3]} {ch2_data_IBUF[4]} {ch2_data_IBUF[5]} {ch2_data_IBUF[6]} {ch2_data_IBUF[7]} {ch2_data_IBUF[8]} {ch2_data_IBUF[9]} {ch2_data_IBUF[10]} {ch2_data_IBUF[11]}]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe9]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_0/probe9]
|
||||||
|
connect_debug_port u_ila_0/probe9 [get_nets [list reflectometer_inst/acum_m_axis_tvalid]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe10]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_0/probe10]
|
||||||
|
connect_debug_port u_ila_0/probe10 [get_nets [list reflectometer_inst/adc_rst]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe11]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_0/probe11]
|
||||||
|
connect_debug_port u_ila_0/probe11 [get_nets [list reflectometer_inst/adc_start]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe12]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_0/probe12]
|
||||||
|
connect_debug_port u_ila_0/probe12 [get_nets [list reflectometer_inst/sampler_dut/buffer_ready]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe13]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_0/probe13]
|
||||||
|
connect_debug_port u_ila_0/probe13 [get_nets [list reflectometer_inst/sampler_dut/enable]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe14]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_0/probe14]
|
||||||
|
connect_debug_port u_ila_0/probe14 [get_nets [list reflectometer_inst/finish]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe15]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_0/probe15]
|
||||||
|
connect_debug_port u_ila_0/probe15 [get_nets [list reflectometer_inst/sampler_dut/out_of_range_reg]]
|
||||||
|
create_debug_port u_ila_0 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe16]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_0/probe16]
|
||||||
|
connect_debug_port u_ila_0/probe16 [get_nets [list reflectometer_inst/sample_req]]
|
||||||
|
create_debug_core u_ila_1 ila
|
||||||
|
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_1]
|
||||||
|
set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_1]
|
||||||
|
set_property C_ADV_TRIGGER false [get_debug_cores u_ila_1]
|
||||||
|
set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_1]
|
||||||
|
set_property C_EN_STRG_QUAL false [get_debug_cores u_ila_1]
|
||||||
|
set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_1]
|
||||||
|
set_property C_TRIGIN_EN false [get_debug_cores u_ila_1]
|
||||||
|
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_1]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_1/clk]
|
||||||
|
connect_debug_port u_ila_1/clk [get_nets [list reflectometer_inst/clk_wiz_ctrl_inst/inst/clk_out1]]
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe0]
|
||||||
|
set_property port_width 32 [get_debug_ports u_ila_1/probe0]
|
||||||
|
connect_debug_port u_ila_1/probe0 [get_nets [list {reflectometer_inst/generator_inst/cnt_period[0]} {reflectometer_inst/generator_inst/cnt_period[1]} {reflectometer_inst/generator_inst/cnt_period[2]} {reflectometer_inst/generator_inst/cnt_period[3]} {reflectometer_inst/generator_inst/cnt_period[4]} {reflectometer_inst/generator_inst/cnt_period[5]} {reflectometer_inst/generator_inst/cnt_period[6]} {reflectometer_inst/generator_inst/cnt_period[7]} {reflectometer_inst/generator_inst/cnt_period[8]} {reflectometer_inst/generator_inst/cnt_period[9]} {reflectometer_inst/generator_inst/cnt_period[10]} {reflectometer_inst/generator_inst/cnt_period[11]} {reflectometer_inst/generator_inst/cnt_period[12]} {reflectometer_inst/generator_inst/cnt_period[13]} {reflectometer_inst/generator_inst/cnt_period[14]} {reflectometer_inst/generator_inst/cnt_period[15]} {reflectometer_inst/generator_inst/cnt_period[16]} {reflectometer_inst/generator_inst/cnt_period[17]} {reflectometer_inst/generator_inst/cnt_period[18]} {reflectometer_inst/generator_inst/cnt_period[19]} {reflectometer_inst/generator_inst/cnt_period[20]} {reflectometer_inst/generator_inst/cnt_period[21]} {reflectometer_inst/generator_inst/cnt_period[22]} {reflectometer_inst/generator_inst/cnt_period[23]} {reflectometer_inst/generator_inst/cnt_period[24]} {reflectometer_inst/generator_inst/cnt_period[25]} {reflectometer_inst/generator_inst/cnt_period[26]} {reflectometer_inst/generator_inst/cnt_period[27]} {reflectometer_inst/generator_inst/cnt_period[28]} {reflectometer_inst/generator_inst/cnt_period[29]} {reflectometer_inst/generator_inst/cnt_period[30]} {reflectometer_inst/generator_inst/cnt_period[31]}]]
|
||||||
|
create_debug_port u_ila_1 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe1]
|
||||||
|
set_property port_width 16 [get_debug_ports u_ila_1/probe1]
|
||||||
|
connect_debug_port u_ila_1/probe1 [get_nets [list {reflectometer_inst/generator_inst/cnt_pulse_num[0]} {reflectometer_inst/generator_inst/cnt_pulse_num[1]} {reflectometer_inst/generator_inst/cnt_pulse_num[2]} {reflectometer_inst/generator_inst/cnt_pulse_num[3]} {reflectometer_inst/generator_inst/cnt_pulse_num[4]} {reflectometer_inst/generator_inst/cnt_pulse_num[5]} {reflectometer_inst/generator_inst/cnt_pulse_num[6]} {reflectometer_inst/generator_inst/cnt_pulse_num[7]} {reflectometer_inst/generator_inst/cnt_pulse_num[8]} {reflectometer_inst/generator_inst/cnt_pulse_num[9]} {reflectometer_inst/generator_inst/cnt_pulse_num[10]} {reflectometer_inst/generator_inst/cnt_pulse_num[11]} {reflectometer_inst/generator_inst/cnt_pulse_num[12]} {reflectometer_inst/generator_inst/cnt_pulse_num[13]} {reflectometer_inst/generator_inst/cnt_pulse_num[14]} {reflectometer_inst/generator_inst/cnt_pulse_num[15]}]]
|
||||||
|
create_debug_port u_ila_1 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe2]
|
||||||
|
set_property port_width 14 [get_debug_ports u_ila_1/probe2]
|
||||||
|
connect_debug_port u_ila_1/probe2 [get_nets [list {reflectometer_inst/dac_pulse_height[0]} {reflectometer_inst/dac_pulse_height[1]} {reflectometer_inst/dac_pulse_height[2]} {reflectometer_inst/dac_pulse_height[3]} {reflectometer_inst/dac_pulse_height[4]} {reflectometer_inst/dac_pulse_height[5]} {reflectometer_inst/dac_pulse_height[6]} {reflectometer_inst/dac_pulse_height[7]} {reflectometer_inst/dac_pulse_height[8]} {reflectometer_inst/dac_pulse_height[9]} {reflectometer_inst/dac_pulse_height[10]} {reflectometer_inst/dac_pulse_height[11]} {reflectometer_inst/dac_pulse_height[12]} {reflectometer_inst/dac_pulse_height[13]}]]
|
||||||
|
create_debug_port u_ila_1 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe3]
|
||||||
|
set_property port_width 32 [get_debug_ports u_ila_1/probe3]
|
||||||
|
connect_debug_port u_ila_1/probe3 [get_nets [list {reflectometer_inst/dac_pulse_width[0]} {reflectometer_inst/dac_pulse_width[1]} {reflectometer_inst/dac_pulse_width[2]} {reflectometer_inst/dac_pulse_width[3]} {reflectometer_inst/dac_pulse_width[4]} {reflectometer_inst/dac_pulse_width[5]} {reflectometer_inst/dac_pulse_width[6]} {reflectometer_inst/dac_pulse_width[7]} {reflectometer_inst/dac_pulse_width[8]} {reflectometer_inst/dac_pulse_width[9]} {reflectometer_inst/dac_pulse_width[10]} {reflectometer_inst/dac_pulse_width[11]} {reflectometer_inst/dac_pulse_width[12]} {reflectometer_inst/dac_pulse_width[13]} {reflectometer_inst/dac_pulse_width[14]} {reflectometer_inst/dac_pulse_width[15]} {reflectometer_inst/dac_pulse_width[16]} {reflectometer_inst/dac_pulse_width[17]} {reflectometer_inst/dac_pulse_width[18]} {reflectometer_inst/dac_pulse_width[19]} {reflectometer_inst/dac_pulse_width[20]} {reflectometer_inst/dac_pulse_width[21]} {reflectometer_inst/dac_pulse_width[22]} {reflectometer_inst/dac_pulse_width[23]} {reflectometer_inst/dac_pulse_width[24]} {reflectometer_inst/dac_pulse_width[25]} {reflectometer_inst/dac_pulse_width[26]} {reflectometer_inst/dac_pulse_width[27]} {reflectometer_inst/dac_pulse_width[28]} {reflectometer_inst/dac_pulse_width[29]} {reflectometer_inst/dac_pulse_width[30]} {reflectometer_inst/dac_pulse_width[31]}]]
|
||||||
|
create_debug_port u_ila_1 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe4]
|
||||||
|
set_property port_width 16 [get_debug_ports u_ila_1/probe4]
|
||||||
|
connect_debug_port u_ila_1/probe4 [get_nets [list {reflectometer_inst/dac_pulse_num[0]} {reflectometer_inst/dac_pulse_num[1]} {reflectometer_inst/dac_pulse_num[2]} {reflectometer_inst/dac_pulse_num[3]} {reflectometer_inst/dac_pulse_num[4]} {reflectometer_inst/dac_pulse_num[5]} {reflectometer_inst/dac_pulse_num[6]} {reflectometer_inst/dac_pulse_num[7]} {reflectometer_inst/dac_pulse_num[8]} {reflectometer_inst/dac_pulse_num[9]} {reflectometer_inst/dac_pulse_num[10]} {reflectometer_inst/dac_pulse_num[11]} {reflectometer_inst/dac_pulse_num[12]} {reflectometer_inst/dac_pulse_num[13]} {reflectometer_inst/dac_pulse_num[14]} {reflectometer_inst/dac_pulse_num[15]}]]
|
||||||
|
create_debug_port u_ila_1 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe5]
|
||||||
|
set_property port_width 32 [get_debug_ports u_ila_1/probe5]
|
||||||
|
connect_debug_port u_ila_1/probe5 [get_nets [list {reflectometer_inst/dac_pulse_period[0]} {reflectometer_inst/dac_pulse_period[1]} {reflectometer_inst/dac_pulse_period[2]} {reflectometer_inst/dac_pulse_period[3]} {reflectometer_inst/dac_pulse_period[4]} {reflectometer_inst/dac_pulse_period[5]} {reflectometer_inst/dac_pulse_period[6]} {reflectometer_inst/dac_pulse_period[7]} {reflectometer_inst/dac_pulse_period[8]} {reflectometer_inst/dac_pulse_period[9]} {reflectometer_inst/dac_pulse_period[10]} {reflectometer_inst/dac_pulse_period[11]} {reflectometer_inst/dac_pulse_period[12]} {reflectometer_inst/dac_pulse_period[13]} {reflectometer_inst/dac_pulse_period[14]} {reflectometer_inst/dac_pulse_period[15]} {reflectometer_inst/dac_pulse_period[16]} {reflectometer_inst/dac_pulse_period[17]} {reflectometer_inst/dac_pulse_period[18]} {reflectometer_inst/dac_pulse_period[19]} {reflectometer_inst/dac_pulse_period[20]} {reflectometer_inst/dac_pulse_period[21]} {reflectometer_inst/dac_pulse_period[22]} {reflectometer_inst/dac_pulse_period[23]} {reflectometer_inst/dac_pulse_period[24]} {reflectometer_inst/dac_pulse_period[25]} {reflectometer_inst/dac_pulse_period[26]} {reflectometer_inst/dac_pulse_period[27]} {reflectometer_inst/dac_pulse_period[28]} {reflectometer_inst/dac_pulse_period[29]} {reflectometer_inst/dac_pulse_period[30]} {reflectometer_inst/dac_pulse_period[31]}]]
|
||||||
|
create_debug_port u_ila_1 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe6]
|
||||||
|
set_property port_width 14 [get_debug_ports u_ila_1/probe6]
|
||||||
|
connect_debug_port u_ila_1/probe6 [get_nets [list {reflectometer_inst/p2_data[0]} {reflectometer_inst/p2_data[1]} {reflectometer_inst/p2_data[2]} {reflectometer_inst/p2_data[3]} {reflectometer_inst/p2_data[4]} {reflectometer_inst/p2_data[5]} {reflectometer_inst/p2_data[6]} {reflectometer_inst/p2_data[7]} {reflectometer_inst/p2_data[8]} {reflectometer_inst/p2_data[9]} {reflectometer_inst/p2_data[10]} {reflectometer_inst/p2_data[11]} {reflectometer_inst/p2_data[12]} {reflectometer_inst/p2_data[13]}]]
|
||||||
|
create_debug_port u_ila_1 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe7]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_1/probe7]
|
||||||
|
connect_debug_port u_ila_1/probe7 [get_nets [list reflectometer_inst/dac_rst]]
|
||||||
|
create_debug_port u_ila_1 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe8]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_1/probe8]
|
||||||
|
connect_debug_port u_ila_1/probe8 [get_nets [list reflectometer_inst/dac_start]]
|
||||||
|
create_debug_port u_ila_1 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe9]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_1/probe9]
|
||||||
|
connect_debug_port u_ila_1/probe9 [get_nets [list reflectometer_inst/generator_inst/enable]]
|
||||||
|
create_debug_port u_ila_1 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_1/probe10]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_1/probe10]
|
||||||
|
connect_debug_port u_ila_1/probe10 [get_nets [list reflectometer_inst/sample_done]]
|
||||||
|
create_debug_core u_ila_2 ila
|
||||||
|
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_2]
|
||||||
|
set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_2]
|
||||||
|
set_property C_ADV_TRIGGER false [get_debug_cores u_ila_2]
|
||||||
|
set_property C_DATA_DEPTH 1024 [get_debug_cores u_ila_2]
|
||||||
|
set_property C_EN_STRG_QUAL false [get_debug_cores u_ila_2]
|
||||||
|
set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_2]
|
||||||
|
set_property C_TRIGIN_EN false [get_debug_cores u_ila_2]
|
||||||
|
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_2]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_2/clk]
|
||||||
|
connect_debug_port u_ila_2/clk [get_nets [list e_gtxc_OBUF_BUFG]]
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe0]
|
||||||
|
set_property port_width 8 [get_debug_ports u_ila_2/probe0]
|
||||||
|
connect_debug_port u_ila_2/probe0 [get_nets [list {m_axis_rx_tdata[0]} {m_axis_rx_tdata[1]} {m_axis_rx_tdata[2]} {m_axis_rx_tdata[3]} {m_axis_rx_tdata[4]} {m_axis_rx_tdata[5]} {m_axis_rx_tdata[6]} {m_axis_rx_tdata[7]}]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe1]
|
||||||
|
set_property port_width 8 [get_debug_ports u_ila_2/probe1]
|
||||||
|
connect_debug_port u_ila_2/probe1 [get_nets [list {s_axis_tx_tdata[0]} {s_axis_tx_tdata[1]} {s_axis_tx_tdata[2]} {s_axis_tx_tdata[3]} {s_axis_tx_tdata[4]} {s_axis_tx_tdata[5]} {s_axis_tx_tdata[6]} {s_axis_tx_tdata[7]}]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe2]
|
||||||
|
set_property port_width 3 [get_debug_ports u_ila_2/probe2]
|
||||||
|
connect_debug_port u_ila_2/probe2 [get_nets [list {reflectometer_inst/accumulator_top_dut/output_async_fifo/rd_state[0]} {reflectometer_inst/accumulator_top_dut/output_async_fifo/rd_state[1]} {reflectometer_inst/accumulator_top_dut/output_async_fifo/rd_state[2]}]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe3]
|
||||||
|
set_property port_width 3 [get_debug_ports u_ila_2/probe3]
|
||||||
|
connect_debug_port u_ila_2/probe3 [get_nets [list {reflectometer_inst/udp_ctrl_inst/eth_state[0]} {reflectometer_inst/udp_ctrl_inst/eth_state[1]} {reflectometer_inst/udp_ctrl_inst/eth_state[2]}]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe4]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_2/probe4]
|
||||||
|
connect_debug_port u_ila_2/probe4 [get_nets [list reflectometer_inst/udp_ctrl_inst/busy_flag_eth]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe5]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_2/probe5]
|
||||||
|
connect_debug_port u_ila_2/probe5 [get_nets [list m_axis_rx_tlast]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe6]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_2/probe6]
|
||||||
|
connect_debug_port u_ila_2/probe6 [get_nets [list m_axis_rx_tready]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe7]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_2/probe7]
|
||||||
|
connect_debug_port u_ila_2/probe7 [get_nets [list m_axis_rx_tvalid]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe8]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_2/probe8]
|
||||||
|
connect_debug_port u_ila_2/probe8 [get_nets [list req_ready]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe9]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_2/probe9]
|
||||||
|
connect_debug_port u_ila_2/probe9 [get_nets [list s_axis_tx_tlast]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe10]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_2/probe10]
|
||||||
|
connect_debug_port u_ila_2/probe10 [get_nets [list s_axis_tx_tready]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe11]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_2/probe11]
|
||||||
|
connect_debug_port u_ila_2/probe11 [get_nets [list s_axis_tx_tvalid]]
|
||||||
|
create_debug_port u_ila_2 probe
|
||||||
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_2/probe12]
|
||||||
|
set_property port_width 1 [get_debug_ports u_ila_2/probe12]
|
||||||
|
connect_debug_port u_ila_2/probe12 [get_nets [list send_req]]
|
||||||
|
set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
|
||||||
|
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
|
||||||
|
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
|
||||||
|
connect_debug_port dbg_hub/clk [get_nets e_gtxc_OBUF_BUFG]
|
||||||
689
designs/reflectometer_prototype/ip/clk_wiz_ctrl_inst.xci
Normal file
689
designs/reflectometer_prototype/ip/clk_wiz_ctrl_inst.xci
Normal file
@ -0,0 +1,689 @@
|
|||||||
|
{
|
||||||
|
"schema": "xilinx.com:schema:json_instance:1.0",
|
||||||
|
"ip_inst": {
|
||||||
|
"xci_name": "clk_wiz_ctrl_inst",
|
||||||
|
"component_reference": "xilinx.com:ip:clk_wiz:6.0",
|
||||||
|
"ip_revision": "16",
|
||||||
|
"gen_directory": "../../../../eth_generator_top.gen/sources_1/ip/clk_wiz_ctrl_inst",
|
||||||
|
"parameters": {
|
||||||
|
"component_parameters": {
|
||||||
|
"Component_Name": [ { "value": "clk_wiz_ctrl_inst", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USER_CLK_FREQ0": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"USER_CLK_FREQ1": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"USER_CLK_FREQ2": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"USER_CLK_FREQ3": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"ENABLE_CLOCK_MONITOR": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"OPTIMIZE_CLOCKING_STRUCTURE_EN": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"ENABLE_USER_CLOCK0": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"ENABLE_USER_CLOCK1": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"ENABLE_USER_CLOCK2": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"ENABLE_USER_CLOCK3": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"Enable_PLL0": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"Enable_PLL1": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"REF_CLK_FREQ": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PRECISION": [ { "value": "1", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PRIMITIVE": [ { "value": "MMCM", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PRIMTYPE_SEL": [ { "value": "mmcm_adv", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLOCK_MGR_TYPE": [ { "value": "auto", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USE_FREQ_SYNTH": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_SPREAD_SPECTRUM": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_PHASE_ALIGNMENT": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_MIN_POWER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_DYN_PHASE_SHIFT": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_DYN_RECONFIG": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"JITTER_SEL": [ { "value": "No_Jitter", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PRIM_IN_FREQ": [ { "value": "200.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PRIM_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"IN_FREQ_UNITS": [ { "value": "Units_MHz", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PHASESHIFT_MODE": [ { "value": "WAVEFORM", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"IN_JITTER_UNITS": [ { "value": "Units_UI", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"RELATIVE_INCLK": [ { "value": "REL_PRIMARY", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USE_INCLK_SWITCHOVER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"SECONDARY_IN_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"SECONDARY_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"SECONDARY_PORT": [ { "value": "clk_in2", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"SECONDARY_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"JITTER_OPTIONS": [ { "value": "UI", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKIN1_UI_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKIN2_UI_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PRIM_IN_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"SECONDARY_IN_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKIN1_JITTER_PS": [ { "value": "50.0", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKIN2_JITTER_PS": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT1_USED": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT2_USED": [ { "value": "true", "value_src": "user", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT3_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT4_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT5_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT6_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT7_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"NUM_OUT_CLKS": [ { "value": "2", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLK_OUT1_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT2_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT3_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT4_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT5_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT6_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_OUT7_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"PRIMARY_PORT": [ { "value": "clk_in1", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT1_PORT": [ { "value": "clk_out1", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT2_PORT": [ { "value": "clk_out2", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT3_PORT": [ { "value": "clk_out3", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT4_PORT": [ { "value": "clk_out4", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT5_PORT": [ { "value": "clk_out5", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT6_PORT": [ { "value": "clk_out6", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_OUT7_PORT": [ { "value": "clk_out7", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DADDR_PORT": [ { "value": "daddr", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DCLK_PORT": [ { "value": "dclk", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DRDY_PORT": [ { "value": "drdy", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DWE_PORT": [ { "value": "dwe", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DIN_PORT": [ { "value": "din", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DOUT_PORT": [ { "value": "dout", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DEN_PORT": [ { "value": "den", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PSCLK_PORT": [ { "value": "psclk", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PSEN_PORT": [ { "value": "psen", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PSINCDEC_PORT": [ { "value": "psincdec", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PSDONE_PORT": [ { "value": "psdone", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT1_REQUESTED_OUT_FREQ": [ { "value": "125", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT1_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT1_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "65.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT2_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT2_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT3_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT3_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT3_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT4_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT4_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT4_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT5_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT5_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT5_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT6_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT6_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT6_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT7_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT7_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT7_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"USE_MAX_I_JITTER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_MIN_O_JITTER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT1_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT2_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT3_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT4_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT5_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT6_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT7_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"PRIM_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT1_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT2_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT3_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT4_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT5_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT6_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKOUT7_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"FEEDBACK_SOURCE": [ { "value": "FDBK_AUTO", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_IN_SIGNALING": [ { "value": "SINGLE", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_IN_PORT": [ { "value": "clkfb_in", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_IN_P_PORT": [ { "value": "clkfb_in_p", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_IN_N_PORT": [ { "value": "clkfb_in_n", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_OUT_PORT": [ { "value": "clkfb_out", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_OUT_P_PORT": [ { "value": "clkfb_out_p", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_OUT_N_PORT": [ { "value": "clkfb_out_n", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PLATFORM": [ { "value": "UNKNOWN", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"SUMMARY_STRINGS": [ { "value": "empty", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USE_LOCKED": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CALC_DONE": [ { "value": "empty", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USE_RESET": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_POWER_DOWN": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_STATUS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_FREEZE": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_CLK_VALID": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_INCLK_STOPPED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_CLKFB_STOPPED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"RESET_PORT": [ { "value": "reset", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"LOCKED_PORT": [ { "value": "locked", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"POWER_DOWN_PORT": [ { "value": "power_down", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_VALID_PORT": [ { "value": "CLK_VALID", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"STATUS_PORT": [ { "value": "STATUS", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_IN_SEL_PORT": [ { "value": "clk_in_sel", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"INPUT_CLK_STOPPED_PORT": [ { "value": "input_clk_stopped", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLKFB_STOPPED_PORT": [ { "value": "clkfb_stopped", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"SS_MODE": [ { "value": "CENTER_HIGH", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"SS_MOD_FREQ": [ { "value": "250", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"SS_MOD_TIME": [ { "value": "0.004", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"OVERRIDE_MMCM": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_NOTES": [ { "value": "None", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"MMCM_DIVCLK_DIVIDE": [ { "value": "4", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"MMCM_CLKFBOUT_MULT_F": [ { "value": "16.875", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKFBOUT_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKIN1_PERIOD": [ { "value": "5.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKIN2_PERIOD": [ { "value": "10.0", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT4_CASCADE": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLOCK_HOLD": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_COMPENSATION": [ { "value": "ZHOLD", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"MMCM_REF_JITTER1": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_REF_JITTER2": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_STARTUP_WAIT": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT0_DIVIDE_F": [ { "value": "6.750", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT0_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT1_DIVIDE": [ { "value": "13", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT1_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT2_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT3_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT4_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT5_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT6_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT6_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT6_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"MMCM_CLKOUT6_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"OVERRIDE_PLL": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"PLL_NOTES": [ { "value": "None", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PLL_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PLL_CLKFBOUT_MULT": [ { "value": "4", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLK_FEEDBACK": [ { "value": "CLKFBOUT", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PLL_DIVCLK_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKIN_PERIOD": [ { "value": "10.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_COMPENSATION": [ { "value": "SYSTEM_SYNCHRONOUS", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"PLL_REF_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT0_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT1_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"PLL_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"RESET_TYPE": [ { "value": "ACTIVE_HIGH", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"USE_SAFE_CLOCK_STARTUP": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"USE_CLOCK_SEQUENCING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUT1_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT2_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT3_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT4_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT5_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT6_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"CLKOUT7_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ],
|
||||||
|
"USE_BOARD_FLOW": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLK_IN1_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CLK_IN2_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DIFF_CLK_IN1_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"DIFF_CLK_IN2_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"AUTO_PRIMITIVE": [ { "value": "MMCM", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"RESET_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"ENABLE_CDDC": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CDDCDONE_PORT": [ { "value": "cddcdone", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"CDDCREQ_PORT": [ { "value": "cddcreq", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"ENABLE_CLKOUTPHY": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"CLKOUTPHY_REQUESTED_FREQ": [ { "value": "600.000", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT1_JITTER": [ { "value": "162.582", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT1_PHASE_ERROR": [ { "value": "137.238", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT2_JITTER": [ { "value": "185.296", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT2_PHASE_ERROR": [ { "value": "137.238", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT3_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT3_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT4_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT4_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT5_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT5_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT6_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT6_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT7_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"CLKOUT7_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ],
|
||||||
|
"INPUT_MODE": [ { "value": "frequency", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"INTERFACE_SELECTION": [ { "value": "Enable_AXI", "resolve_type": "user", "usage": "all" } ],
|
||||||
|
"AXI_DRP": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ],
|
||||||
|
"PHASE_DUTY_CONFIG": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ]
|
||||||
|
},
|
||||||
|
"model_parameters": {
|
||||||
|
"C_CLKOUT2_USED": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USER_CLK_FREQ0": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_AUTO_PRIMITIVE": [ { "value": "MMCM", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_USER_CLK_FREQ1": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_USER_CLK_FREQ2": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_USER_CLK_FREQ3": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_ENABLE_CLOCK_MONITOR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_ENABLE_USER_CLOCK0": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_ENABLE_USER_CLOCK1": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_ENABLE_USER_CLOCK2": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_ENABLE_USER_CLOCK3": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_Enable_PLL0": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_Enable_PLL1": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_REF_CLK_FREQ": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PRECISION": [ { "value": "1", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLKOUT1_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLKOUT2_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLKOUT3_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLKOUT4_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"c_component_name": [ { "value": "clk_wiz_ctrl_inst", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLATFORM": [ { "value": "UNKNOWN", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_USE_FREQ_SYNTH": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_PHASE_ALIGNMENT": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PRIM_IN_JITTER": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_SECONDARY_IN_JITTER": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_JITTER_SEL": [ { "value": "No_Jitter", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_USE_MIN_POWER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_MIN_O_JITTER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_MAX_I_JITTER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_DYN_PHASE_SHIFT": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_OPTIMIZE_CLOCKING_STRUCTURE_EN": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_INCLK_SWITCHOVER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_DYN_RECONFIG": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_SPREAD_SPECTRUM": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_FAST_SIMULATION": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PRIMTYPE_SEL": [ { "value": "AUTO", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_USE_CLK_VALID": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PRIM_IN_FREQ": [ { "value": "200.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PRIM_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_IN_FREQ_UNITS": [ { "value": "Units_MHz", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_SECONDARY_IN_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_SECONDARY_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_FEEDBACK_SOURCE": [ { "value": "FDBK_AUTO", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PRIM_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PHASESHIFT_MODE": [ { "value": "WAVEFORM", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_SECONDARY_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_IN_SIGNALING": [ { "value": "SINGLE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_USE_RESET": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_RESET_LOW": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_LOCKED": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_INCLK_STOPPED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLKFB_STOPPED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_POWER_DOWN": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_STATUS": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_FREEZE": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_NUM_OUT_CLKS": [ { "value": "2", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_INCLK_SUM_ROW0": [ { "value": "Input Clock Freq (MHz) Input Jitter (UI)", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_INCLK_SUM_ROW1": [ { "value": "__primary_________200.000____________0.010", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_INCLK_SUM_ROW2": [ { "value": "no_secondary_input_clock ", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW0A": [ { "value": " Output Output Phase Duty Cycle Pk-to-Pk Phase", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW0B": [ { "value": " Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW1": [ { "value": "clk_out1__125.00000______0.000______50.0______162.582____137.238", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW2": [ { "value": "clk_out2__64.90385______0.000______50.0______185.296____137.238", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW3": [ { "value": "no_CLK_OUT3_output", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW4": [ { "value": "no_CLK_OUT4_output", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW5": [ { "value": "no_CLK_OUT5_output", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW6": [ { "value": "no_CLK_OUT6_output", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OUTCLK_SUM_ROW7": [ { "value": "no_CLK_OUT7_output", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_REQUESTED_OUT_FREQ": [ { "value": "125", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "65.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_OUT_FREQ": [ { "value": "125.00000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_OUT_FREQ": [ { "value": "64.90385", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_DUTY_CYCLE": [ { "value": "50.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_DUTY_CYCLE": [ { "value": "50.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_USE_SAFE_CLOCK_STARTUP": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_USE_CLOCK_SEQUENCING": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_NOTES": [ { "value": "None", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKFBOUT_MULT_F": [ { "value": "16.875", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKIN1_PERIOD": [ { "value": "5.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKIN2_PERIOD": [ { "value": "10.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT4_CASCADE": [ { "value": "FALSE", "resolve_type": "generated", "format": "bool", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLOCK_HOLD": [ { "value": "FALSE", "resolve_type": "generated", "format": "bool", "usage": "all" } ],
|
||||||
|
"C_MMCM_COMPENSATION": [ { "value": "ZHOLD", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_DIVCLK_DIVIDE": [ { "value": "4", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_REF_JITTER1": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_REF_JITTER2": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_STARTUP_WAIT": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT0_DIVIDE_F": [ { "value": "6.750", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT1_DIVIDE": [ { "value": "13", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT6_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT6_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT6_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKFBOUT_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT0_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT1_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT2_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT3_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT4_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT5_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCM_CLKOUT6_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLL_NOTES": [ { "value": "No notes", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLL_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLL_CLK_FEEDBACK": [ { "value": "CLKFBOUT", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKFBOUT_MULT": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKIN_PERIOD": [ { "value": "1.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_COMPENSATION": [ { "value": "SYSTEM_SYNCHRONOUS", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLL_DIVCLK_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_REF_JITTER": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT0_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT1_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PLL_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLOCK_MGR_TYPE": [ { "value": "NA", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_OVERRIDE_MMCM": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_OVERRIDE_PLL": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_PRIMARY_PORT": [ { "value": "clk_in1", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_SECONDARY_PORT": [ { "value": "clk_in2", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT1_PORT": [ { "value": "clk_out1", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT2_PORT": [ { "value": "clk_out2", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT3_PORT": [ { "value": "clk_out3", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT4_PORT": [ { "value": "clk_out4", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT5_PORT": [ { "value": "clk_out5", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT6_PORT": [ { "value": "clk_out6", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_OUT7_PORT": [ { "value": "clk_out7", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_RESET_PORT": [ { "value": "reset", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_LOCKED_PORT": [ { "value": "locked", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_IN_PORT": [ { "value": "clkfb_in", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_IN_P_PORT": [ { "value": "clkfb_in_p", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_IN_N_PORT": [ { "value": "clkfb_in_n", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_OUT_PORT": [ { "value": "clkfb_out", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_OUT_P_PORT": [ { "value": "clkfb_out_p", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_OUT_N_PORT": [ { "value": "clkfb_out_n", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_POWER_DOWN_PORT": [ { "value": "power_down", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DADDR_PORT": [ { "value": "daddr", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DCLK_PORT": [ { "value": "dclk", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DRDY_PORT": [ { "value": "drdy", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DWE_PORT": [ { "value": "dwe", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIN_PORT": [ { "value": "din", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DOUT_PORT": [ { "value": "dout", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DEN_PORT": [ { "value": "den", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PSCLK_PORT": [ { "value": "psclk", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PSEN_PORT": [ { "value": "psen", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PSINCDEC_PORT": [ { "value": "psincdec", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PSDONE_PORT": [ { "value": "psdone", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_VALID_PORT": [ { "value": "CLK_VALID", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_STATUS_PORT": [ { "value": "STATUS", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLK_IN_SEL_PORT": [ { "value": "clk_in_sel", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_INPUT_CLK_STOPPED_PORT": [ { "value": "input_clk_stopped", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFB_STOPPED_PORT": [ { "value": "clkfb_stopped", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKIN1_JITTER_PS": [ { "value": "50.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_CLKIN2_JITTER_PS": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_PRIMITIVE": [ { "value": "MMCM", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_SS_MODE": [ { "value": "CENTER_HIGH", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_SS_MOD_PERIOD": [ { "value": "4000", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_SS_MOD_TIME": [ { "value": "0.004", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_HAS_CDDC": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_CDDCDONE_PORT": [ { "value": "cddcdone", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CDDCREQ_PORT": [ { "value": "cddcreq", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUTPHY_MODE": [ { "value": "VCO", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_ENABLE_CLKOUTPHY": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_INTERFACE_SELECTION": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_S_AXI_ADDR_WIDTH": [ { "value": "11", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_S_AXI_DATA_WIDTH": [ { "value": "32", "resolve_type": "generated", "format": "long", "usage": "all" } ],
|
||||||
|
"C_POWER_REG": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT0_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT0_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFBOUT_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKFBOUT_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVCLK": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_LOCK_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_LOCK_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_LOCK_3": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_FILTER_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_FILTER_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE1_AUTO": [ { "value": "1", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE2_AUTO": [ { "value": "1.9259259259259258", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE3_AUTO": [ { "value": "0.14814814814814814", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE4_AUTO": [ { "value": "0.14814814814814814", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE5_AUTO": [ { "value": "0.14814814814814814", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE6_AUTO": [ { "value": "0.14814814814814814", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_DIVIDE7_AUTO": [ { "value": "0.14814814814814814", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLLBUFGCEDIV": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLLBUFGCEDIV1": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLLBUFGCEDIV2": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLLBUFGCEDIV3": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_PLLBUFGCEDIV4": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV1": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV2": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV3": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV4": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV5": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV6": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_MMCMBUFGCEDIV7": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT7_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT0_ACTUAL_FREQ": [ { "value": "125.00000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT1_ACTUAL_FREQ": [ { "value": "64.90385", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT2_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT3_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT4_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT5_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_CLKOUT6_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ],
|
||||||
|
"C_M_MAX": [ { "value": "64.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_M_MIN": [ { "value": "2.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_D_MAX": [ { "value": "80.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_D_MIN": [ { "value": "1.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_O_MAX": [ { "value": "128.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_O_MIN": [ { "value": "1.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_VCO_MIN": [ { "value": "600.000", "resolve_type": "generated", "format": "float", "usage": "all" } ],
|
||||||
|
"C_VCO_MAX": [ { "value": "1200.000", "resolve_type": "generated", "format": "float", "usage": "all" } ]
|
||||||
|
},
|
||||||
|
"project_parameters": {
|
||||||
|
"ARCHITECTURE": [ { "value": "artix7" } ],
|
||||||
|
"BASE_BOARD_PART": [ { "value": "" } ],
|
||||||
|
"BOARD_CONNECTIONS": [ { "value": "" } ],
|
||||||
|
"DEVICE": [ { "value": "xc7a35t" } ],
|
||||||
|
"PACKAGE": [ { "value": "fgg484" } ],
|
||||||
|
"PREFHDL": [ { "value": "VERILOG" } ],
|
||||||
|
"SILICON_REVISION": [ { "value": "" } ],
|
||||||
|
"SIMULATOR_LANGUAGE": [ { "value": "MIXED" } ],
|
||||||
|
"SPEEDGRADE": [ { "value": "-1" } ],
|
||||||
|
"STATIC_POWER": [ { "value": "" } ],
|
||||||
|
"TEMPERATURE_GRADE": [ { "value": "" } ]
|
||||||
|
},
|
||||||
|
"runtime_parameters": {
|
||||||
|
"IPCONTEXT": [ { "value": "IP_Flow" } ],
|
||||||
|
"IPREVISION": [ { "value": "16" } ],
|
||||||
|
"MANAGED": [ { "value": "TRUE" } ],
|
||||||
|
"OUTPUTDIR": [ { "value": "../../../../eth_generator_top.gen/sources_1/ip/clk_wiz_ctrl_inst" } ],
|
||||||
|
"SELECTEDSIMMODEL": [ { "value": "" } ],
|
||||||
|
"SHAREDDIR": [ { "value": "." } ],
|
||||||
|
"SWVERSION": [ { "value": "2025.1" } ],
|
||||||
|
"SYNTHESISFLOW": [ { "value": "OUT_OF_CONTEXT" } ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"boundary": {
|
||||||
|
"ports": {
|
||||||
|
"reset": [ { "direction": "in", "driver_value": "0" } ],
|
||||||
|
"clk_in1": [ { "direction": "in" } ],
|
||||||
|
"clk_out1": [ { "direction": "out" } ],
|
||||||
|
"clk_out2": [ { "direction": "out" } ],
|
||||||
|
"locked": [ { "direction": "out" } ]
|
||||||
|
},
|
||||||
|
"interfaces": {
|
||||||
|
"reset": {
|
||||||
|
"vlnv": "xilinx.com:signal:reset:1.0",
|
||||||
|
"abstraction_type": "xilinx.com:signal:reset_rtl:1.0",
|
||||||
|
"mode": "slave",
|
||||||
|
"parameters": {
|
||||||
|
"POLARITY": [ { "value": "ACTIVE_HIGH", "value_src": "constant", "usage": "all" } ],
|
||||||
|
"BOARD.ASSOCIATED_PARAM": [ { "value": "RESET_BOARD_INTERFACE", "value_src": "constant", "usage": "all" } ],
|
||||||
|
"INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ]
|
||||||
|
},
|
||||||
|
"port_maps": {
|
||||||
|
"RST": [ { "physical_name": "reset" } ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clock_CLK_IN1": {
|
||||||
|
"vlnv": "xilinx.com:signal:clock:1.0",
|
||||||
|
"abstraction_type": "xilinx.com:signal:clock_rtl:1.0",
|
||||||
|
"mode": "slave",
|
||||||
|
"parameters": {
|
||||||
|
"FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"BOARD.ASSOCIATED_PARAM": [ { "value": "CLK_IN1_BOARD_INTERFACE", "usage": "all", "is_static_object": false } ]
|
||||||
|
},
|
||||||
|
"port_maps": {
|
||||||
|
"CLK_IN1": [ { "physical_name": "clk_in1" } ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clock_CLK_OUT1": {
|
||||||
|
"vlnv": "xilinx.com:signal:clock:1.0",
|
||||||
|
"abstraction_type": "xilinx.com:signal:clock_rtl:1.0",
|
||||||
|
"mode": "master",
|
||||||
|
"parameters": {
|
||||||
|
"FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ]
|
||||||
|
},
|
||||||
|
"port_maps": {
|
||||||
|
"CLK_OUT1": [ { "physical_name": "clk_out1" } ]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clock_CLK_OUT2": {
|
||||||
|
"vlnv": "xilinx.com:signal:clock:1.0",
|
||||||
|
"abstraction_type": "xilinx.com:signal:clock_rtl:1.0",
|
||||||
|
"mode": "master",
|
||||||
|
"parameters": {
|
||||||
|
"FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ],
|
||||||
|
"INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ]
|
||||||
|
},
|
||||||
|
"port_maps": {
|
||||||
|
"CLK_OUT2": [ { "physical_name": "clk_out2" } ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
174
designs/reflectometer_prototype/prototype.sv
Normal file
174
designs/reflectometer_prototype/prototype.sv
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
`timescale 1 ns / 1 ns
|
||||||
|
|
||||||
|
module prototype_top #(
|
||||||
|
parameter int unsigned DAC_DATA_WIDTH = 14,
|
||||||
|
parameter int unsigned ADC_DATA_WIDTH = 12,
|
||||||
|
parameter PACK_FACTOR = 1,
|
||||||
|
parameter PROCESS_MODE = 0,
|
||||||
|
parameter ZERO_LEVEL = 8192,
|
||||||
|
parameter ACCUM_WIDTH = 32,
|
||||||
|
parameter N_MAX = 4096,
|
||||||
|
parameter WINDOW_SIZE = 65,
|
||||||
|
parameter PACKET_SIZE = 1024
|
||||||
|
)(
|
||||||
|
input sys_clk_p, // system clock positive
|
||||||
|
input sys_clk_n, // system clock negative
|
||||||
|
input rst_n, // reset ,low active
|
||||||
|
output [3:0] led, // display network rate status
|
||||||
|
output e_reset, // phy reset
|
||||||
|
output e_mdc, // phy emdio clock
|
||||||
|
inout e_mdio, // phy emdio data
|
||||||
|
input e_rxc, // 125Mhz ethernet gmii rx clock
|
||||||
|
input e_rxdv, // GMII recieving data valid
|
||||||
|
input e_rxer, // GMII recieving data error
|
||||||
|
input [7:0] e_rxd, // GMII recieving data
|
||||||
|
|
||||||
|
input e_txc, // 25Mhz ethernet mii tx clock
|
||||||
|
output e_gtxc, // 125Mhz ethernet gmii tx clock
|
||||||
|
output e_txen, // GMII sending data valid
|
||||||
|
output e_txer, // GMII sending data error
|
||||||
|
output[7:0] e_txd, // GMII sending data
|
||||||
|
|
||||||
|
// analog
|
||||||
|
output da2_clk,
|
||||||
|
output da2_wrt,
|
||||||
|
output [DAC_DATA_WIDTH-1:0] da2_data,
|
||||||
|
|
||||||
|
output ch2_clk,
|
||||||
|
input ch2_otr,
|
||||||
|
input [ADC_DATA_WIDTH-1:0] ch2_data
|
||||||
|
);
|
||||||
|
|
||||||
|
wire sys_clk; //single end clock
|
||||||
|
wire [31:0] pack_total_len ; //package length
|
||||||
|
wire [1:0] speed ; //net speed select
|
||||||
|
wire link ; //link status
|
||||||
|
wire erxdv ;
|
||||||
|
wire [7:0] erxd ;
|
||||||
|
wire e_tx_en ;
|
||||||
|
wire [7:0] etxd ;
|
||||||
|
wire e_rst_n ;
|
||||||
|
assign e_gtxc = e_rxc;
|
||||||
|
assign e_reset = 1'b1;
|
||||||
|
|
||||||
|
// generate single end clock
|
||||||
|
|
||||||
|
IBUFDS sys_clk_ibufgds
|
||||||
|
(
|
||||||
|
.O (sys_clk ),
|
||||||
|
.I (sys_clk_p ),
|
||||||
|
.IB (sys_clk_n )
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Different conversion of GMII data according to different network speeds
|
||||||
|
gmii_arbi arbi_inst
|
||||||
|
(
|
||||||
|
.clk (e_gtxc ),
|
||||||
|
.rst_n (rst_n ),
|
||||||
|
.speed (2'b10 ),
|
||||||
|
.link (1'b1 ),
|
||||||
|
.pack_total_len (pack_total_len ),
|
||||||
|
.e_rst_n (e_rst_n ),
|
||||||
|
.gmii_rx_dv (e_rxdv ),
|
||||||
|
.gmii_rxd (e_rxd ),
|
||||||
|
.gmii_tx_en (e_tx_en ),
|
||||||
|
.gmii_txd (etxd ),
|
||||||
|
.e_rx_dv (erxdv ),
|
||||||
|
.e_rxd (erxd ),
|
||||||
|
.e_tx_en (e_txen ),
|
||||||
|
.e_txd (e_txd )
|
||||||
|
);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
// axis_mac interface
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
wire req_ready;
|
||||||
|
|
||||||
|
wire send_req;
|
||||||
|
|
||||||
|
wire [7:0] s_axis_tx_tdata;
|
||||||
|
wire s_axis_tx_tvalid;
|
||||||
|
wire s_axis_tx_tready;
|
||||||
|
wire s_axis_tx_tlast;
|
||||||
|
|
||||||
|
wire [7:0] m_axis_rx_tdata;
|
||||||
|
wire m_axis_rx_tvalid;
|
||||||
|
wire m_axis_rx_tready;
|
||||||
|
wire m_axis_rx_tlast;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
// axis_mac
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
axis_mac axis_mac0
|
||||||
|
(
|
||||||
|
.gmii_tx_clk (e_gtxc),
|
||||||
|
.gmii_rx_clk (e_rxc),
|
||||||
|
.rst_n (e_rst_n),
|
||||||
|
|
||||||
|
.gmii_rx_dv (erxdv),
|
||||||
|
.gmii_rxd (erxd),
|
||||||
|
.gmii_tx_en (e_tx_en),
|
||||||
|
.gmii_txd (etxd),
|
||||||
|
|
||||||
|
.send_req (send_req),
|
||||||
|
.data_length (PACKET_SIZE),
|
||||||
|
.req_ready (req_ready),
|
||||||
|
|
||||||
|
.s_axis_tx_tdata (s_axis_tx_tdata),
|
||||||
|
.s_axis_tx_tvalid (s_axis_tx_tvalid),
|
||||||
|
.s_axis_tx_tready (s_axis_tx_tready),
|
||||||
|
.s_axis_tx_tlast (s_axis_tx_tlast),
|
||||||
|
|
||||||
|
.m_axis_rx_tdata (m_axis_rx_tdata),
|
||||||
|
.m_axis_rx_tvalid (m_axis_rx_tvalid),
|
||||||
|
.m_axis_rx_tready (m_axis_rx_tready),
|
||||||
|
.m_axis_rx_tlast (m_axis_rx_tlast)
|
||||||
|
);
|
||||||
|
|
||||||
|
// reflectometer base module
|
||||||
|
reflectometer_top #(
|
||||||
|
.PROCESS_MODE(PROCESS_MODE),
|
||||||
|
.PACK_FACTOR(PACK_FACTOR),
|
||||||
|
.ACCUM_WIDTH(ACCUM_WIDTH),
|
||||||
|
.N_MAX(N_MAX),
|
||||||
|
.ZERO_LEVEL(ZERO_LEVEL),
|
||||||
|
.WINDOW_SIZE(WINDOW_SIZE),
|
||||||
|
.PACKET_SIZE(PACKET_SIZE),
|
||||||
|
.ADC_DATA_WIDTH(ADC_DATA_WIDTH),
|
||||||
|
.DAC_DATA_WIDTH(DAC_DATA_WIDTH)
|
||||||
|
) reflectometer_inst (
|
||||||
|
.sys_clk (sys_clk),
|
||||||
|
.rst_n (rst_n),
|
||||||
|
|
||||||
|
.led(led),
|
||||||
|
|
||||||
|
.gmii_tx_clk (e_gtxc),
|
||||||
|
.gmii_rx_clk (e_rxc),
|
||||||
|
|
||||||
|
.s_axis_tx_tdata (s_axis_tx_tdata),
|
||||||
|
.s_axis_tx_tvalid (s_axis_tx_tvalid),
|
||||||
|
.s_axis_tx_tready (s_axis_tx_tready),
|
||||||
|
.s_axis_tx_tlast (s_axis_tx_tlast),
|
||||||
|
|
||||||
|
.m_axis_rx_tdata (m_axis_rx_tdata),
|
||||||
|
.m_axis_rx_tvalid (m_axis_rx_tvalid),
|
||||||
|
.m_axis_rx_tready (m_axis_rx_tready),
|
||||||
|
.m_axis_rx_tlast (m_axis_rx_tlast),
|
||||||
|
|
||||||
|
// axis_mac
|
||||||
|
.req_ready(req_ready),
|
||||||
|
.send_req(send_req),
|
||||||
|
|
||||||
|
// DAC
|
||||||
|
.p2_clk(da2_clk),
|
||||||
|
.p2_data(da2_data),
|
||||||
|
.p2_wrt(da2_wrt),
|
||||||
|
|
||||||
|
// ADC
|
||||||
|
.ch2_clk(ch2_clk),
|
||||||
|
.ch2_data(ch2_data),
|
||||||
|
.ch2_otr(ch2_otr)
|
||||||
|
);
|
||||||
|
|
||||||
|
endmodule
|
||||||
@ -1 +0,0 @@
|
|||||||
# Блок Sampler
|
|
||||||
39
rtl/accum/README.md
Normal file
39
rtl/accum/README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Аккумулятор
|
||||||
|
Модуль аккумуляции данных для последующего усреднения. Принимает данные с входного потока АХI-Stream фиксированной ширины (задается параметрически), суммируя их сначала по окнам, а затем со значениями из предыдущей последовательности.
|
||||||
|
|
||||||
|
## Список парамтеров:
|
||||||
|
- DATA_WIDTH - ширина входных данных, получаемых с АЦП
|
||||||
|
- ACCUM_WIDTH - размер данных для аккумуляции, должен быть степенью числа 2. По умолчанию - 32
|
||||||
|
- N_MAX - максимальное число окон в последовательности. Должно быть степенью числа 2. Влияет на размер используемой памяти.
|
||||||
|
- WINDOW_SIZE - размер окна усреднения
|
||||||
|
- PACKET_SIZE - размер выходного пакета
|
||||||
|
|
||||||
|
## Иерархия:
|
||||||
|
```
|
||||||
|
├── accum_top - полная сборка аккумулятора
|
||||||
|
│ ├── accum - основная логика аккумуляции по окнам и последовательностям
|
||||||
|
│ │ ├── adder - модуль сложения по окнам
|
||||||
|
│ ├── out_axis_fifo - модуль для выдачи данных наружу в другом частотном домене
|
||||||
|
```
|
||||||
|
## Список входных портов:
|
||||||
|
- clk_in - частота входных данных
|
||||||
|
- rst - сброс всего
|
||||||
|
- [DATA_WIDTH-1:0] s_axis_tdata - входные данные
|
||||||
|
- s_axis_tvalid - валидность входных данных
|
||||||
|
- start - начало аккумуляции
|
||||||
|
- [31:0] smp_num - число сэмплов (должно быть кратно WINDOW_SIZE)
|
||||||
|
- [15:0] seq_num - число последовательностей аккумуляции
|
||||||
|
- eth_clk_in - частота для выходных данных на ethernet
|
||||||
|
- req_ready - готовность отправителя начать принимать данные
|
||||||
|
- m_axis_tready - готовность выходного axis
|
||||||
|
|
||||||
|
|
||||||
|
## Список выходных портов:
|
||||||
|
- send_req - сигнал начала отправки данных
|
||||||
|
- [7:0] m_axis_tdata - данные выходного axis
|
||||||
|
- m_axis_tvalid - валидность выходного axis
|
||||||
|
- m_axis_tlast - последний пакет в axis
|
||||||
|
- finish - конец отправки всех данных, полный цикл работы завершен
|
||||||
|
|
||||||
|
## Логика работы:
|
||||||
|
Модуль начинает работу при получении сигнала start. Сразу после начала работы можно подавать данные на входной axis, они будут суммироваться по WINDOW_SIZE штук и отправляться на хранение. Так будет сделано для последовательности длиной smp_num чисел, затем начинается новая последовательность - всего таких будет seq_num штук. Каждая последующая последовательность также суммируется по окнам, а затем полученные значения прибавляются к тем же значениям предыдущей последовательности. Таким образом, выполняется суммирование по двум осям, и из исходных данных seq_num по smp_num чисел остается вектор длиной 1 x (smp_num / WINDOW_SIZE). После накопления всех данных начинается выдача. Выдача осуществляется на выходной AXI stream, работающий в домене eth_clk, и имеющий ширину 8 бит - предполагается, что выдача пойдет на ethernet-udp. Когда поднят сигнал req_ready, модуль будет отправлять send_req (запрос отправки пакета), и по готовности m_axis_tready начнет выдавать пакет размер PACKET_SIZE байт. Если данные нельзя ровно разложить по пакетам, то в последнем пакете могут быть отправлены рандомные данные из памяти. После окончания отправки всех пакетов будет поднят сигнал finish.
|
||||||
271
rtl/accum/src/accum.sv
Normal file
271
rtl/accum/src/accum.sv
Normal file
@ -0,0 +1,271 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module accumulator
|
||||||
|
#(
|
||||||
|
parameter DATA_WIDTH = 12,
|
||||||
|
parameter ACCUM_WIDTH = 32,
|
||||||
|
parameter N_MAX = 4096,
|
||||||
|
parameter WINDOW_SIZE = 4,
|
||||||
|
parameter PACKET_SIZE = 8,
|
||||||
|
parameter READ_BATCH_SIZE =(PACKET_SIZE*8)/(ACCUM_WIDTH)
|
||||||
|
)
|
||||||
|
(
|
||||||
|
input clk_in,
|
||||||
|
input rst,
|
||||||
|
input [DATA_WIDTH-1:0] s_axis_tdata,
|
||||||
|
input s_axis_tvalid,
|
||||||
|
input start,
|
||||||
|
input [31:0] smp_num,
|
||||||
|
input [15:0] seq_num,
|
||||||
|
|
||||||
|
output [ACCUM_WIDTH-1:0] out_data,
|
||||||
|
output out_valid,
|
||||||
|
output readout_begin,
|
||||||
|
input batch_req,
|
||||||
|
input finish
|
||||||
|
);
|
||||||
|
|
||||||
|
logic [31:0] smp_num_reg, cnt_smp_num;
|
||||||
|
logic [15:0] seq_num_reg, cnt_seq_num;
|
||||||
|
logic [15:0] cnt_addr, addra, addrb;
|
||||||
|
|
||||||
|
logic [ACCUM_WIDTH-1:0] data;
|
||||||
|
logic valid_data;
|
||||||
|
logic [ACCUM_WIDTH-1:0] data_bram_in, data_bram_out;
|
||||||
|
logic wea, enb;
|
||||||
|
|
||||||
|
logic readout_begin_reg;
|
||||||
|
logic [ACCUM_WIDTH-1:0] out_data_reg;
|
||||||
|
logic out_valid_reg;
|
||||||
|
logic finish_reg, finish_buf;
|
||||||
|
|
||||||
|
// registers for port b data request
|
||||||
|
reg req_data_b;
|
||||||
|
reg [15:0] req_addr_b;
|
||||||
|
|
||||||
|
typedef enum logic [3:0] {
|
||||||
|
IDLE,
|
||||||
|
INIT_MEM,
|
||||||
|
BEGIN_SEQ,
|
||||||
|
REQ_WORD_B,
|
||||||
|
ACCUM,
|
||||||
|
READOUT_START,
|
||||||
|
READOUT_AWAIT,
|
||||||
|
READOUT_DELAY,
|
||||||
|
READOUT_PUT,
|
||||||
|
READOUT_LAST,
|
||||||
|
FINISH
|
||||||
|
} wr_state_t;
|
||||||
|
(* MARK_DEBUG="true" *) wr_state_t wr_state;
|
||||||
|
|
||||||
|
always @(posedge clk_in) begin
|
||||||
|
if (rst) begin
|
||||||
|
smp_num_reg <= '0;
|
||||||
|
cnt_smp_num <= '0;
|
||||||
|
seq_num_reg <= '0;
|
||||||
|
cnt_seq_num <= '0;
|
||||||
|
cnt_addr <= '0;
|
||||||
|
wea <= 0;
|
||||||
|
enb <= 0;
|
||||||
|
wr_state <= IDLE;
|
||||||
|
finish_reg <= 0;
|
||||||
|
out_valid_reg <= 0;
|
||||||
|
end else begin
|
||||||
|
finish_buf <= finish;
|
||||||
|
|
||||||
|
// FSM
|
||||||
|
case(wr_state)
|
||||||
|
|
||||||
|
IDLE: begin
|
||||||
|
// wait for start signal
|
||||||
|
wea <= 0;
|
||||||
|
enb <= 0;
|
||||||
|
readout_begin_reg <= 0;
|
||||||
|
finish_reg <= 0;
|
||||||
|
out_valid_reg <= 0;
|
||||||
|
if (start) begin
|
||||||
|
smp_num_reg <= smp_num;
|
||||||
|
seq_num_reg <= seq_num;
|
||||||
|
wr_state <= INIT_MEM;
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
INIT_MEM: begin
|
||||||
|
// first run to initialize memory with first batch of values
|
||||||
|
wea <= 0;
|
||||||
|
if (valid_data) begin
|
||||||
|
data_bram_in <= data;
|
||||||
|
addra <= cnt_addr;
|
||||||
|
wea <= 1;
|
||||||
|
cnt_addr <= cnt_addr + 1;
|
||||||
|
cnt_smp_num <= cnt_smp_num + WINDOW_SIZE;
|
||||||
|
|
||||||
|
end
|
||||||
|
if (cnt_smp_num >= smp_num_reg) begin
|
||||||
|
wr_state <= BEGIN_SEQ;
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
BEGIN_SEQ: begin
|
||||||
|
// start new acc seq
|
||||||
|
wea <= 0;
|
||||||
|
enb <= 0;
|
||||||
|
if (cnt_seq_num == seq_num_reg - 1) begin
|
||||||
|
cnt_seq_num <= '0;
|
||||||
|
cnt_smp_num <= '0;
|
||||||
|
cnt_addr <= '0;
|
||||||
|
wr_state <= READOUT_START;
|
||||||
|
addrb <= '0;
|
||||||
|
enb <= 0;
|
||||||
|
end else begin
|
||||||
|
// beginning of new data sequence
|
||||||
|
cnt_seq_num <= cnt_seq_num + 1;
|
||||||
|
cnt_smp_num <= '0;
|
||||||
|
cnt_addr <= '0;
|
||||||
|
wea <= 0;
|
||||||
|
addrb <= 0;
|
||||||
|
wr_state <= REQ_WORD_B;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
REQ_WORD_B: begin
|
||||||
|
// pre-request data for port b
|
||||||
|
wea <= 0;
|
||||||
|
enb <= 1;
|
||||||
|
addrb <= cnt_addr;
|
||||||
|
wr_state <= ACCUM;
|
||||||
|
end
|
||||||
|
|
||||||
|
ACCUM: begin
|
||||||
|
// sum mem+input
|
||||||
|
enb <= 0;
|
||||||
|
if (valid_data) begin
|
||||||
|
addra <= cnt_addr;
|
||||||
|
wea <= 1;
|
||||||
|
data_bram_in <= data + data_bram_out;
|
||||||
|
cnt_smp_num <= cnt_smp_num + WINDOW_SIZE;
|
||||||
|
if (cnt_smp_num + WINDOW_SIZE >= smp_num_reg) begin
|
||||||
|
wr_state <= BEGIN_SEQ;
|
||||||
|
end else begin
|
||||||
|
cnt_addr <= cnt_addr + 1;
|
||||||
|
wr_state <= REQ_WORD_B;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
READOUT_START: begin
|
||||||
|
readout_begin_reg <= 1'b1;
|
||||||
|
wr_state <= READOUT_AWAIT;
|
||||||
|
enb <= 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
READOUT_AWAIT: begin
|
||||||
|
// req await + delay for every-clock readout.
|
||||||
|
if (batch_req) begin
|
||||||
|
enb <= 1;
|
||||||
|
wr_state <= READOUT_DELAY;
|
||||||
|
end else if (finish_buf) begin
|
||||||
|
wr_state <= FINISH;
|
||||||
|
end else begin
|
||||||
|
enb <= 0;
|
||||||
|
out_valid_reg <= 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
READOUT_DELAY: begin
|
||||||
|
// wait for mem latency
|
||||||
|
addrb <= addrb + 1;
|
||||||
|
wr_state <= READOUT_PUT;
|
||||||
|
end
|
||||||
|
|
||||||
|
READOUT_PUT: begin
|
||||||
|
// main data output
|
||||||
|
if ((addrb % READ_BATCH_SIZE) == 0) begin
|
||||||
|
wr_state <= READOUT_LAST;
|
||||||
|
enb <= 0;
|
||||||
|
end else addrb <= addrb + 1;
|
||||||
|
|
||||||
|
out_valid_reg <= 1;
|
||||||
|
out_data_reg <= data_bram_out;
|
||||||
|
end
|
||||||
|
|
||||||
|
READOUT_LAST: begin
|
||||||
|
// last word of packet
|
||||||
|
out_valid_reg <= 0;
|
||||||
|
out_data_reg <= data_bram_out;
|
||||||
|
wr_state <= READOUT_START;
|
||||||
|
end
|
||||||
|
|
||||||
|
FINISH: begin
|
||||||
|
out_valid_reg <= 0;
|
||||||
|
enb <= 0;
|
||||||
|
wr_state <= IDLE;
|
||||||
|
end
|
||||||
|
|
||||||
|
default: wr_state <= IDLE;
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
adder
|
||||||
|
#(
|
||||||
|
.DATA_WIDTH(DATA_WIDTH),
|
||||||
|
.WINDOW_SIZE(WINDOW_SIZE),
|
||||||
|
.ACCUM_WIDTH(ACCUM_WIDTH)
|
||||||
|
) adder_dut
|
||||||
|
(
|
||||||
|
.clk_in(clk_in),
|
||||||
|
.rst(rst),
|
||||||
|
.s_axis_tdata(s_axis_tdata),
|
||||||
|
.s_axis_tvalid(s_axis_tvalid),
|
||||||
|
.sum_data(data),
|
||||||
|
.sum_valid(valid_data)
|
||||||
|
);
|
||||||
|
|
||||||
|
xpm_memory_sdpram #(
|
||||||
|
.ADDR_WIDTH_A(16), // DECIMAL
|
||||||
|
.ADDR_WIDTH_B(16), // DECIMAL
|
||||||
|
.AUTO_SLEEP_TIME(0), // DECIMAL
|
||||||
|
.BYTE_WRITE_WIDTH_A(ACCUM_WIDTH), // DECIMAL
|
||||||
|
.CASCADE_HEIGHT(0), // DECIMAL
|
||||||
|
.CLOCKING_MODE("common_clock"), // String
|
||||||
|
.ECC_MODE("no_ecc"), // String
|
||||||
|
.MEMORY_INIT_FILE("none"), // String
|
||||||
|
.MEMORY_INIT_PARAM("0"), // String
|
||||||
|
.MEMORY_OPTIMIZATION("true"), // String
|
||||||
|
.MEMORY_PRIMITIVE("auto"), // String
|
||||||
|
.MEMORY_SIZE(N_MAX*ACCUM_WIDTH), // DECIMAL
|
||||||
|
.MESSAGE_CONTROL(0), // DECIMAL
|
||||||
|
.READ_DATA_WIDTH_B(ACCUM_WIDTH), // DECIMAL
|
||||||
|
.READ_LATENCY_B(1), // DECIMAL
|
||||||
|
.READ_RESET_VALUE_B("0"), // String
|
||||||
|
.RST_MODE_A("SYNC"), // String
|
||||||
|
.RST_MODE_B("SYNC"), // String
|
||||||
|
.SIM_ASSERT_CHK(0), // DECIMAL; 0=disable simulation messages, 1=enable simulation messages
|
||||||
|
.USE_EMBEDDED_CONSTRAINT(0), // DECIMAL
|
||||||
|
.USE_MEM_INIT(1), // DECIMAL
|
||||||
|
.USE_MEM_INIT_MMI(0), // DECIMAL
|
||||||
|
.WAKEUP_TIME("disable_sleep"), // String
|
||||||
|
.WRITE_DATA_WIDTH_A(ACCUM_WIDTH), // DECIMAL
|
||||||
|
.WRITE_MODE_B("no_change"), // String
|
||||||
|
.WRITE_PROTECT(1) // DECIMAL
|
||||||
|
)
|
||||||
|
xpm_memory_sdpram_inst (
|
||||||
|
|
||||||
|
.doutb(data_bram_out),
|
||||||
|
|
||||||
|
.addra(addra),
|
||||||
|
.addrb(addrb),
|
||||||
|
.clka(clk_in),
|
||||||
|
.clkb(clk_in),
|
||||||
|
.dina(data_bram_in),
|
||||||
|
.ena(1'b1),
|
||||||
|
.enb(enb),
|
||||||
|
.wea(wea)
|
||||||
|
);
|
||||||
|
|
||||||
|
assign readout_begin = readout_begin_reg;
|
||||||
|
assign out_data = out_data_reg;
|
||||||
|
assign out_valid = out_valid_reg;
|
||||||
|
|
||||||
|
endmodule
|
||||||
92
rtl/accum/src/accum_top.sv
Normal file
92
rtl/accum/src/accum_top.sv
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module accumulator_top
|
||||||
|
#(
|
||||||
|
parameter DATA_WIDTH = 12,
|
||||||
|
parameter ACCUM_WIDTH = 32,
|
||||||
|
parameter N_MAX = 4096,
|
||||||
|
parameter WINDOW_SIZE = 65,
|
||||||
|
parameter PACKET_SIZE = 1024,
|
||||||
|
parameter READ_BATCH_SIZE =(PACKET_SIZE*8)/(ACCUM_WIDTH)
|
||||||
|
)
|
||||||
|
(
|
||||||
|
// main clk
|
||||||
|
input clk_in,
|
||||||
|
input rst,
|
||||||
|
|
||||||
|
// input data
|
||||||
|
input [DATA_WIDTH-1:0] s_axis_tdata,
|
||||||
|
input s_axis_tvalid,
|
||||||
|
|
||||||
|
// parameters
|
||||||
|
input start,
|
||||||
|
input [31:0] smp_num,
|
||||||
|
input [15:0] seq_num,
|
||||||
|
|
||||||
|
// eth signals
|
||||||
|
input eth_clk_in,
|
||||||
|
input req_ready,
|
||||||
|
output send_req,
|
||||||
|
|
||||||
|
// output axis
|
||||||
|
output logic [7:0] m_axis_tdata,
|
||||||
|
output logic m_axis_tvalid,
|
||||||
|
input logic m_axis_tready,
|
||||||
|
output logic m_axis_tlast,
|
||||||
|
|
||||||
|
output logic finish
|
||||||
|
);
|
||||||
|
|
||||||
|
wire [ACCUM_WIDTH-1:0] out_data;
|
||||||
|
wire out_valid;
|
||||||
|
wire readout_begin;
|
||||||
|
wire batch_req;
|
||||||
|
|
||||||
|
accumulator #(
|
||||||
|
.DATA_WIDTH(DATA_WIDTH),
|
||||||
|
.ACCUM_WIDTH(ACCUM_WIDTH),
|
||||||
|
.N_MAX(N_MAX),
|
||||||
|
.WINDOW_SIZE(WINDOW_SIZE),
|
||||||
|
.PACKET_SIZE(PACKET_SIZE)
|
||||||
|
) accum_main (
|
||||||
|
.clk_in(clk_in),
|
||||||
|
.rst(rst),
|
||||||
|
.s_axis_tdata(s_axis_tdata),
|
||||||
|
.s_axis_tvalid(s_axis_tvalid),
|
||||||
|
.start(start),
|
||||||
|
.smp_num(smp_num),
|
||||||
|
.seq_num(seq_num),
|
||||||
|
.out_data(out_data),
|
||||||
|
.out_valid(out_valid),
|
||||||
|
.readout_begin(readout_begin),
|
||||||
|
.batch_req(batch_req),
|
||||||
|
.finish(finish)
|
||||||
|
);
|
||||||
|
|
||||||
|
out_axis_fifo #(
|
||||||
|
.ACCUM_WIDTH(ACCUM_WIDTH),
|
||||||
|
.WINDOW_SIZE(WINDOW_SIZE),
|
||||||
|
.PACKET_SIZE(PACKET_SIZE)
|
||||||
|
) output_async_fifo (
|
||||||
|
.eth_clk_in (eth_clk_in),
|
||||||
|
.acc_clk_in (clk_in),
|
||||||
|
.rst (rst),
|
||||||
|
.smp_num (smp_num),
|
||||||
|
|
||||||
|
.m_axis_tdata (m_axis_tdata),
|
||||||
|
.m_axis_tvalid (m_axis_tvalid),
|
||||||
|
.m_axis_tready (m_axis_tready),
|
||||||
|
.m_axis_tlast (m_axis_tlast),
|
||||||
|
|
||||||
|
.acc_din (out_data),
|
||||||
|
.din_valid (out_valid),
|
||||||
|
|
||||||
|
.readout_begin (readout_begin),
|
||||||
|
|
||||||
|
.req_ready (req_ready),
|
||||||
|
.send_req (send_req),
|
||||||
|
|
||||||
|
.batch_req (batch_req),
|
||||||
|
.finish (finish)
|
||||||
|
);
|
||||||
|
endmodule
|
||||||
52
rtl/accum/src/adder.sv
Normal file
52
rtl/accum/src/adder.sv
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
|
||||||
|
module adder
|
||||||
|
#(
|
||||||
|
parameter DATA_WIDTH = 12,
|
||||||
|
parameter WINDOW_SIZE = 4,
|
||||||
|
parameter ACCUM_WIDTH = 32
|
||||||
|
)
|
||||||
|
(
|
||||||
|
input clk_in,
|
||||||
|
input rst,
|
||||||
|
input [DATA_WIDTH-1:0] s_axis_tdata,
|
||||||
|
input s_axis_tvalid,
|
||||||
|
|
||||||
|
output [ACCUM_WIDTH-1:0] sum_data,
|
||||||
|
output sum_valid
|
||||||
|
);
|
||||||
|
|
||||||
|
logic [ACCUM_WIDTH-1:0] accum, res;
|
||||||
|
logic [DATA_WIDTH-1:0] axis_data;
|
||||||
|
logic res_valid, axis_valid;
|
||||||
|
(* MARK_DEBUG = "TRUE" *) logic [15:0] cnt;
|
||||||
|
|
||||||
|
always @(posedge clk_in) begin
|
||||||
|
if (rst) begin
|
||||||
|
accum <= '0;
|
||||||
|
cnt <= '0;
|
||||||
|
res <= '0;
|
||||||
|
res_valid <= 0;
|
||||||
|
end else begin
|
||||||
|
res_valid <= 0;
|
||||||
|
axis_data <= s_axis_tdata;
|
||||||
|
axis_valid <= s_axis_tvalid;
|
||||||
|
if ( axis_valid) begin
|
||||||
|
if (cnt == WINDOW_SIZE-1) begin
|
||||||
|
res <= accum + axis_data;
|
||||||
|
res_valid <= 1;
|
||||||
|
accum <= '0;
|
||||||
|
cnt <= '0;
|
||||||
|
end else begin
|
||||||
|
accum <= accum + axis_data;
|
||||||
|
cnt <= cnt + 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assign sum_valid = res_valid;
|
||||||
|
assign sum_data = res;
|
||||||
|
|
||||||
|
endmodule
|
||||||
324
rtl/accum/src/out_axis_fifo.sv
Normal file
324
rtl/accum/src/out_axis_fifo.sv
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
module out_axis_fifo #(
|
||||||
|
parameter ACCUM_WIDTH = 32,
|
||||||
|
parameter WINDOW_SIZE = 65,
|
||||||
|
parameter PACKET_SIZE = 1024
|
||||||
|
) (
|
||||||
|
input logic eth_clk_in,
|
||||||
|
input logic acc_clk_in,
|
||||||
|
input logic rst,
|
||||||
|
input logic [31:0] smp_num,
|
||||||
|
|
||||||
|
// AXI stream master for output, eth_clk_in domain
|
||||||
|
output logic [7:0] m_axis_tdata,
|
||||||
|
output logic m_axis_tvalid,
|
||||||
|
input logic m_axis_tready,
|
||||||
|
output logic m_axis_tlast,
|
||||||
|
// eth handshake
|
||||||
|
input logic req_ready,
|
||||||
|
output logic send_req,
|
||||||
|
output logic [15:0] udp_data_length,
|
||||||
|
|
||||||
|
// data from acc
|
||||||
|
input logic [ACCUM_WIDTH-1:0] acc_din,
|
||||||
|
input logic din_valid,
|
||||||
|
|
||||||
|
// input pulse
|
||||||
|
input logic readout_begin,
|
||||||
|
|
||||||
|
// output pulses
|
||||||
|
output logic batch_req,
|
||||||
|
output logic finish
|
||||||
|
);
|
||||||
|
// sync reset
|
||||||
|
reg [1:0] rst_sync_ff;
|
||||||
|
reg rst_eth;
|
||||||
|
|
||||||
|
always @(posedge acc_clk_in or posedge rst) begin
|
||||||
|
if (rst) begin
|
||||||
|
rst_sync_ff <= 2'b11;
|
||||||
|
end else begin
|
||||||
|
rst_sync_ff <= {rst_sync_ff[0], 1'b0};
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assign rst_eth = rst_sync_ff[1];
|
||||||
|
|
||||||
|
logic [1:0] rst_acc_ff;
|
||||||
|
logic rst_acc;
|
||||||
|
|
||||||
|
always_ff @(posedge acc_clk_in or posedge rst) begin
|
||||||
|
if (rst)
|
||||||
|
rst_acc_ff <= 2'b11;
|
||||||
|
else
|
||||||
|
rst_acc_ff <= {rst_acc_ff[0], 1'b0};
|
||||||
|
end
|
||||||
|
|
||||||
|
assign rst_acc = rst_acc_ff[1];
|
||||||
|
|
||||||
|
|
||||||
|
// fifo params calc
|
||||||
|
// round up to be enough for 2xPACKET_SIZE storage
|
||||||
|
localparam int MIN_BYTES = 2 * PACKET_SIZE;
|
||||||
|
localparam int MIN_BITS = MIN_BYTES * 8;
|
||||||
|
localparam int MIN_WR_WORDS = (MIN_BITS + ACCUM_WIDTH - 1) / ACCUM_WIDTH; // ceil div
|
||||||
|
localparam int WDEPTH_BITS = $clog2(MIN_WR_WORDS);
|
||||||
|
localparam int FIFO_WDEPTH = 1 << WDEPTH_BITS;
|
||||||
|
|
||||||
|
localparam int FIFO_RDEPTH = FIFO_WDEPTH * ACCUM_WIDTH / 8;
|
||||||
|
localparam int RDEPTH_BITS = $clog2(FIFO_RDEPTH) + 1;
|
||||||
|
|
||||||
|
wire wr_unavail;
|
||||||
|
wire wr_rst_busy;
|
||||||
|
reg rd_en;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum logic [2:0] {
|
||||||
|
WR_IDLE = 3'd0,
|
||||||
|
WR_CHECK = 3'd1,
|
||||||
|
WR_RUN = 3'd2,
|
||||||
|
WR_END = 3'd3
|
||||||
|
} wr_state_t;
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) wr_state_t wr_state;
|
||||||
|
|
||||||
|
// Write FSM
|
||||||
|
reg [31:0] wr_cnt; // current BIT mem ptr
|
||||||
|
reg [31:0] wr_batch_tgt; // next 'target' that should be written from batch
|
||||||
|
reg [31:0] wr_total; // total BITS to be sent!
|
||||||
|
|
||||||
|
wire empty;
|
||||||
|
|
||||||
|
wire [WDEPTH_BITS:0] wr_data_count;
|
||||||
|
|
||||||
|
// NOTE:
|
||||||
|
// each written "acc_din" ACCUM_WIDTH word
|
||||||
|
// is counted as WINDOWS_SIZE samples actually
|
||||||
|
// because hw division for counters is painful
|
||||||
|
// so we just increased the counter sizes
|
||||||
|
|
||||||
|
always_ff @(posedge acc_clk_in) begin
|
||||||
|
if (rst_acc) begin
|
||||||
|
wr_state <= WR_IDLE;
|
||||||
|
wr_cnt <= 32'b0;
|
||||||
|
wr_batch_tgt <= 32'b0;
|
||||||
|
wr_total <= 32'b0;
|
||||||
|
batch_req <= 0;
|
||||||
|
finish <= 0;
|
||||||
|
|
||||||
|
end else begin
|
||||||
|
|
||||||
|
case (wr_state)
|
||||||
|
// wait until readout is requested
|
||||||
|
WR_IDLE: begin
|
||||||
|
if (readout_begin) begin
|
||||||
|
wr_cnt <= 32'b0;
|
||||||
|
wr_state <= WR_CHECK;
|
||||||
|
wr_total <= smp_num * ACCUM_WIDTH;
|
||||||
|
wr_batch_tgt <= 32'b0;
|
||||||
|
batch_req <= 0;
|
||||||
|
finish <= 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// wait until we can request a word
|
||||||
|
// depends on prog_full signal
|
||||||
|
WR_CHECK: begin
|
||||||
|
if ((wr_data_count < (FIFO_WDEPTH - (PACKET_SIZE / (ACCUM_WIDTH / 8)))) && ~wr_rst_busy) begin
|
||||||
|
batch_req <= 1;
|
||||||
|
// should give us exactly PACKET_SIZE * 8 bits
|
||||||
|
// multiplied by WINDOW_SIZE, because we count
|
||||||
|
// each given ACCUM_WIDTH word as WINDOWS_SIZE samples !!!
|
||||||
|
wr_batch_tgt <= wr_batch_tgt + (8 * WINDOW_SIZE * PACKET_SIZE);
|
||||||
|
wr_state <= WR_RUN;
|
||||||
|
end else begin
|
||||||
|
batch_req <= 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// wait until all requested packet is written
|
||||||
|
WR_RUN: begin
|
||||||
|
batch_req <= 0;
|
||||||
|
if (wr_cnt == wr_batch_tgt) begin
|
||||||
|
// got enough words
|
||||||
|
wr_state <= WR_END;
|
||||||
|
end else if (wr_cnt > wr_batch_tgt) begin
|
||||||
|
// weird case when accum gave us too much words
|
||||||
|
// block resets
|
||||||
|
wr_cnt <= 32'hffffffff; // sort of signal for sim/ila
|
||||||
|
wr_state <= WR_END;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (din_valid) begin
|
||||||
|
// data supplied
|
||||||
|
// count as we got WINDOW_SIZE samples
|
||||||
|
wr_cnt <= wr_cnt + ACCUM_WIDTH * WINDOW_SIZE;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// check if this was last data batch
|
||||||
|
WR_END: begin
|
||||||
|
// here we check that we sent enough data
|
||||||
|
// wr_cnt should be by design PACKET_SIZE-aligned
|
||||||
|
if (wr_cnt >= wr_total) begin
|
||||||
|
// wait until all data is sent
|
||||||
|
if (empty) begin
|
||||||
|
finish <= 1;
|
||||||
|
wr_state <= WR_IDLE;
|
||||||
|
end
|
||||||
|
end else begin
|
||||||
|
// next word
|
||||||
|
wr_state <= WR_CHECK;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// Readout FSM with ethernet request
|
||||||
|
|
||||||
|
assign udp_data_length = PACKET_SIZE; // fixed packet size
|
||||||
|
reg [15:0] sent_cnt;
|
||||||
|
|
||||||
|
typedef enum logic [2:0] {
|
||||||
|
RD_IDLE = 3'd0,
|
||||||
|
RD_CHECK = 3'd1,
|
||||||
|
RD_SEND = 3'd2
|
||||||
|
} rd_state_t;
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) rd_state_t rd_state;
|
||||||
|
|
||||||
|
wire rd_valid;
|
||||||
|
wire [RDEPTH_BITS-1:0] rd_data_count;
|
||||||
|
|
||||||
|
always_ff @(posedge eth_clk_in) begin
|
||||||
|
if (rst_eth) begin
|
||||||
|
rd_state <= RD_IDLE;
|
||||||
|
send_req <= 1'b0;
|
||||||
|
sent_cnt <= 16'd0;
|
||||||
|
m_axis_tlast <= 1'b0;
|
||||||
|
m_axis_tvalid <= 1'b0;
|
||||||
|
rd_en <= 1'b0;
|
||||||
|
|
||||||
|
end else begin
|
||||||
|
|
||||||
|
case (rd_state)
|
||||||
|
// wait until fifo has enough data to send
|
||||||
|
RD_IDLE: begin
|
||||||
|
if (rd_data_count == PACKET_SIZE) begin
|
||||||
|
// enough data to send packet, begin
|
||||||
|
rd_state <= RD_CHECK;
|
||||||
|
end
|
||||||
|
send_req <= 1'b0;
|
||||||
|
sent_cnt <= 16'd0;
|
||||||
|
rd_en <= 1'b0;
|
||||||
|
m_axis_tlast <= 1'b0;
|
||||||
|
m_axis_tvalid <= 1'b0;
|
||||||
|
end
|
||||||
|
|
||||||
|
// await udp ready
|
||||||
|
RD_CHECK: begin
|
||||||
|
if (req_ready) begin
|
||||||
|
send_req <= 1'b1;
|
||||||
|
rd_state <= RD_SEND;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// send data
|
||||||
|
RD_SEND: begin
|
||||||
|
// udp is ready and fifo is ready = sent
|
||||||
|
send_req <= 1'b0;
|
||||||
|
if (m_axis_tready && rd_valid) begin
|
||||||
|
rd_en <= 1'b1;
|
||||||
|
m_axis_tvalid <= 1'b1;
|
||||||
|
sent_cnt <= sent_cnt + 1;
|
||||||
|
// final packet of the batch
|
||||||
|
if (sent_cnt == PACKET_SIZE - 1) begin
|
||||||
|
rd_state <= RD_IDLE;
|
||||||
|
m_axis_tlast <= 1'b1;
|
||||||
|
end
|
||||||
|
end else begin
|
||||||
|
rd_en <= 1'b0;
|
||||||
|
m_axis_tvalid <= 1'b0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
logic [ACCUM_WIDTH-1:0] fifo_din_r, acc_din_reg, din_valid_reg;
|
||||||
|
logic fifo_wr_en_r;
|
||||||
|
|
||||||
|
always_ff @(posedge acc_clk_in) begin
|
||||||
|
if (rst_acc) begin
|
||||||
|
fifo_din_r <= '0;
|
||||||
|
fifo_wr_en_r <= 1'b0;
|
||||||
|
|
||||||
|
din_valid_reg <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
fifo_wr_en_r <= 1'b0;
|
||||||
|
acc_din_reg <= acc_din;
|
||||||
|
|
||||||
|
if (!wr_rst_busy && din_valid_reg) begin
|
||||||
|
fifo_din_r <= acc_din_reg;
|
||||||
|
fifo_wr_en_r <= 1'b1;
|
||||||
|
end
|
||||||
|
|
||||||
|
din_valid_reg <= din_valid;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// xpm_fifo_async: Asynchronous FIFO
|
||||||
|
// Xilinx Parameterized Macro, version 2025.1
|
||||||
|
|
||||||
|
xpm_fifo_async #(
|
||||||
|
.DOUT_RESET_VALUE("0"), // String
|
||||||
|
.FIFO_READ_LATENCY(1), // DECIMAL
|
||||||
|
.FIFO_WRITE_DEPTH(FIFO_WDEPTH),
|
||||||
|
.FULL_RESET_VALUE(0),
|
||||||
|
.PROG_EMPTY_THRESH(PACKET_SIZE),
|
||||||
|
.PROG_FULL_THRESH(PACKET_SIZE / (ACCUM_WIDTH / 8)),
|
||||||
|
.RD_DATA_COUNT_WIDTH(RDEPTH_BITS),
|
||||||
|
.READ_DATA_WIDTH(8), // always 8 bit for eth
|
||||||
|
.READ_MODE("fwft"),
|
||||||
|
.SIM_ASSERT_CHK(1), // DECIMAL; 0=disable simulation messages, 1=enable simulation messages
|
||||||
|
.USE_ADV_FEATURES("1616"), // String
|
||||||
|
.WRITE_DATA_WIDTH(ACCUM_WIDTH),
|
||||||
|
.WR_DATA_COUNT_WIDTH(WDEPTH_BITS+1)
|
||||||
|
)
|
||||||
|
xpm_fifo_async_inst (
|
||||||
|
|
||||||
|
.data_valid(rd_valid), // 1-bit output: Read Data Valid: When asserted, this signal indicates that valid data is available on the
|
||||||
|
// output bus (dout).
|
||||||
|
|
||||||
|
.dout(m_axis_tdata),
|
||||||
|
.empty(empty),
|
||||||
|
|
||||||
|
.full( ),
|
||||||
|
|
||||||
|
.prog_full(wr_unavail), // 1-bit output: Programmable Full: This signal is asserted when the number of words in the FIFO is greater than
|
||||||
|
// or equal to the programmable full threshold value. It is de-asserted when the number of words in the FIFO is
|
||||||
|
// less than the programmable full threshold value.
|
||||||
|
|
||||||
|
.rd_data_count(rd_data_count), // RD_DATA_COUNT_WIDTH-bit output: Read Data Count: This bus indicates the number of words read from the FIFO.
|
||||||
|
|
||||||
|
.wr_data_count(wr_data_count), // WR_DATA_COUNT_WIDTH-bit output: Write Data Count: This bus indicates the number of words written into the
|
||||||
|
// FIFO.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.rd_clk(eth_clk_in), // 1-bit input: Read clock: Used for read operation. rd_clk must be a free running clock.
|
||||||
|
.rd_en(rd_en), // 1-bit input: Read Enable: If the FIFO is not empty, asserting this signal causes data (on dout) to be read
|
||||||
|
// from the FIFO. Must be held active-low when rd_rst_busy is active high.
|
||||||
|
|
||||||
|
.rst(rst),
|
||||||
|
|
||||||
|
.din(fifo_din_r), // WRITE_DATA_WIDTH-bit input: Write Data: The input data bus used when writing the FIFO.
|
||||||
|
.wr_clk(acc_clk_in), // 1-bit input: Write clock: Used for write operation. wr_clk must be a free running clock.
|
||||||
|
.wr_en(fifo_wr_en_r),
|
||||||
|
|
||||||
|
.wr_rst_busy(wr_rst_busy)
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
endmodule
|
||||||
53
rtl/accum/tests/Makefile
Normal file
53
rtl/accum/tests/Makefile
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
#
|
||||||
|
# Copyright (c) 2025 FPGA Ninja, LLC
|
||||||
|
#
|
||||||
|
# Authors:
|
||||||
|
# - Alex Forencich
|
||||||
|
#
|
||||||
|
|
||||||
|
# FPGA settings
|
||||||
|
FPGA_PART = xc7a35tfgg484-1
|
||||||
|
FPGA_TOP = accumulator_top
|
||||||
|
FPGA_ARCH = artix7
|
||||||
|
|
||||||
|
RTL_DIR = ../src
|
||||||
|
|
||||||
|
|
||||||
|
include ../../../scripts/vivado.mk
|
||||||
|
|
||||||
|
SYN_FILES += $(sort $(shell find ../src -type f \( -name '*.v' -o -name '*.sv' \)))
|
||||||
|
|
||||||
|
XCI_FILES = $(sort $(shell find ../src -type f -name '*.xci'))
|
||||||
|
|
||||||
|
XDC_FILES += ../../../constraints/ax7a035b.xdc
|
||||||
|
XDC_FILES += test_timing.xdc
|
||||||
|
|
||||||
|
SYN_FILES += out_axis_fifo_tb.sv
|
||||||
|
SYN_FILES += accum_full_tb.sv
|
||||||
|
SIM_TOP = tb_accumulator_top
|
||||||
|
|
||||||
|
|
||||||
|
program: $(PROJECT).bit
|
||||||
|
echo "open_hw_manager" > program.tcl
|
||||||
|
echo "connect_hw_server" >> program.tcl
|
||||||
|
echo "open_hw_target" >> program.tcl
|
||||||
|
echo "current_hw_device [lindex [get_hw_devices] 0]" >> program.tcl
|
||||||
|
echo "refresh_hw_device -update_hw_probes false [current_hw_device]" >> program.tcl
|
||||||
|
echo "set_property PROGRAM.FILE {$(PROJECT).bit} [current_hw_device]" >> program.tcl
|
||||||
|
echo "program_hw_devices [current_hw_device]" >> program.tcl
|
||||||
|
echo "exit" >> program.tcl
|
||||||
|
vivado -nojournal -nolog -mode batch -source program.tcl
|
||||||
|
|
||||||
|
$(PROJECT).mcs $(PROJECT).prm: $(PROJECT).bit
|
||||||
|
echo "write_cfgmem -force -format mcs -size 16 -interface SPIx4 -loadbit {up 0x0000000 $*.bit} -checksum -file $*.mcs" > generate_mcs.tcl
|
||||||
|
echo "exit" >> generate_mcs.tcl
|
||||||
|
vivado -nojournal -nolog -mode batch -source generate_mcs.tcl
|
||||||
|
mkdir -p rev
|
||||||
|
COUNT=100; \
|
||||||
|
while [ -e rev/$*_rev$$COUNT.bit ]; \
|
||||||
|
do COUNT=$$((COUNT+1)); done; \
|
||||||
|
COUNT=$$((COUNT-1)); \
|
||||||
|
for x in .mcs .prm; \
|
||||||
|
do cp $*$$x rev/$*_rev$$COUNT$$x; \
|
||||||
|
echo "Output: rev/$*_rev$$COUNT$$x"; done;
|
||||||
348
rtl/accum/tests/accum_full_tb.sv
Normal file
348
rtl/accum/tests/accum_full_tb.sv
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module tb_accumulator_top;
|
||||||
|
|
||||||
|
localparam DATA_WIDTH = 12;
|
||||||
|
localparam ACCUM_WIDTH = 32;
|
||||||
|
localparam N_MAX = 4096;
|
||||||
|
localparam WINDOW_SIZE = 65;
|
||||||
|
localparam PACKET_SIZE = 1024;
|
||||||
|
localparam READ_BATCH_SIZE = (PACKET_SIZE*8)/ACCUM_WIDTH;
|
||||||
|
localparam MAX_WORDS = N_MAX;
|
||||||
|
localparam MAX_SEQ_NUM = 256;
|
||||||
|
|
||||||
|
logic clk_in;
|
||||||
|
logic eth_clk_in;
|
||||||
|
logic rst;
|
||||||
|
|
||||||
|
logic [DATA_WIDTH-1:0] s_axis_tdata;
|
||||||
|
logic s_axis_tvalid;
|
||||||
|
logic start;
|
||||||
|
logic [31:0] smp_num;
|
||||||
|
logic [15:0] seq_num;
|
||||||
|
|
||||||
|
logic req_ready;
|
||||||
|
wire send_req;
|
||||||
|
|
||||||
|
wire [7:0] m_axis_tdata;
|
||||||
|
wire m_axis_tvalid;
|
||||||
|
logic m_axis_tready;
|
||||||
|
wire m_axis_tlast;
|
||||||
|
|
||||||
|
wire finish;
|
||||||
|
|
||||||
|
integer seed;
|
||||||
|
integer total_errors;
|
||||||
|
integer tests_total;
|
||||||
|
integer tests_failed;
|
||||||
|
integer tests_passed;
|
||||||
|
|
||||||
|
integer packets_seen;
|
||||||
|
integer current_packet_byte_count;
|
||||||
|
integer total_words_captured;
|
||||||
|
|
||||||
|
byte packet_bytes [0:PACKET_SIZE-1];
|
||||||
|
logic [ACCUM_WIDTH-1:0] expected_words [0:MAX_WORDS-1];
|
||||||
|
logic [ACCUM_WIDTH-1:0] captured_words_le[0:MAX_WORDS-1];
|
||||||
|
logic [ACCUM_WIDTH-1:0] captured_words_be[0:MAX_WORDS-1];
|
||||||
|
|
||||||
|
accumulator_top #(
|
||||||
|
.DATA_WIDTH(DATA_WIDTH),
|
||||||
|
.ACCUM_WIDTH(ACCUM_WIDTH),
|
||||||
|
.N_MAX(N_MAX),
|
||||||
|
.WINDOW_SIZE(WINDOW_SIZE),
|
||||||
|
.PACKET_SIZE(PACKET_SIZE)
|
||||||
|
) dut (
|
||||||
|
.clk_in(clk_in),
|
||||||
|
.rst(rst),
|
||||||
|
.s_axis_tdata(s_axis_tdata),
|
||||||
|
.s_axis_tvalid(s_axis_tvalid),
|
||||||
|
.start(start),
|
||||||
|
.smp_num(smp_num),
|
||||||
|
.seq_num(seq_num),
|
||||||
|
.eth_clk_in(eth_clk_in),
|
||||||
|
.req_ready(req_ready),
|
||||||
|
.send_req(send_req),
|
||||||
|
.m_axis_tdata(m_axis_tdata),
|
||||||
|
.m_axis_tvalid(m_axis_tvalid),
|
||||||
|
.m_axis_tready(m_axis_tready),
|
||||||
|
.m_axis_tlast(m_axis_tlast),
|
||||||
|
.finish(finish)
|
||||||
|
);
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
clk_in = 1'b0;
|
||||||
|
forever #5 clk_in = ~clk_in;
|
||||||
|
end
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
eth_clk_in = 1'b0;
|
||||||
|
forever #4 eth_clk_in = ~eth_clk_in;
|
||||||
|
end
|
||||||
|
|
||||||
|
task automatic clear_scoreboard;
|
||||||
|
integer i;
|
||||||
|
begin
|
||||||
|
packets_seen = 0;
|
||||||
|
current_packet_byte_count = 0;
|
||||||
|
total_words_captured = 0;
|
||||||
|
for (i = 0; i < MAX_WORDS; i = i + 1) begin
|
||||||
|
expected_words[i] = '0;
|
||||||
|
captured_words_le[i] = '0;
|
||||||
|
captured_words_be[i] = '0;
|
||||||
|
end
|
||||||
|
for (i = 0; i < PACKET_SIZE; i = i + 1)
|
||||||
|
packet_bytes[i] = 8'h00;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic reset_dut;
|
||||||
|
begin
|
||||||
|
rst = 1'b1;
|
||||||
|
start = 1'b0;
|
||||||
|
s_axis_tdata = '0;
|
||||||
|
s_axis_tvalid = 1'b0;
|
||||||
|
smp_num = '0;
|
||||||
|
seq_num = '0;
|
||||||
|
req_ready = 1'b0;
|
||||||
|
m_axis_tready = 1'b1;
|
||||||
|
clear_scoreboard();
|
||||||
|
|
||||||
|
repeat(12) @(posedge clk_in);
|
||||||
|
rst = 1'b0;
|
||||||
|
repeat(8) @(posedge clk_in);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic pulse_start;
|
||||||
|
begin
|
||||||
|
@(posedge clk_in);
|
||||||
|
start <= 1'b1;
|
||||||
|
@(posedge clk_in);
|
||||||
|
start <= 1'b0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic send_one_sample(input logic [DATA_WIDTH-1:0] val);
|
||||||
|
begin
|
||||||
|
@(posedge clk_in);
|
||||||
|
s_axis_tdata <= val;
|
||||||
|
s_axis_tvalid <= 1'b1;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic stop_stream;
|
||||||
|
begin
|
||||||
|
@(posedge clk_in);
|
||||||
|
s_axis_tdata <= '0;
|
||||||
|
s_axis_tvalid <= 1'b0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic run_test(
|
||||||
|
input integer test_id,
|
||||||
|
input integer seq_num_i,
|
||||||
|
input integer smp_num_i,
|
||||||
|
input bit randomize_data,
|
||||||
|
input integer base_value,
|
||||||
|
input string test_name
|
||||||
|
);
|
||||||
|
logic [DATA_WIDTH-1:0] sample_mem [0:MAX_SEQ_NUM-1][0:(N_MAX*WINDOW_SIZE)-1];
|
||||||
|
integer seq_idx;
|
||||||
|
integer sample_idx;
|
||||||
|
integer word_idx;
|
||||||
|
integer k;
|
||||||
|
integer exp_word_count;
|
||||||
|
integer exp_packet_count;
|
||||||
|
integer sample_value;
|
||||||
|
integer local_sum;
|
||||||
|
integer timeout_cnt;
|
||||||
|
bit le_ok;
|
||||||
|
bit be_ok;
|
||||||
|
integer errors_before;
|
||||||
|
integer i;
|
||||||
|
begin
|
||||||
|
tests_total = tests_total + 1;
|
||||||
|
errors_before = total_errors;
|
||||||
|
|
||||||
|
if (smp_num_i <= 0 || smp_num_i > N_MAX * WINDOW_SIZE || (smp_num_i % WINDOW_SIZE) != 0)
|
||||||
|
$fatal(1, "[%0s] invalid smp_num=%0d", test_name, smp_num_i);
|
||||||
|
if (seq_num_i <= 0 || seq_num_i > MAX_SEQ_NUM)
|
||||||
|
$fatal(1, "[%0s] invalid seq_num=%0d", test_name, seq_num_i);
|
||||||
|
|
||||||
|
$display("\n========================================");
|
||||||
|
$display("TEST %0d: %0s", test_id, test_name);
|
||||||
|
$display("seq_num=%0d smp_num=%0d randomize=%0d", seq_num_i, smp_num_i, randomize_data);
|
||||||
|
$display("========================================");
|
||||||
|
|
||||||
|
reset_dut();
|
||||||
|
smp_num = smp_num_i;
|
||||||
|
seq_num = seq_num_i;
|
||||||
|
req_ready = 1'b1; // приемник готов заранее
|
||||||
|
|
||||||
|
exp_word_count = smp_num_i / WINDOW_SIZE;
|
||||||
|
exp_packet_count = (exp_word_count + READ_BATCH_SIZE - 1) / READ_BATCH_SIZE;
|
||||||
|
|
||||||
|
for (seq_idx = 0; seq_idx < seq_num_i; seq_idx = seq_idx + 1) begin
|
||||||
|
for (sample_idx = 0; sample_idx < smp_num_i; sample_idx = sample_idx + 1) begin
|
||||||
|
if (randomize_data)
|
||||||
|
sample_value = $unsigned($random(seed)) % (1 << DATA_WIDTH);
|
||||||
|
else
|
||||||
|
sample_value = (base_value + seq_idx * smp_num_i + sample_idx) % (1 << DATA_WIDTH);
|
||||||
|
sample_mem[seq_idx][sample_idx] = sample_value[DATA_WIDTH-1:0];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for (word_idx = 0; word_idx < exp_word_count; word_idx = word_idx + 1) begin
|
||||||
|
local_sum = 0;
|
||||||
|
for (seq_idx = 0; seq_idx < seq_num_i; seq_idx = seq_idx + 1) begin
|
||||||
|
for (k = 0; k < WINDOW_SIZE; k = k + 1)
|
||||||
|
local_sum = local_sum + sample_mem[seq_idx][word_idx * WINDOW_SIZE + k];
|
||||||
|
end
|
||||||
|
expected_words[word_idx] = local_sum[ACCUM_WIDTH-1:0];
|
||||||
|
$display(" expected[%0d] = %0d (0x%08x)", word_idx, expected_words[word_idx], expected_words[word_idx]);
|
||||||
|
end
|
||||||
|
|
||||||
|
pulse_start();
|
||||||
|
|
||||||
|
for (seq_idx = 0; seq_idx < seq_num_i; seq_idx = seq_idx + 1) begin
|
||||||
|
for (sample_idx = 0; sample_idx < smp_num_i; sample_idx = sample_idx + 1)
|
||||||
|
send_one_sample(sample_mem[seq_idx][sample_idx]);
|
||||||
|
stop_stream();
|
||||||
|
repeat(2) @(posedge clk_in);
|
||||||
|
end
|
||||||
|
|
||||||
|
timeout_cnt = 0;
|
||||||
|
while (packets_seen < exp_packet_count && timeout_cnt < 50 * PACKET_SIZE) begin
|
||||||
|
@(posedge eth_clk_in);
|
||||||
|
timeout_cnt = timeout_cnt + 1;
|
||||||
|
end
|
||||||
|
if (packets_seen < exp_packet_count) begin
|
||||||
|
$display("[%0s] ERROR: timeout waiting packets, got=%0d exp=%0d",
|
||||||
|
test_name, packets_seen, exp_packet_count);
|
||||||
|
total_errors = total_errors + 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
timeout_cnt = 0;
|
||||||
|
while (finish !== 1'b1 && timeout_cnt < 30000) begin
|
||||||
|
@(posedge clk_in);
|
||||||
|
timeout_cnt = timeout_cnt + 1;
|
||||||
|
end
|
||||||
|
if (finish !== 1'b1) begin
|
||||||
|
$display("[%0s] ERROR: timeout waiting finish", test_name);
|
||||||
|
total_errors = total_errors + 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
le_ok = 1'b1;
|
||||||
|
be_ok = 1'b1;
|
||||||
|
for (i = 0; i < exp_word_count; i = i + 1) begin
|
||||||
|
if (captured_words_le[i] !== expected_words[i]) le_ok = 1'b0;
|
||||||
|
if (captured_words_be[i] !== expected_words[i]) be_ok = 1'b0;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (!le_ok && !be_ok) begin
|
||||||
|
$display("[%0s] ERROR: payload mismatch", test_name);
|
||||||
|
for (i = 0; i < exp_word_count; i = i + 1)
|
||||||
|
$display(" idx=%0d exp=0x%08x le=0x%08x be=0x%08x",
|
||||||
|
i, expected_words[i], captured_words_le[i], captured_words_be[i]);
|
||||||
|
total_errors = total_errors + 1;
|
||||||
|
end else if (le_ok) begin
|
||||||
|
$display("[%0s] payload check passed in little-endian", test_name);
|
||||||
|
end else begin
|
||||||
|
$display("[%0s] payload check passed in big-endian", test_name);
|
||||||
|
end
|
||||||
|
|
||||||
|
if (total_errors == errors_before) begin
|
||||||
|
tests_passed = tests_passed + 1;
|
||||||
|
$display("TEST %0d PASSED: %0s", test_id, test_name);
|
||||||
|
end else begin
|
||||||
|
tests_failed = tests_failed + 1;
|
||||||
|
$display("TEST %0d FAILED: %0s", test_id, test_name);
|
||||||
|
end
|
||||||
|
|
||||||
|
req_ready = 1'b0;
|
||||||
|
repeat(10) @(posedge clk_in);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
always @(posedge eth_clk_in) begin : CAPTURE_AXIS
|
||||||
|
integer idx;
|
||||||
|
logic [31:0] tmp_le;
|
||||||
|
logic [31:0] tmp_be;
|
||||||
|
if (rst) begin
|
||||||
|
current_packet_byte_count = 0;
|
||||||
|
end else if (m_axis_tvalid && m_axis_tready) begin
|
||||||
|
if (current_packet_byte_count < PACKET_SIZE)
|
||||||
|
packet_bytes[current_packet_byte_count] = m_axis_tdata;
|
||||||
|
current_packet_byte_count = current_packet_byte_count + 1;
|
||||||
|
|
||||||
|
if (m_axis_tlast) begin
|
||||||
|
packets_seen = packets_seen + 1;
|
||||||
|
|
||||||
|
if (current_packet_byte_count != PACKET_SIZE) begin
|
||||||
|
$display("[packet] ERROR: packet size=%0d expected=%0d", current_packet_byte_count, PACKET_SIZE);
|
||||||
|
total_errors = total_errors + 1;
|
||||||
|
end
|
||||||
|
|
||||||
|
for (idx = 0; idx < READ_BATCH_SIZE; idx = idx + 1) begin
|
||||||
|
tmp_le = {
|
||||||
|
packet_bytes[idx*4 + 3],
|
||||||
|
packet_bytes[idx*4 + 2],
|
||||||
|
packet_bytes[idx*4 + 1],
|
||||||
|
packet_bytes[idx*4 + 0]
|
||||||
|
};
|
||||||
|
tmp_be = {
|
||||||
|
packet_bytes[idx*4 + 0],
|
||||||
|
packet_bytes[idx*4 + 1],
|
||||||
|
packet_bytes[idx*4 + 2],
|
||||||
|
packet_bytes[idx*4 + 3]
|
||||||
|
};
|
||||||
|
if (total_words_captured + idx < MAX_WORDS) begin
|
||||||
|
captured_words_le[total_words_captured + idx] = tmp_le;
|
||||||
|
captured_words_be[total_words_captured + idx] = tmp_be;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
total_words_captured = total_words_captured + READ_BATCH_SIZE;
|
||||||
|
current_packet_byte_count = 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
seed = 32'h1badf00d;
|
||||||
|
total_errors = 0;
|
||||||
|
tests_total = 0;
|
||||||
|
tests_failed = 0;
|
||||||
|
tests_passed = 0;
|
||||||
|
|
||||||
|
reset_dut();
|
||||||
|
|
||||||
|
run_test(1, 1, 1 * WINDOW_SIZE, 1'b0, 1, "deterministic_small");
|
||||||
|
// $finish;
|
||||||
|
run_test(2, 2, 1 * WINDOW_SIZE, 1'b1, 0, "random_seq3_smp8");
|
||||||
|
run_test(3, 1, 16 * WINDOW_SIZE, 1'b1, 0, "random_seq5_smp16_multi_packet");
|
||||||
|
run_test(4, 2, 12 * WINDOW_SIZE, 1'b1, 0, "random_seq7_smp12");
|
||||||
|
run_test(5, 4, 256 * WINDOW_SIZE, 1'b1, 0, "random_max_smpnum");
|
||||||
|
run_test(6, 2, 1500 * WINDOW_SIZE, 1'b1, 0, "random_max_smpnum2");
|
||||||
|
run_test(7, 20, 1 * WINDOW_SIZE, 1'b1, 0, "random_20seq");
|
||||||
|
run_test(8, 20, 3 * WINDOW_SIZE, 1'b1, 0, "random_20seqx3");
|
||||||
|
run_test(9, 200, 1 * WINDOW_SIZE, 1'b1, 0, "random_200seq");
|
||||||
|
|
||||||
|
$display("\n========================================");
|
||||||
|
$display("ALL TESTS COMPLETED");
|
||||||
|
$display("tests_total = %0d", tests_total);
|
||||||
|
$display("tests_passed = %0d", tests_passed);
|
||||||
|
$display("tests_failed = %0d", tests_failed);
|
||||||
|
$display("total_errors = %0d", total_errors);
|
||||||
|
$display("========================================");
|
||||||
|
|
||||||
|
if (total_errors != 0)
|
||||||
|
$fatal(1, "TB FAILED with %0d error(s)", total_errors);
|
||||||
|
else
|
||||||
|
$display("TB PASSED");
|
||||||
|
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
183
rtl/accum/tests/accum_tb.sv
Normal file
183
rtl/accum/tests/accum_tb.sv
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module tb_accumulator;
|
||||||
|
|
||||||
|
localparam DATA_WIDTH = 12;
|
||||||
|
localparam ACCUM_WIDTH = 32;
|
||||||
|
localparam N_MAX = 64;
|
||||||
|
localparam WINDOW_SIZE = 4;
|
||||||
|
localparam PACKET_SIZE = 8; // bytes
|
||||||
|
localparam READ_BATCH_SIZE = (PACKET_SIZE*8)/ACCUM_WIDTH; // = 2
|
||||||
|
|
||||||
|
reg clk_in;
|
||||||
|
reg rst;
|
||||||
|
reg [DATA_WIDTH-1:0] s_axis_tdata;
|
||||||
|
reg s_axis_tvalid;
|
||||||
|
reg start;
|
||||||
|
reg [31:0] smp_num;
|
||||||
|
reg [15:0] seq_num;
|
||||||
|
wire [ACCUM_WIDTH-1:0] out_data;
|
||||||
|
wire out_valid;
|
||||||
|
wire readout_begin;
|
||||||
|
reg batch_req;
|
||||||
|
reg finish;
|
||||||
|
|
||||||
|
integer i;
|
||||||
|
integer out_count;
|
||||||
|
|
||||||
|
reg [ACCUM_WIDTH-1:0] expected [0:READ_BATCH_SIZE-1];
|
||||||
|
reg [ACCUM_WIDTH-1:0] got [0:READ_BATCH_SIZE-1];
|
||||||
|
|
||||||
|
accumulator #(
|
||||||
|
.DATA_WIDTH(DATA_WIDTH),
|
||||||
|
.ACCUM_WIDTH(ACCUM_WIDTH),
|
||||||
|
.N_MAX(N_MAX),
|
||||||
|
.WINDOW_SIZE(WINDOW_SIZE),
|
||||||
|
.PACKET_SIZE(PACKET_SIZE)
|
||||||
|
) dut (
|
||||||
|
.clk_in(clk_in),
|
||||||
|
.rst(rst),
|
||||||
|
.s_axis_tdata(s_axis_tdata),
|
||||||
|
.s_axis_tvalid(s_axis_tvalid),
|
||||||
|
.start(start),
|
||||||
|
.smp_num(smp_num),
|
||||||
|
.seq_num(seq_num),
|
||||||
|
.out_data(out_data),
|
||||||
|
.out_valid(out_valid),
|
||||||
|
.readout_begin(readout_begin),
|
||||||
|
.batch_req(batch_req),
|
||||||
|
.finish(finish)
|
||||||
|
);
|
||||||
|
|
||||||
|
// clock 100 MHz
|
||||||
|
initial begin
|
||||||
|
clk_in = 0;
|
||||||
|
forever #5 clk_in = ~clk_in;
|
||||||
|
end
|
||||||
|
|
||||||
|
// send one sample
|
||||||
|
task send_sample(input [DATA_WIDTH-1:0] val);
|
||||||
|
begin
|
||||||
|
@(posedge clk_in);
|
||||||
|
s_axis_tdata <= val;
|
||||||
|
s_axis_tvalid <= 1'b1;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// one idle cycle after valid stream
|
||||||
|
task end_stream;
|
||||||
|
begin
|
||||||
|
@(posedge clk_in);
|
||||||
|
s_axis_tvalid <= 1'b0;
|
||||||
|
s_axis_tdata <= '0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// pulse start
|
||||||
|
task pulse_start;
|
||||||
|
begin
|
||||||
|
@(posedge clk_in);
|
||||||
|
start <= 1'b1;
|
||||||
|
@(posedge clk_in);
|
||||||
|
start <= 1'b0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// pulse batch request
|
||||||
|
task pulse_batch_req;
|
||||||
|
begin
|
||||||
|
@(posedge clk_in);
|
||||||
|
batch_req <= 1'b1;
|
||||||
|
@(posedge clk_in);
|
||||||
|
batch_req <= 1'b0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
repeat(100) @(posedge clk_in);
|
||||||
|
// init
|
||||||
|
rst = 1'b1;
|
||||||
|
s_axis_tdata = '0;
|
||||||
|
s_axis_tvalid= 1'b0;
|
||||||
|
start = 1'b0;
|
||||||
|
smp_num = 32'd8;
|
||||||
|
seq_num = 16'd2;
|
||||||
|
batch_req = 1'b0;
|
||||||
|
finish = 1'b0;
|
||||||
|
|
||||||
|
expected[0] = 32'd60;
|
||||||
|
expected[1] = 32'd92;
|
||||||
|
|
||||||
|
repeat(50) @(posedge clk_in);
|
||||||
|
rst = 1'b0;
|
||||||
|
repeat(50) @(posedge clk_in);
|
||||||
|
|
||||||
|
$display("=== TEST START ===");
|
||||||
|
|
||||||
|
pulse_start();
|
||||||
|
|
||||||
|
// seq 0: [1..8]
|
||||||
|
send_sample(12'd1);
|
||||||
|
send_sample(12'd2);
|
||||||
|
send_sample(12'd3);
|
||||||
|
send_sample(12'd4);
|
||||||
|
send_sample(12'd5);
|
||||||
|
send_sample(12'd6);
|
||||||
|
send_sample(12'd7);
|
||||||
|
send_sample(12'd8);
|
||||||
|
end_stream();
|
||||||
|
|
||||||
|
// небольшой зазор
|
||||||
|
repeat(5) @(posedge clk_in);
|
||||||
|
|
||||||
|
// seq 1: [11..18]
|
||||||
|
send_sample(12'd11);
|
||||||
|
send_sample(12'd12);
|
||||||
|
send_sample(12'd13);
|
||||||
|
send_sample(12'd14);
|
||||||
|
send_sample(12'd15);
|
||||||
|
send_sample(12'd16);
|
||||||
|
send_sample(12'd17);
|
||||||
|
send_sample(12'd18);
|
||||||
|
end_stream();
|
||||||
|
|
||||||
|
$display("[%0t] all input data sent, waiting readout_begin...", $time);
|
||||||
|
|
||||||
|
wait(readout_begin == 1'b1);
|
||||||
|
$display("[%0t] readout_begin asserted", $time);
|
||||||
|
repeat(22) @(posedge clk_in);
|
||||||
|
pulse_batch_req();
|
||||||
|
|
||||||
|
out_count = 0;
|
||||||
|
|
||||||
|
// ждём два слова
|
||||||
|
while (out_count < READ_BATCH_SIZE) begin
|
||||||
|
@(posedge clk_in);
|
||||||
|
if (out_valid) begin
|
||||||
|
got[out_count] = out_data;
|
||||||
|
$display("[%0t] out_valid: got[%0d] = %0d", $time, out_count, out_data);
|
||||||
|
out_count = out_count + 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// проверка
|
||||||
|
for (i = 0; i < READ_BATCH_SIZE; i = i + 1) begin
|
||||||
|
if (got[i] !== expected[i]) begin
|
||||||
|
$error("Mismatch at index %0d: got=%0d expected=%0d", i, got[i], expected[i]);
|
||||||
|
end else begin
|
||||||
|
$display("OK index %0d: %0d", i, got[i]);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// завершаем readout
|
||||||
|
@(posedge clk_in);
|
||||||
|
finish <= 1'b1;
|
||||||
|
|
||||||
|
|
||||||
|
repeat(10) @(posedge clk_in);
|
||||||
|
|
||||||
|
$display("=== TEST PASSED ===");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
290
rtl/accum/tests/out_axis_fifo_tb.sv
Normal file
290
rtl/accum/tests/out_axis_fifo_tb.sv
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
`timescale 1ns/1ps
|
||||||
|
|
||||||
|
module tb_out_axis_fifo;
|
||||||
|
|
||||||
|
localparam int ACCUM_WIDTH = 32;
|
||||||
|
localparam int WINDOW_SIZE = 65;
|
||||||
|
localparam int PACKET_SIZE = 8;
|
||||||
|
localparam int BYTES_PER_WORD = ACCUM_WIDTH / 8;
|
||||||
|
localparam int WORDS_PER_BATCH = PACKET_SIZE / BYTES_PER_WORD; // 1024 / 4 = 256 слов
|
||||||
|
|
||||||
|
logic eth_clk_in;
|
||||||
|
logic acc_clk_in;
|
||||||
|
logic rst;
|
||||||
|
|
||||||
|
logic [31:0] smp_num;
|
||||||
|
|
||||||
|
logic [7:0] m_axis_tdata;
|
||||||
|
logic m_axis_tvalid;
|
||||||
|
logic m_axis_tready;
|
||||||
|
logic m_axis_tlast;
|
||||||
|
|
||||||
|
logic [ACCUM_WIDTH-1:0] acc_din;
|
||||||
|
logic din_valid;
|
||||||
|
|
||||||
|
logic send_req;
|
||||||
|
logic req_ready;
|
||||||
|
|
||||||
|
logic readout_begin;
|
||||||
|
|
||||||
|
logic batch_req;
|
||||||
|
logic finish;
|
||||||
|
|
||||||
|
out_axis_fifo #(
|
||||||
|
.ACCUM_WIDTH(ACCUM_WIDTH),
|
||||||
|
.WINDOW_SIZE(WINDOW_SIZE),
|
||||||
|
.PACKET_SIZE(PACKET_SIZE)
|
||||||
|
) dut (
|
||||||
|
.eth_clk_in (eth_clk_in),
|
||||||
|
.acc_clk_in (acc_clk_in),
|
||||||
|
.rst (rst),
|
||||||
|
.smp_num (smp_num),
|
||||||
|
|
||||||
|
.m_axis_tdata (m_axis_tdata),
|
||||||
|
.m_axis_tvalid (m_axis_tvalid),
|
||||||
|
.m_axis_tready (m_axis_tready),
|
||||||
|
.m_axis_tlast (m_axis_tlast),
|
||||||
|
|
||||||
|
.acc_din (acc_din),
|
||||||
|
.din_valid (din_valid),
|
||||||
|
|
||||||
|
.readout_begin (readout_begin),
|
||||||
|
|
||||||
|
.req_ready (req_ready),
|
||||||
|
.send_req (send_req),
|
||||||
|
|
||||||
|
.batch_req (batch_req),
|
||||||
|
.finish (finish)
|
||||||
|
);
|
||||||
|
|
||||||
|
// clocks
|
||||||
|
initial begin
|
||||||
|
eth_clk_in = 0;
|
||||||
|
forever #6 eth_clk_in = ~eth_clk_in; // 125
|
||||||
|
end
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
acc_clk_in = 0;
|
||||||
|
forever #7.692307692 acc_clk_in = ~acc_clk_in; // 65
|
||||||
|
end
|
||||||
|
|
||||||
|
// scoreboard
|
||||||
|
byte expected_bytes[$];
|
||||||
|
int unsigned compared_bytes;
|
||||||
|
int unsigned mismatch_count;
|
||||||
|
int unsigned total_pushed_words;
|
||||||
|
|
||||||
|
task automatic scoreboard_reset();
|
||||||
|
begin
|
||||||
|
expected_bytes.delete();
|
||||||
|
compared_bytes = 0;
|
||||||
|
mismatch_count = 0;
|
||||||
|
total_pushed_words = 0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic push_expected_word(input logic [ACCUM_WIDTH-1:0] word);
|
||||||
|
begin
|
||||||
|
// queue push
|
||||||
|
expected_bytes.push_back(word[7:0]);
|
||||||
|
expected_bytes.push_back(word[15:8]);
|
||||||
|
expected_bytes.push_back(word[23:16]);
|
||||||
|
expected_bytes.push_back(word[31:24]);
|
||||||
|
total_pushed_words++;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic check_expected_empty(string case_name);
|
||||||
|
begin
|
||||||
|
if (expected_bytes.size() != 0) begin
|
||||||
|
$error("[%0t] %s: expected_bytes is not empty, remaining=%0d",
|
||||||
|
$time, case_name, expected_bytes.size());
|
||||||
|
end else begin
|
||||||
|
$display("[%0t] %s: scoreboard queue empty, all expected bytes were transmitted",
|
||||||
|
$time, case_name);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// axis check
|
||||||
|
always_ff @(posedge eth_clk_in or posedge rst) begin
|
||||||
|
byte exp_byte;
|
||||||
|
if (rst) begin
|
||||||
|
compared_bytes <= 0;
|
||||||
|
mismatch_count <= 0;
|
||||||
|
end else begin
|
||||||
|
if (m_axis_tvalid && m_axis_tready) begin
|
||||||
|
if (expected_bytes.size() == 0) begin
|
||||||
|
$error("[%0t] AXIS produced unexpected byte 0x%02x: expected queue is empty",
|
||||||
|
$time, m_axis_tdata);
|
||||||
|
mismatch_count <= mismatch_count + 1;
|
||||||
|
end else begin
|
||||||
|
exp_byte = expected_bytes.pop_front();
|
||||||
|
compared_bytes <= compared_bytes + 1;
|
||||||
|
|
||||||
|
if (m_axis_tdata !== exp_byte) begin
|
||||||
|
$error("[%0t] AXIS mismatch at byte #%0d: got=0x%02x expected=0x%02x",
|
||||||
|
$time, compared_bytes, m_axis_tdata, exp_byte);
|
||||||
|
mismatch_count <= mismatch_count + 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// helpers
|
||||||
|
task automatic do_reset();
|
||||||
|
begin
|
||||||
|
rst = 1'b1;
|
||||||
|
readout_begin = 1'b0;
|
||||||
|
din_valid = 1'b0;
|
||||||
|
acc_din = '0;
|
||||||
|
smp_num = '0;
|
||||||
|
|
||||||
|
scoreboard_reset();
|
||||||
|
|
||||||
|
repeat (10) @(posedge acc_clk_in);
|
||||||
|
rst = 1'b0;
|
||||||
|
|
||||||
|
repeat (10) @(posedge acc_clk_in);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic pulse_readout_begin(input logic [31:0] smp_num_i);
|
||||||
|
begin
|
||||||
|
smp_num = smp_num_i;
|
||||||
|
@(posedge acc_clk_in);
|
||||||
|
readout_begin <= 1'b1;
|
||||||
|
@(posedge acc_clk_in);
|
||||||
|
readout_begin <= 1'b0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic send_random_words(input int unsigned n_words);
|
||||||
|
int unsigned i;
|
||||||
|
logic [ACCUM_WIDTH-1:0] rand_word;
|
||||||
|
begin
|
||||||
|
for (i = 0; i < n_words; i++) begin
|
||||||
|
rand_word = $urandom;
|
||||||
|
|
||||||
|
@(posedge acc_clk_in);
|
||||||
|
din_valid <= 1'b1;
|
||||||
|
acc_din <= rand_word;
|
||||||
|
|
||||||
|
// expected result
|
||||||
|
push_expected_word(rand_word);
|
||||||
|
end
|
||||||
|
|
||||||
|
@(posedge acc_clk_in);
|
||||||
|
din_valid <= 1'b0;
|
||||||
|
acc_din <= '0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
|
||||||
|
// 1. set smp_num
|
||||||
|
// 2. pulse readout_begon
|
||||||
|
// 3. send 1KB (PACKET_SIZE) after each batch_req pulse
|
||||||
|
// 4. wait for finish
|
||||||
|
// 5. compare axis result
|
||||||
|
task automatic run_case(input logic [31:0] smp_num_i);
|
||||||
|
int batch_count;
|
||||||
|
string case_name;
|
||||||
|
begin
|
||||||
|
batch_count = 0;
|
||||||
|
case_name = $sformatf("run_case(smp_num=%0d)", smp_num_i);
|
||||||
|
|
||||||
|
$display("[%0t] %s start", $time, case_name);
|
||||||
|
|
||||||
|
pulse_readout_begin(smp_num_i);
|
||||||
|
|
||||||
|
while (finish !== 1'b1) begin
|
||||||
|
@(posedge acc_clk_in);
|
||||||
|
|
||||||
|
if (batch_req) begin
|
||||||
|
batch_count++;
|
||||||
|
$display("[%0t] %s: batch_req #%0d -> send %0d words",
|
||||||
|
$time, case_name, batch_count, WORDS_PER_BATCH);
|
||||||
|
|
||||||
|
send_random_words(WORDS_PER_BATCH);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
repeat (200) @(posedge eth_clk_in);
|
||||||
|
|
||||||
|
$display("[%0t] %s done: batches=%0d, pushed_words=%0d, compared_bytes=%0d, mismatches=%0d, wr_cnt=%0d, wr_total=%0d",
|
||||||
|
$time, case_name, batch_count, total_pushed_words, compared_bytes, mismatch_count,
|
||||||
|
dut.wr_cnt, dut.wr_total);
|
||||||
|
|
||||||
|
check_expected_empty(case_name);
|
||||||
|
|
||||||
|
if (mismatch_count != 0) begin
|
||||||
|
$fatal(1, "[%0t] %s FAILED: mismatches=%0d", $time, case_name, mismatch_count);
|
||||||
|
end else begin
|
||||||
|
$display("[%0t] %s PASSED", $time, case_name);
|
||||||
|
end
|
||||||
|
|
||||||
|
@(posedge acc_clk_in);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// eth beh simulator
|
||||||
|
int axis_byte_count;
|
||||||
|
|
||||||
|
always_ff @(posedge eth_clk_in or posedge rst) begin
|
||||||
|
if (rst) begin
|
||||||
|
axis_byte_count <= 0;
|
||||||
|
req_ready <= 0;
|
||||||
|
m_axis_tready <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
req_ready <= 1;
|
||||||
|
|
||||||
|
// request send
|
||||||
|
if (send_req) begin
|
||||||
|
m_axis_tready <= 1'b1;
|
||||||
|
req_ready <= 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (m_axis_tvalid && m_axis_tready) begin
|
||||||
|
axis_byte_count <= axis_byte_count + 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
// main
|
||||||
|
initial begin
|
||||||
|
// init
|
||||||
|
rst = 1'b0;
|
||||||
|
readout_begin = 1'b0;
|
||||||
|
din_valid = 1'b0;
|
||||||
|
acc_din = '0;
|
||||||
|
smp_num = '0;
|
||||||
|
|
||||||
|
repeat (500) @(posedge acc_clk_in);
|
||||||
|
|
||||||
|
// 1
|
||||||
|
do_reset();
|
||||||
|
repeat (500) @(posedge acc_clk_in);
|
||||||
|
run_case(32'd17);
|
||||||
|
repeat (20) @(posedge acc_clk_in);
|
||||||
|
|
||||||
|
// 2
|
||||||
|
do_reset();
|
||||||
|
run_case(32'd1024);
|
||||||
|
repeat (20) @(posedge acc_clk_in);
|
||||||
|
|
||||||
|
// 3
|
||||||
|
do_reset();
|
||||||
|
run_case(32'd77777);
|
||||||
|
repeat (20) @(posedge acc_clk_in);
|
||||||
|
|
||||||
|
do_reset();
|
||||||
|
repeat (20) @(posedge acc_clk_in);
|
||||||
|
|
||||||
|
$display("[%0t] ALL TESTS DONE", $time);
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
183
rtl/accum/tests/tb_accumulator_top_behav.wcfg
Normal file
183
rtl/accum/tests/tb_accumulator_top_behav.wcfg
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<wave_config>
|
||||||
|
<wave_state>
|
||||||
|
</wave_state>
|
||||||
|
<db_ref_list>
|
||||||
|
<db_ref path="tb_accumulator_top_behav.wdb" id="1">
|
||||||
|
<top_modules>
|
||||||
|
<top_module name="glbl" />
|
||||||
|
<top_module name="tb_accumulator_top" />
|
||||||
|
</top_modules>
|
||||||
|
</db_ref>
|
||||||
|
</db_ref_list>
|
||||||
|
<zoom_setting>
|
||||||
|
<ZoomStartTime time="2,748,541.000 ns"></ZoomStartTime>
|
||||||
|
<ZoomEndTime time="2,749,382.001 ns"></ZoomEndTime>
|
||||||
|
<Cursor1Time time="2,749,045.000 ns"></Cursor1Time>
|
||||||
|
</zoom_setting>
|
||||||
|
<column_width_setting>
|
||||||
|
<NameColumnWidth column_width="556"></NameColumnWidth>
|
||||||
|
<ValueColumnWidth column_width="107"></ValueColumnWidth>
|
||||||
|
</column_width_setting>
|
||||||
|
<WVObjectSize size="18" />
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/clk_in">
|
||||||
|
<obj_property name="ElementShortName">clk_in</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">clk_in</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/eth_clk_in">
|
||||||
|
<obj_property name="ElementShortName">eth_clk_in</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">eth_clk_in</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/rst">
|
||||||
|
<obj_property name="ElementShortName">rst</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">rst</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/s_axis_tdata">
|
||||||
|
<obj_property name="ElementShortName">s_axis_tdata[11:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">s_axis_tdata[11:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/s_axis_tvalid">
|
||||||
|
<obj_property name="ElementShortName">s_axis_tvalid</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">s_axis_tvalid</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/start">
|
||||||
|
<obj_property name="ElementShortName">start</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">start</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/smp_num">
|
||||||
|
<obj_property name="ElementShortName">smp_num[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">smp_num[31:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/seq_num">
|
||||||
|
<obj_property name="ElementShortName">seq_num[15:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">seq_num[15:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/req_ready">
|
||||||
|
<obj_property name="ElementShortName">req_ready</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">req_ready</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#E0FFFF</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/send_req">
|
||||||
|
<obj_property name="ElementShortName">send_req</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">send_req</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#E0FFFF</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/m_axis_tdata">
|
||||||
|
<obj_property name="ElementShortName">m_axis_tdata[7:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">m_axis_tdata[7:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#008080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/m_axis_tready">
|
||||||
|
<obj_property name="ElementShortName">m_axis_tready</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">m_axis_tready</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#00FFFF</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/m_axis_tlast">
|
||||||
|
<obj_property name="ElementShortName">m_axis_tlast</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">m_axis_tlast</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#008080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/finish">
|
||||||
|
<obj_property name="ElementShortName">finish</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">finish</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FAAFBE</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/dut/batch_req">
|
||||||
|
<obj_property name="ElementShortName">batch_req</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">batch_req</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#00FFFF</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/dut/readout_begin">
|
||||||
|
<obj_property name="ElementShortName">readout_begin</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">readout_begin</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#00FFFF</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="group" fp_name="group25">
|
||||||
|
<obj_property name="label">acc</obj_property>
|
||||||
|
<obj_property name="DisplayName">label</obj_property>
|
||||||
|
<obj_property name="isExpanded"></obj_property>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/dut/accum_main/PACKET_SIZE">
|
||||||
|
<obj_property name="ElementShortName">PACKET_SIZE[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">PACKET_SIZE[31:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/dut/accum_main/READ_BATCH_SIZE">
|
||||||
|
<obj_property name="ElementShortName">READ_BATCH_SIZE[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">READ_BATCH_SIZE[31:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/dut/accum_main/addrb">
|
||||||
|
<obj_property name="ElementShortName">addrb[15:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">addrb[15:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/dut/accum_main/wr_state">
|
||||||
|
<obj_property name="ElementShortName">wr_state[3:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_state[3:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="group" fp_name="group27">
|
||||||
|
<obj_property name="label">fifo</obj_property>
|
||||||
|
<obj_property name="DisplayName">label</obj_property>
|
||||||
|
<obj_property name="isExpanded"></obj_property>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/dut/output_async_fifo/acc_din">
|
||||||
|
<obj_property name="ElementShortName">acc_din[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">acc_din[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FF0080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/dut/output_async_fifo/din_valid">
|
||||||
|
<obj_property name="ElementShortName">din_valid</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">din_valid</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FF0080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/dut/output_async_fifo/batch_req">
|
||||||
|
<obj_property name="ElementShortName">batch_req</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">batch_req</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/dut/output_async_fifo/wr_state">
|
||||||
|
<obj_property name="ElementShortName">wr_state[2:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_state[2:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/dut/output_async_fifo/rd_state">
|
||||||
|
<obj_property name="ElementShortName">rd_state[2:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">rd_state[2:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/dut/output_async_fifo/wr_unavail">
|
||||||
|
<obj_property name="ElementShortName">wr_unavail</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_unavail</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFFF00</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/dut/output_async_fifo/wr_rst_busy">
|
||||||
|
<obj_property name="ElementShortName">wr_rst_busy</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_rst_busy</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFFF00</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_accumulator_top/dut/output_async_fifo/xpm_fifo_async_inst/empty">
|
||||||
|
<obj_property name="ElementShortName">empty</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">empty</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/dut/output_async_fifo/xpm_fifo_async_inst/PROG_FULL_THRESH">
|
||||||
|
<obj_property name="ElementShortName">PROG_FULL_THRESH[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">PROG_FULL_THRESH[31:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/dut/output_async_fifo/xpm_fifo_async_inst/wr_data_count">
|
||||||
|
<obj_property name="ElementShortName">wr_data_count[9:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_data_count[9:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_accumulator_top/dut/output_async_fifo/xpm_fifo_async_inst/rd_data_count">
|
||||||
|
<obj_property name="ElementShortName">rd_data_count[11:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">rd_data_count[11:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
</wvobject>
|
||||||
|
</wave_config>
|
||||||
196
rtl/accum/tests/tb_out_axis_fifo_behav.wcfg
Normal file
196
rtl/accum/tests/tb_out_axis_fifo_behav.wcfg
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<wave_config>
|
||||||
|
<wave_state>
|
||||||
|
</wave_state>
|
||||||
|
<db_ref_list>
|
||||||
|
<db_ref path="tb_out_axis_fifo_behav.wdb" id="1">
|
||||||
|
<top_modules>
|
||||||
|
<top_module name="glbl" />
|
||||||
|
<top_module name="tb_out_axis_fifo" />
|
||||||
|
</top_modules>
|
||||||
|
</db_ref>
|
||||||
|
</db_ref_list>
|
||||||
|
<zoom_setting>
|
||||||
|
<ZoomStartTime time="18,433.000 ns"></ZoomStartTime>
|
||||||
|
<ZoomEndTime time="24,238.001 ns"></ZoomEndTime>
|
||||||
|
<Cursor1Time time="21,618.000 ns"></Cursor1Time>
|
||||||
|
</zoom_setting>
|
||||||
|
<column_width_setting>
|
||||||
|
<NameColumnWidth column_width="196"></NameColumnWidth>
|
||||||
|
<ValueColumnWidth column_width="147"></ValueColumnWidth>
|
||||||
|
</column_width_setting>
|
||||||
|
<WVObjectSize size="37" />
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/eth_clk_in">
|
||||||
|
<obj_property name="ElementShortName">eth_clk_in</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">eth_clk_in</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/acc_clk_in">
|
||||||
|
<obj_property name="ElementShortName">acc_clk_in</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">acc_clk_in</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/rst">
|
||||||
|
<obj_property name="ElementShortName">rst</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">rst</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/smp_num">
|
||||||
|
<obj_property name="ElementShortName">smp_num[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">smp_num[31:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/acc_din">
|
||||||
|
<obj_property name="ElementShortName">acc_din[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">acc_din[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FF0080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/din_valid">
|
||||||
|
<obj_property name="ElementShortName">din_valid</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">din_valid</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FF0080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/fifo_din_r">
|
||||||
|
<obj_property name="ElementShortName">fifo_din_r[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">fifo_din_r[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/fifo_wr_en_r">
|
||||||
|
<obj_property name="ElementShortName">fifo_wr_en_r</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">fifo_wr_en_r</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/readout_begin">
|
||||||
|
<obj_property name="ElementShortName">readout_begin</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">readout_begin</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFFF00</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/batch_req">
|
||||||
|
<obj_property name="ElementShortName">batch_req</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">batch_req</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/finish">
|
||||||
|
<obj_property name="ElementShortName">finish</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">finish</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#00FFFF</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/m_axis_tdata">
|
||||||
|
<obj_property name="ElementShortName">m_axis_tdata[7:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">m_axis_tdata[7:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/m_axis_tvalid">
|
||||||
|
<obj_property name="ElementShortName">m_axis_tvalid</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">m_axis_tvalid</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/m_axis_tready">
|
||||||
|
<obj_property name="ElementShortName">m_axis_tready</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">m_axis_tready</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/m_axis_tlast">
|
||||||
|
<obj_property name="ElementShortName">m_axis_tlast</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">m_axis_tlast</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/axis_byte_count">
|
||||||
|
<obj_property name="ElementShortName">axis_byte_count[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">axis_byte_count[31:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/ACCUM_WIDTH">
|
||||||
|
<obj_property name="ElementShortName">ACCUM_WIDTH[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">ACCUM_WIDTH[31:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/WINDOW_SIZE">
|
||||||
|
<obj_property name="ElementShortName">WINDOW_SIZE[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">WINDOW_SIZE[31:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/PACKET_SIZE">
|
||||||
|
<obj_property name="ElementShortName">PACKET_SIZE[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">PACKET_SIZE[31:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/wr_state">
|
||||||
|
<obj_property name="ElementShortName">wr_state[2:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_state[2:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/wr_cnt">
|
||||||
|
<obj_property name="ElementShortName">wr_cnt[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_cnt[31:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/wr_batch_tgt">
|
||||||
|
<obj_property name="ElementShortName">wr_batch_tgt[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_batch_tgt[31:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/wr_total">
|
||||||
|
<obj_property name="ElementShortName">wr_total[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_total[31:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/xpm_fifo_async_inst/prog_empty">
|
||||||
|
<obj_property name="ElementShortName">prog_empty</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">prog_empty</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/xpm_fifo_async_inst/prog_full">
|
||||||
|
<obj_property name="ElementShortName">prog_full</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">prog_full</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/xpm_fifo_async_inst/wr_ack">
|
||||||
|
<obj_property name="ElementShortName">wr_ack</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_ack</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/xpm_fifo_async_inst/wr_data_count">
|
||||||
|
<obj_property name="ElementShortName">wr_data_count[2:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_data_count[2:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/xpm_fifo_async_inst/wr_data_count">
|
||||||
|
<obj_property name="ElementShortName">wr_data_count[2:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_data_count[2:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/xpm_fifo_async_inst/rd_data_count">
|
||||||
|
<obj_property name="ElementShortName">rd_data_count[4:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">rd_data_count[4:0]</obj_property>
|
||||||
|
<obj_property name="Radix">UNSIGNEDDECRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/rst_sync_ff">
|
||||||
|
<obj_property name="ElementShortName">rst_sync_ff[1:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">rst_sync_ff[1:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_out_axis_fifo/dut/rd_state">
|
||||||
|
<obj_property name="ElementShortName">rd_state[2:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">rd_state[2:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/rd_en">
|
||||||
|
<obj_property name="ElementShortName">rd_en</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">rd_en</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/rd_valid">
|
||||||
|
<obj_property name="ElementShortName">rd_valid</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">rd_valid</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/xpm_fifo_async_inst/overflow">
|
||||||
|
<obj_property name="ElementShortName">overflow</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">overflow</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/dut/xpm_fifo_async_inst/wr_rst_busy">
|
||||||
|
<obj_property name="ElementShortName">wr_rst_busy</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">wr_rst_busy</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/send_req">
|
||||||
|
<obj_property name="ElementShortName">send_req</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">send_req</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_out_axis_fifo/req_ready">
|
||||||
|
<obj_property name="ElementShortName">req_ready</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">req_ready</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
</wave_config>
|
||||||
10
rtl/accum/tests/test_timing.xdc
Normal file
10
rtl/accum/tests/test_timing.xdc
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Primary clocks
|
||||||
|
create_clock -name eth_clk -period 8.000 [get_ports eth_clk_in]
|
||||||
|
create_clock -name acc_clk -period 15.385 [get_ports clk_in]
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous clock groups
|
||||||
|
|
||||||
|
set_clock_groups -name ASYNC_ETH_ACC -asynchronous \
|
||||||
|
-group [get_clocks eth_clk] \
|
||||||
|
-group [get_clocks acc_clk]
|
||||||
63
rtl/controller/README.md
Normal file
63
rtl/controller/README.md
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# Системный контроллер
|
||||||
|
|
||||||
|
Контроллер принимает входные пакеты udp с ethernet, передаваемые по axi stream, и выполняет настройку выходных регистров в соотвествии с содержимым этого пакета, а также синхронизирует сигналы между тремя clock domains - есть clk от ethernet, clk для ЦАП и clk для АЦП
|
||||||
|
|
||||||
|
## Список параметров:
|
||||||
|
- dac_data_width - битность данных ЦАП, <= 16bit
|
||||||
|
|
||||||
|
## Список входных портов:
|
||||||
|
- eth_clk_in - базовая входная частота
|
||||||
|
- dac_clk_in - входная частота ЦАП
|
||||||
|
- adc_clk_in - входная частота АЦП
|
||||||
|
- rst_n - общий reset
|
||||||
|
- s_axis [8 bit] - AXI stream slave для приема данных от ethernet udp (уже разобранный payload по байтам) - домен eth_clk
|
||||||
|
- finish - сигнал окончания приема данных с АЦП, домен adc_clk !
|
||||||
|
|
||||||
|
## Список выходных портов:
|
||||||
|
- dac_pulse_width[31:0] - выход pulse_width в домене dac_clk
|
||||||
|
- dac_pulse_period[31:0] - выход pulse_period в домене dac_clk
|
||||||
|
- dac_pulse_height[dac_data_width-1:0] - выход pulse_height в домене dac_clk
|
||||||
|
- dac_pulse_num[15:0] - выход pulse_num в домене dac_clk
|
||||||
|
---
|
||||||
|
- adc_pulse_period[31:0] - выход pulse_period в домене adc_clk
|
||||||
|
- adc_pulse_num[15:0] - выход pulse_num в домене adc_clk
|
||||||
|
---
|
||||||
|
- dac_start - start в домене dac_clk
|
||||||
|
- adc_start - start в домене adc_clk
|
||||||
|
---
|
||||||
|
- dac_rst - rst в домене dac_clk
|
||||||
|
- adc_rst - rst в домене adc_clk
|
||||||
|
|
||||||
|
## Логика работы:
|
||||||
|
по умолчанию после инициализации блок встает в состояние ожидания (*idle*), и становится *ready* для приема данных по axis.
|
||||||
|
далее ждет контрольный пакет. всего есть 3 вариации контрольных пакетов (в любом порядке), получаемых по axi stream:
|
||||||
|
```
|
||||||
|
8'b00001111 - soft reset
|
||||||
|
8'b11110000 - start
|
||||||
|
8'b10001000 - set_data
|
||||||
|
```
|
||||||
|
|
||||||
|
*soft reset* отправляет пульс rst на dac_rst и adc_rst, синхронизировав пульсы в их доменах. при этом сброс самого контроллера не происходит, значения остаются как и были
|
||||||
|
|
||||||
|
*start* отправляет пульс start на dac_start и adc_start в их доменах. при этом после этого блок перестает быть ready и ждет, пока не придет пульс finish, после этого он возвращается снова в *idle* состояние
|
||||||
|
|
||||||
|
*set_data* значит, что следующие 128 бит = 16*8 байт, пришедшии по axis - это конфигурационная информация и ее нужно записать в внутренний регистр на 128 бит.
|
||||||
|
|
||||||
|
конфигурационный регистр на 128 бит делится так:
|
||||||
|
```
|
||||||
|
reg[31:0] - pulse_width
|
||||||
|
reg[63:32] - pulse_period
|
||||||
|
reg[79:64] - pulse_num
|
||||||
|
reg[79+dac_data_width:80] - pulse_height
|
||||||
|
reg[127:96] - pulse_period_adc
|
||||||
|
```
|
||||||
|
|
||||||
|
соотвественно эти записанные значения выставляются на соотвествующие выходные сигналы в доменах dac_clk и adc_clk. выходы обновляются каждый раз, когда происходит set_data, и сигналы сохраняют своё значение до следующего set_data.
|
||||||
|
|
||||||
|
## Симуляция
|
||||||
|
Тесты запускаются автоматически через make.
|
||||||
|
```
|
||||||
|
cd tests
|
||||||
|
make sim
|
||||||
|
```
|
||||||
|
Должно выдать "All tests done" в конце симуляции.
|
||||||
464
rtl/controller/src/controller.sv
Normal file
464
rtl/controller/src/controller.sv
Normal file
@ -0,0 +1,464 @@
|
|||||||
|
module control #(
|
||||||
|
parameter int unsigned DAC_DATA_WIDTH = 12
|
||||||
|
) (
|
||||||
|
input logic eth_clk_in,
|
||||||
|
input logic dac_clk_in,
|
||||||
|
input logic adc_clk_in,
|
||||||
|
input logic rst_n,
|
||||||
|
|
||||||
|
// AXI stream slave, eth_clk_in domain
|
||||||
|
input logic [7:0] s_axis_tdata,
|
||||||
|
input logic s_axis_tvalid,
|
||||||
|
output logic s_axis_tready,
|
||||||
|
input logic s_axis_tlast,
|
||||||
|
|
||||||
|
// adc_clk_in domain
|
||||||
|
input logic finish,
|
||||||
|
|
||||||
|
// dac_clk_in domain outputs
|
||||||
|
output logic [31:0] dac_pulse_width,
|
||||||
|
output logic [31:0] dac_pulse_period,
|
||||||
|
output logic [DAC_DATA_WIDTH-1:0] dac_pulse_height,
|
||||||
|
output logic [15:0] dac_pulse_num,
|
||||||
|
|
||||||
|
// adc_clk_in domain outputs
|
||||||
|
output logic [31:0] adc_pulse_period,
|
||||||
|
output logic [15:0] adc_pulse_num,
|
||||||
|
|
||||||
|
// pulse outputs
|
||||||
|
output logic dac_start,
|
||||||
|
output logic adc_start,
|
||||||
|
output logic dac_rst,
|
||||||
|
output logic adc_rst
|
||||||
|
);
|
||||||
|
|
||||||
|
// static checks
|
||||||
|
initial begin
|
||||||
|
if (DAC_DATA_WIDTH > 16) begin
|
||||||
|
$error("DAC_DATA_WIDTH must be <= 16");
|
||||||
|
end
|
||||||
|
if (DAC_DATA_WIDTH == 0) begin
|
||||||
|
$error("DAC_DATA_WIDTH must be > 0");
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// command constants
|
||||||
|
localparam logic [7:0] CMD_SOFT_RESET = 8'h0F;
|
||||||
|
localparam logic [7:0] CMD_START = 8'hF0;
|
||||||
|
localparam logic [7:0] CMD_SET_DATA = 8'h88;
|
||||||
|
|
||||||
|
// reset synchronizers: async assert, sync deassert in each domain
|
||||||
|
logic eth_rst_ff1, eth_rst_ff2;
|
||||||
|
logic dac_rst_ff1, dac_rst_ff2;
|
||||||
|
logic adc_rst_ff1, adc_rst_ff2;
|
||||||
|
|
||||||
|
logic eth_rst;
|
||||||
|
logic dac_rst_int;
|
||||||
|
logic adc_rst_int;
|
||||||
|
|
||||||
|
always_ff @(posedge eth_clk_in or negedge rst_n) begin
|
||||||
|
if (!rst_n) begin
|
||||||
|
eth_rst_ff1 <= 1'b1;
|
||||||
|
eth_rst_ff2 <= 1'b1;
|
||||||
|
end else begin
|
||||||
|
eth_rst_ff1 <= 1'b0;
|
||||||
|
eth_rst_ff2 <= eth_rst_ff1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
always_ff @(posedge dac_clk_in or negedge rst_n) begin
|
||||||
|
if (!rst_n) begin
|
||||||
|
dac_rst_ff1 <= 1'b1;
|
||||||
|
dac_rst_ff2 <= 1'b1;
|
||||||
|
end else begin
|
||||||
|
dac_rst_ff1 <= 1'b0;
|
||||||
|
dac_rst_ff2 <= dac_rst_ff1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
always_ff @(posedge adc_clk_in or negedge rst_n) begin
|
||||||
|
if (!rst_n) begin
|
||||||
|
adc_rst_ff1 <= 1'b1;
|
||||||
|
adc_rst_ff2 <= 1'b1;
|
||||||
|
end else begin
|
||||||
|
adc_rst_ff1 <= 1'b0;
|
||||||
|
adc_rst_ff2 <= adc_rst_ff1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assign eth_rst = eth_rst_ff2;
|
||||||
|
assign dac_rst_int = dac_rst_ff2;
|
||||||
|
assign adc_rst_int = adc_rst_ff2;
|
||||||
|
|
||||||
|
// axi stream is always accepted. If packet is not needed, it is discarded.
|
||||||
|
assign s_axis_tready = 1'b1;
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) wire axis_hs = s_axis_tvalid & s_axis_tready;
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
// Shared 96-bit config bus in ETH domain
|
||||||
|
//
|
||||||
|
// Byte order for SET_DATA payload, little-endian:
|
||||||
|
// payload byte 0 -> cfg_bus_eth[7:0]
|
||||||
|
// payload byte 1 -> cfg_bus_eth[15:8]
|
||||||
|
// ...etc...
|
||||||
|
// payload byte 11 -> cfg_bus_eth[95:88]
|
||||||
|
//
|
||||||
|
// Field layout inside cfg_bus_eth:
|
||||||
|
// [31:0] pulse_width
|
||||||
|
// [63:32] pulse_period
|
||||||
|
// [79:64] pulse_num
|
||||||
|
// [95:80] pulse_height_raw[15:0]
|
||||||
|
// [127:96] pulse_period_ADC
|
||||||
|
//
|
||||||
|
// -------------------------------------------------------------------------
|
||||||
|
(* MARK_DEBUG="true" *) logic [127:0] cfg_bus_eth;
|
||||||
|
logic [127:0] cfg_shift_eth;
|
||||||
|
|
||||||
|
// ETH-domain parser and control
|
||||||
|
typedef enum logic [2:0] {
|
||||||
|
ST_IDLE = 3'd0,
|
||||||
|
ST_RECV_CFG = 3'd1,
|
||||||
|
ST_WAIT_CFG_ACK = 3'd2,
|
||||||
|
ST_DISCARD = 3'd3
|
||||||
|
} eth_state_t;
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) eth_state_t eth_state;
|
||||||
|
|
||||||
|
logic [3:0] cfg_byte_cnt;
|
||||||
|
|
||||||
|
// Busy flag: set by START command, cleared by finish event from ADC domain
|
||||||
|
(* MARK_DEBUG="true" *) logic busy_flag_eth;
|
||||||
|
|
||||||
|
// Pending ACKs for config delivery
|
||||||
|
logic cfg_wait_dac_ack;
|
||||||
|
logic cfg_wait_adc_ack;
|
||||||
|
|
||||||
|
// Event toggles ETH -> DAC/ADC
|
||||||
|
logic start_toggle_eth;
|
||||||
|
logic rst_toggle_eth;
|
||||||
|
|
||||||
|
// Config request toggles ETH -> DAC/ADC
|
||||||
|
logic cfg_req_toggle_dac_eth;
|
||||||
|
logic cfg_req_toggle_adc_eth;
|
||||||
|
|
||||||
|
// ACK toggles DAC/ADC -> ETH
|
||||||
|
logic cfg_ack_toggle_dac;
|
||||||
|
logic cfg_ack_toggle_adc;
|
||||||
|
|
||||||
|
(* ASYNC_REG = "TRUE" *) logic cfg_ack_toggle_dac_meta, cfg_ack_toggle_dac_sync, cfg_ack_toggle_dac_sync_d;
|
||||||
|
(* ASYNC_REG = "TRUE" *) logic cfg_ack_toggle_adc_meta, cfg_ack_toggle_adc_sync, cfg_ack_toggle_adc_sync_d;
|
||||||
|
|
||||||
|
wire cfg_ack_pulse_dac_eth = cfg_ack_toggle_dac_sync ^ cfg_ack_toggle_dac_sync_d;
|
||||||
|
wire cfg_ack_pulse_adc_eth = cfg_ack_toggle_adc_sync ^ cfg_ack_toggle_adc_sync_d;
|
||||||
|
|
||||||
|
always_ff @(posedge eth_clk_in or posedge eth_rst) begin
|
||||||
|
if (eth_rst) begin
|
||||||
|
cfg_ack_toggle_dac_meta <= 1'b0;
|
||||||
|
cfg_ack_toggle_dac_sync <= 1'b0;
|
||||||
|
cfg_ack_toggle_dac_sync_d <= 1'b0;
|
||||||
|
|
||||||
|
cfg_ack_toggle_adc_meta <= 1'b0;
|
||||||
|
cfg_ack_toggle_adc_sync <= 1'b0;
|
||||||
|
cfg_ack_toggle_adc_sync_d <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
cfg_ack_toggle_dac_meta <= cfg_ack_toggle_dac;
|
||||||
|
cfg_ack_toggle_dac_sync <= cfg_ack_toggle_dac_meta;
|
||||||
|
cfg_ack_toggle_dac_sync_d <= cfg_ack_toggle_dac_sync;
|
||||||
|
|
||||||
|
cfg_ack_toggle_adc_meta <= cfg_ack_toggle_adc;
|
||||||
|
cfg_ack_toggle_adc_sync <= cfg_ack_toggle_adc_meta;
|
||||||
|
cfg_ack_toggle_adc_sync_d <= cfg_ack_toggle_adc_sync;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// finish event: ADC -> ETH via toggle CDC
|
||||||
|
logic finish_toggle_adc;
|
||||||
|
logic finish_meta_eth, finish_sync_eth, finish_sync_eth_d;
|
||||||
|
|
||||||
|
wire finish_pulse_eth = finish_sync_eth ^ finish_sync_eth_d;
|
||||||
|
|
||||||
|
always_ff @(posedge adc_clk_in or posedge adc_rst_int) begin
|
||||||
|
if (adc_rst_int) begin
|
||||||
|
finish_toggle_adc <= 1'b0;
|
||||||
|
end else if (finish) begin
|
||||||
|
finish_toggle_adc <= ~finish_toggle_adc;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
always_ff @(posedge eth_clk_in or posedge eth_rst) begin
|
||||||
|
if (eth_rst) begin
|
||||||
|
finish_meta_eth <= 1'b0;
|
||||||
|
finish_sync_eth <= 1'b0;
|
||||||
|
finish_sync_eth_d <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
finish_meta_eth <= finish_toggle_adc;
|
||||||
|
finish_sync_eth <= finish_meta_eth;
|
||||||
|
finish_sync_eth_d <= finish_sync_eth;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// ETH FSM
|
||||||
|
always_ff @(posedge eth_clk_in or posedge eth_rst) begin
|
||||||
|
if (eth_rst) begin
|
||||||
|
eth_state <= ST_IDLE;
|
||||||
|
cfg_byte_cnt <= '0;
|
||||||
|
cfg_shift_eth <= '0;
|
||||||
|
cfg_bus_eth <= '0;
|
||||||
|
|
||||||
|
busy_flag_eth <= 1'b0;
|
||||||
|
|
||||||
|
start_toggle_eth <= 1'b0;
|
||||||
|
rst_toggle_eth <= 1'b0;
|
||||||
|
|
||||||
|
cfg_req_toggle_dac_eth <= 1'b0;
|
||||||
|
cfg_req_toggle_adc_eth <= 1'b0;
|
||||||
|
|
||||||
|
cfg_wait_dac_ack <= 1'b0;
|
||||||
|
cfg_wait_adc_ack <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
// finish always clears busy
|
||||||
|
if (finish_pulse_eth) begin
|
||||||
|
busy_flag_eth <= 1'b0;
|
||||||
|
end
|
||||||
|
|
||||||
|
// config acks
|
||||||
|
if (cfg_ack_pulse_dac_eth) begin
|
||||||
|
cfg_wait_dac_ack <= 1'b0;
|
||||||
|
end
|
||||||
|
if (cfg_ack_pulse_adc_eth) begin
|
||||||
|
cfg_wait_adc_ack <= 1'b0;
|
||||||
|
end
|
||||||
|
|
||||||
|
case (eth_state)
|
||||||
|
ST_IDLE: begin
|
||||||
|
cfg_byte_cnt <= '0;
|
||||||
|
cfg_shift_eth <= cfg_shift_eth;
|
||||||
|
|
||||||
|
if (axis_hs) begin
|
||||||
|
// if busy, drop the whole packet
|
||||||
|
if (busy_flag_eth) begin
|
||||||
|
if (!s_axis_tlast) begin
|
||||||
|
eth_state <= ST_DISCARD;
|
||||||
|
end
|
||||||
|
end else begin
|
||||||
|
unique case (s_axis_tdata)
|
||||||
|
CMD_SOFT_RESET: begin
|
||||||
|
rst_toggle_eth <= ~rst_toggle_eth;
|
||||||
|
end
|
||||||
|
|
||||||
|
CMD_START: begin
|
||||||
|
start_toggle_eth <= ~start_toggle_eth;
|
||||||
|
busy_flag_eth <= 1'b1;
|
||||||
|
end
|
||||||
|
|
||||||
|
CMD_SET_DATA: begin
|
||||||
|
// expect exactly 12 bytes after command
|
||||||
|
if (s_axis_tlast) begin
|
||||||
|
// no payload, invalid packet
|
||||||
|
eth_state <= ST_IDLE;
|
||||||
|
end else begin
|
||||||
|
cfg_byte_cnt <= 4'd0;
|
||||||
|
cfg_shift_eth <= '0;
|
||||||
|
eth_state <= ST_RECV_CFG;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
default: begin
|
||||||
|
// unknown command: discard packet remainder if any
|
||||||
|
if (!s_axis_tlast) begin
|
||||||
|
eth_state <= ST_DISCARD;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ST_RECV_CFG: begin
|
||||||
|
if (axis_hs) begin
|
||||||
|
// little endian packing
|
||||||
|
cfg_shift_eth[cfg_byte_cnt*8 +: 8] <= s_axis_tdata;
|
||||||
|
|
||||||
|
if (cfg_byte_cnt == 4'd15) begin
|
||||||
|
// this must be the final payload byte
|
||||||
|
if (s_axis_tlast) begin
|
||||||
|
cfg_bus_eth <= {s_axis_tdata, cfg_shift_eth[119:0]};
|
||||||
|
cfg_req_toggle_dac_eth <= ~cfg_req_toggle_dac_eth;
|
||||||
|
cfg_req_toggle_adc_eth <= ~cfg_req_toggle_adc_eth;
|
||||||
|
cfg_wait_dac_ack <= 1'b1;
|
||||||
|
cfg_wait_adc_ack <= 1'b1;
|
||||||
|
eth_state <= ST_WAIT_CFG_ACK;
|
||||||
|
end else begin
|
||||||
|
// too many bytes in packet
|
||||||
|
eth_state <= ST_DISCARD;
|
||||||
|
end
|
||||||
|
end else begin
|
||||||
|
// early tlast means packet too short!!
|
||||||
|
if (s_axis_tlast) begin
|
||||||
|
eth_state <= ST_IDLE;
|
||||||
|
end else begin
|
||||||
|
cfg_byte_cnt <= cfg_byte_cnt + 4'd1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ST_WAIT_CFG_ACK: begin
|
||||||
|
// any incoming packet while waiting ack is discarded
|
||||||
|
if (cfg_ack_pulse_dac_eth || cfg_ack_pulse_adc_eth) begin
|
||||||
|
if ((~cfg_wait_dac_ack || cfg_ack_pulse_dac_eth) &&
|
||||||
|
(~cfg_wait_adc_ack || cfg_ack_pulse_adc_eth)) begin
|
||||||
|
eth_state <= ST_IDLE;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if (axis_hs && !s_axis_tlast) begin
|
||||||
|
eth_state <= ST_DISCARD;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ST_DISCARD: begin
|
||||||
|
if (axis_hs && s_axis_tlast) begin
|
||||||
|
eth_state <= ST_IDLE;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
default: begin
|
||||||
|
eth_state <= ST_IDLE;
|
||||||
|
end
|
||||||
|
endcase
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// ETH -> DAC: start/reset event sync
|
||||||
|
(* ASYNC_REG = "TRUE" *) logic start_meta_dac, start_sync_dac;
|
||||||
|
logic start_sync_dac_d;
|
||||||
|
(* ASYNC_REG = "TRUE" *) logic rst_meta_dac, rst_sync_dac;
|
||||||
|
logic rst_sync_dac_d;
|
||||||
|
|
||||||
|
wire dac_start_pulse = start_sync_dac ^ start_sync_dac_d;
|
||||||
|
wire dac_rst_pulse = rst_sync_dac ^ rst_sync_dac_d;
|
||||||
|
|
||||||
|
always_ff @(posedge dac_clk_in or posedge dac_rst_int) begin
|
||||||
|
if (dac_rst_int) begin
|
||||||
|
start_meta_dac <= 1'b0;
|
||||||
|
start_sync_dac <= 1'b0;
|
||||||
|
start_sync_dac_d <= 1'b0;
|
||||||
|
|
||||||
|
rst_meta_dac <= 1'b0;
|
||||||
|
rst_sync_dac <= 1'b0;
|
||||||
|
rst_sync_dac_d <= 1'b0;
|
||||||
|
|
||||||
|
dac_start <= 1'b0;
|
||||||
|
dac_rst <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
start_meta_dac <= start_toggle_eth;
|
||||||
|
start_sync_dac <= start_meta_dac;
|
||||||
|
start_sync_dac_d <= start_sync_dac;
|
||||||
|
|
||||||
|
rst_meta_dac <= rst_toggle_eth;
|
||||||
|
rst_sync_dac <= rst_meta_dac;
|
||||||
|
rst_sync_dac_d <= rst_sync_dac;
|
||||||
|
|
||||||
|
dac_start <= dac_start_pulse;
|
||||||
|
dac_rst <= dac_rst_pulse;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// ETH -> ADC: start/reset event sync
|
||||||
|
(* ASYNC_REG = "TRUE" *) logic start_meta_adc, start_sync_adc;
|
||||||
|
logic start_sync_adc_d;
|
||||||
|
(* ASYNC_REG = "TRUE" *) logic rst_meta_adc, rst_sync_adc;
|
||||||
|
logic rst_sync_adc_d;
|
||||||
|
|
||||||
|
wire adc_start_pulse = start_sync_adc ^ start_sync_adc_d;
|
||||||
|
wire adc_rst_pulse = rst_sync_adc ^ rst_sync_adc_d;
|
||||||
|
|
||||||
|
always_ff @(posedge adc_clk_in or posedge adc_rst_int) begin
|
||||||
|
if (adc_rst_int) begin
|
||||||
|
start_meta_adc <= 1'b0;
|
||||||
|
start_sync_adc <= 1'b0;
|
||||||
|
start_sync_adc_d <= 1'b0;
|
||||||
|
|
||||||
|
rst_meta_adc <= 1'b0;
|
||||||
|
rst_sync_adc <= 1'b0;
|
||||||
|
rst_sync_adc_d <= 1'b0;
|
||||||
|
|
||||||
|
adc_start <= 1'b0;
|
||||||
|
adc_rst <= 1'b0;
|
||||||
|
end else begin
|
||||||
|
start_meta_adc <= start_toggle_eth;
|
||||||
|
start_sync_adc <= start_meta_adc;
|
||||||
|
start_sync_adc_d <= start_sync_adc;
|
||||||
|
|
||||||
|
rst_meta_adc <= rst_toggle_eth;
|
||||||
|
rst_sync_adc <= rst_meta_adc;
|
||||||
|
rst_sync_adc_d <= rst_sync_adc;
|
||||||
|
|
||||||
|
adc_start <= adc_start_pulse;
|
||||||
|
adc_rst <= adc_rst_pulse;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// ETH -> DAC config CDC
|
||||||
|
// cfg_bus_eth is kept stable in ETH domain until DAC and ADC both ACK.
|
||||||
|
(* ASYNC_REG = "TRUE" *) logic cfg_req_meta_dac, cfg_req_sync_dac;
|
||||||
|
logic cfg_req_sync_dac_d;
|
||||||
|
wire cfg_req_pulse_dac = cfg_req_sync_dac ^ cfg_req_sync_dac_d;
|
||||||
|
|
||||||
|
always_ff @(posedge dac_clk_in or posedge dac_rst_int) begin
|
||||||
|
if (dac_rst_int) begin
|
||||||
|
cfg_req_meta_dac <= 1'b0;
|
||||||
|
cfg_req_sync_dac <= 1'b0;
|
||||||
|
cfg_req_sync_dac_d<= 1'b0;
|
||||||
|
cfg_ack_toggle_dac<= 1'b0;
|
||||||
|
|
||||||
|
dac_pulse_width <= '0;
|
||||||
|
dac_pulse_period <= '0;
|
||||||
|
dac_pulse_num <= '0;
|
||||||
|
dac_pulse_height <= '0;
|
||||||
|
end else begin
|
||||||
|
cfg_req_meta_dac <= cfg_req_toggle_dac_eth;
|
||||||
|
cfg_req_sync_dac <= cfg_req_meta_dac;
|
||||||
|
cfg_req_sync_dac_d <= cfg_req_sync_dac;
|
||||||
|
|
||||||
|
if (cfg_req_pulse_dac) begin
|
||||||
|
dac_pulse_width <= cfg_bus_eth[31:0];
|
||||||
|
dac_pulse_period <= cfg_bus_eth[63:32];
|
||||||
|
dac_pulse_num <= cfg_bus_eth[79:64];
|
||||||
|
dac_pulse_height <= cfg_bus_eth[80 +: DAC_DATA_WIDTH];
|
||||||
|
|
||||||
|
cfg_ack_toggle_dac <= ~cfg_ack_toggle_dac;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
// ETH -> ADC config CDC
|
||||||
|
logic cfg_req_meta_adc, cfg_req_sync_adc, cfg_req_sync_adc_d;
|
||||||
|
wire cfg_req_pulse_adc = cfg_req_sync_adc ^ cfg_req_sync_adc_d;
|
||||||
|
|
||||||
|
always_ff @(posedge adc_clk_in or posedge adc_rst_int) begin
|
||||||
|
if (adc_rst_int) begin
|
||||||
|
cfg_req_meta_adc <= 1'b0;
|
||||||
|
cfg_req_sync_adc <= 1'b0;
|
||||||
|
cfg_req_sync_adc_d <= 1'b0;
|
||||||
|
cfg_ack_toggle_adc <= 1'b0;
|
||||||
|
|
||||||
|
adc_pulse_period <= '0;
|
||||||
|
adc_pulse_num <= '0;
|
||||||
|
end else begin
|
||||||
|
cfg_req_meta_adc <= cfg_req_toggle_adc_eth;
|
||||||
|
cfg_req_sync_adc <= cfg_req_meta_adc;
|
||||||
|
cfg_req_sync_adc_d <= cfg_req_sync_adc;
|
||||||
|
|
||||||
|
if (cfg_req_pulse_adc) begin
|
||||||
|
adc_pulse_period <= cfg_bus_eth[127:96];
|
||||||
|
adc_pulse_num <= cfg_bus_eth[79:64];
|
||||||
|
|
||||||
|
cfg_ack_toggle_adc <= ~cfg_ack_toggle_adc;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
52
rtl/controller/tests/Makefile
Normal file
52
rtl/controller/tests/Makefile
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
#
|
||||||
|
# Copyright (c) 2025 FPGA Ninja, LLC
|
||||||
|
#
|
||||||
|
# Authors:
|
||||||
|
# - Alex Forencich
|
||||||
|
#
|
||||||
|
|
||||||
|
# FPGA settings
|
||||||
|
FPGA_PART = xc7a35tfgg484-1
|
||||||
|
FPGA_TOP = control
|
||||||
|
FPGA_ARCH = artix7
|
||||||
|
|
||||||
|
RTL_DIR = ../src
|
||||||
|
|
||||||
|
|
||||||
|
include ../../../scripts/vivado.mk
|
||||||
|
|
||||||
|
SYN_FILES += $(sort $(shell find ../src -type f \( -name '*.v' -o -name '*.sv' \)))
|
||||||
|
|
||||||
|
XCI_FILES = $(sort $(shell find ../src -type f -name '*.xci'))
|
||||||
|
|
||||||
|
XDC_FILES += ../../../constraints/ax7a035b.xdc
|
||||||
|
XDC_FILES += test_timing.xdc
|
||||||
|
|
||||||
|
SYN_FILES += controller_tb.sv
|
||||||
|
SIM_TOP = control_tb
|
||||||
|
|
||||||
|
|
||||||
|
program: $(PROJECT).bit
|
||||||
|
echo "open_hw_manager" > program.tcl
|
||||||
|
echo "connect_hw_server" >> program.tcl
|
||||||
|
echo "open_hw_target" >> program.tcl
|
||||||
|
echo "current_hw_device [lindex [get_hw_devices] 0]" >> program.tcl
|
||||||
|
echo "refresh_hw_device -update_hw_probes false [current_hw_device]" >> program.tcl
|
||||||
|
echo "set_property PROGRAM.FILE {$(PROJECT).bit} [current_hw_device]" >> program.tcl
|
||||||
|
echo "program_hw_devices [current_hw_device]" >> program.tcl
|
||||||
|
echo "exit" >> program.tcl
|
||||||
|
vivado -nojournal -nolog -mode batch -source program.tcl
|
||||||
|
|
||||||
|
$(PROJECT).mcs $(PROJECT).prm: $(PROJECT).bit
|
||||||
|
echo "write_cfgmem -force -format mcs -size 16 -interface SPIx4 -loadbit {up 0x0000000 $*.bit} -checksum -file $*.mcs" > generate_mcs.tcl
|
||||||
|
echo "exit" >> generate_mcs.tcl
|
||||||
|
vivado -nojournal -nolog -mode batch -source generate_mcs.tcl
|
||||||
|
mkdir -p rev
|
||||||
|
COUNT=100; \
|
||||||
|
while [ -e rev/$*_rev$$COUNT.bit ]; \
|
||||||
|
do COUNT=$$((COUNT+1)); done; \
|
||||||
|
COUNT=$$((COUNT-1)); \
|
||||||
|
for x in .mcs .prm; \
|
||||||
|
do cp $*$$x rev/$*_rev$$COUNT$$x; \
|
||||||
|
echo "Output: rev/$*_rev$$COUNT$$x"; done;
|
||||||
385
rtl/controller/tests/controller_tb.sv
Normal file
385
rtl/controller/tests/controller_tb.sv
Normal file
@ -0,0 +1,385 @@
|
|||||||
|
`timescale 1ns/1ps
|
||||||
|
|
||||||
|
module tb_control;
|
||||||
|
|
||||||
|
localparam int unsigned DAC_DATA_WIDTH = 12;
|
||||||
|
|
||||||
|
|
||||||
|
// Clocks / reset
|
||||||
|
logic eth_clk_in;
|
||||||
|
logic dac_clk_in;
|
||||||
|
logic adc_clk_in;
|
||||||
|
logic rst_n;
|
||||||
|
|
||||||
|
// axi stream (input)
|
||||||
|
logic [7:0] s_axis_tdata;
|
||||||
|
logic s_axis_tvalid;
|
||||||
|
logic s_axis_tready;
|
||||||
|
logic s_axis_tlast;
|
||||||
|
|
||||||
|
// ADC side input
|
||||||
|
logic finish;
|
||||||
|
|
||||||
|
// DUT outputs
|
||||||
|
logic [31:0] dac_pulse_width;
|
||||||
|
logic [31:0] dac_pulse_period;
|
||||||
|
logic [DAC_DATA_WIDTH-1:0] dac_pulse_height;
|
||||||
|
logic [15:0] dac_pulse_num;
|
||||||
|
|
||||||
|
logic [31:0] adc_pulse_period;
|
||||||
|
logic [15:0] adc_pulse_num;
|
||||||
|
|
||||||
|
logic dac_start;
|
||||||
|
logic adc_start;
|
||||||
|
logic dac_rst;
|
||||||
|
logic adc_rst;
|
||||||
|
|
||||||
|
|
||||||
|
// DUT
|
||||||
|
control #(
|
||||||
|
.DAC_DATA_WIDTH(DAC_DATA_WIDTH)
|
||||||
|
) dut (
|
||||||
|
.eth_clk_in (eth_clk_in),
|
||||||
|
.dac_clk_in (dac_clk_in),
|
||||||
|
.adc_clk_in (adc_clk_in),
|
||||||
|
.rst_n (rst_n),
|
||||||
|
|
||||||
|
.s_axis_tdata (s_axis_tdata),
|
||||||
|
.s_axis_tvalid (s_axis_tvalid),
|
||||||
|
.s_axis_tready (s_axis_tready),
|
||||||
|
.s_axis_tlast (s_axis_tlast),
|
||||||
|
|
||||||
|
.finish (finish),
|
||||||
|
|
||||||
|
.dac_pulse_width (dac_pulse_width),
|
||||||
|
.dac_pulse_period (dac_pulse_period),
|
||||||
|
.dac_pulse_height (dac_pulse_height),
|
||||||
|
.dac_pulse_num (dac_pulse_num),
|
||||||
|
|
||||||
|
.adc_pulse_period (adc_pulse_period),
|
||||||
|
.adc_pulse_num (adc_pulse_num),
|
||||||
|
|
||||||
|
.dac_start (dac_start),
|
||||||
|
.adc_start (adc_start),
|
||||||
|
.dac_rst (dac_rst),
|
||||||
|
.adc_rst (adc_rst)
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Clock generation
|
||||||
|
initial begin
|
||||||
|
eth_clk_in = 1'b0;
|
||||||
|
forever #(1 * 4.000) eth_clk_in = ~eth_clk_in; // 125 MHz
|
||||||
|
end
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
dac_clk_in = 1'b0;
|
||||||
|
forever #(1 * 3.846153846) dac_clk_in = ~dac_clk_in; // ~130 MHz
|
||||||
|
end
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
adc_clk_in = 1'b0;
|
||||||
|
forever #(1 * 7.692307692) adc_clk_in = ~adc_clk_in; // ~65 MHz
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
// pulse counters and monitors for testing
|
||||||
|
int dac_rst_count;
|
||||||
|
int adc_rst_count;
|
||||||
|
int dac_start_count;
|
||||||
|
int adc_start_count;
|
||||||
|
|
||||||
|
always_ff @(posedge dac_clk_in) begin
|
||||||
|
if (!rst_n) begin
|
||||||
|
dac_rst_count <= 0;
|
||||||
|
dac_start_count <= 0;
|
||||||
|
end else begin
|
||||||
|
if (dac_rst) dac_rst_count <= dac_rst_count + 1;
|
||||||
|
if (dac_start) dac_start_count <= dac_start_count + 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
always_ff @(posedge adc_clk_in) begin
|
||||||
|
if (!rst_n) begin
|
||||||
|
adc_rst_count <= 0;
|
||||||
|
adc_start_count <= 0;
|
||||||
|
end else begin
|
||||||
|
if (adc_rst) adc_rst_count <= adc_rst_count + 1;
|
||||||
|
if (adc_start) adc_start_count <= adc_start_count + 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
// some helpers for axi
|
||||||
|
task automatic axis_send_byte(input logic [7:0] data, input logic last);
|
||||||
|
begin
|
||||||
|
@(negedge eth_clk_in);
|
||||||
|
s_axis_tdata <= data;
|
||||||
|
s_axis_tvalid <= 1'b1;
|
||||||
|
s_axis_tlast <= last;
|
||||||
|
|
||||||
|
@(posedge eth_clk_in);
|
||||||
|
while (!s_axis_tready) begin
|
||||||
|
@(posedge eth_clk_in);
|
||||||
|
end
|
||||||
|
|
||||||
|
s_axis_tvalid <= 1'b0;
|
||||||
|
s_axis_tlast <= 1'b0;
|
||||||
|
s_axis_tdata <= '0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic send_cmd(input logic [7:0] cmd);
|
||||||
|
begin
|
||||||
|
axis_send_byte(cmd, 1'b1);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic send_set_data(
|
||||||
|
input logic [31:0] pulse_width,
|
||||||
|
input logic [31:0] pulse_period,
|
||||||
|
input logic [15:0] pulse_num,
|
||||||
|
input logic [15:0] pulse_height_raw,
|
||||||
|
input logic [31:0] pulse_period_adc
|
||||||
|
);
|
||||||
|
logic [127:0] payload;
|
||||||
|
int i;
|
||||||
|
begin
|
||||||
|
// little-endian payload layout:
|
||||||
|
// [31:0] pulse_width
|
||||||
|
// [63:32] pulse_period
|
||||||
|
// [79:64] pulse_num
|
||||||
|
// [95:80] pulse_height_raw
|
||||||
|
// [127:96] pulse_period_ADC
|
||||||
|
|
||||||
|
payload = {pulse_period_adc, pulse_height_raw, pulse_num, pulse_period, pulse_width};
|
||||||
|
|
||||||
|
axis_send_byte(8'h88, 1'b0); // CMD_SET_DATA
|
||||||
|
|
||||||
|
for (i = 0; i < 16; i++) begin
|
||||||
|
axis_send_byte(payload[i*8 +: 8], (i == 15));
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic pulse_finish;
|
||||||
|
begin
|
||||||
|
@(posedge adc_clk_in);
|
||||||
|
finish <= 1'b1;
|
||||||
|
@(posedge adc_clk_in);
|
||||||
|
finish <= 1'b0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
|
||||||
|
// waiters
|
||||||
|
task automatic wait_dac_rst_count(input int expected, input int max_cycles = 100);
|
||||||
|
int i;
|
||||||
|
begin
|
||||||
|
for (i = 0; i < max_cycles; i++) begin
|
||||||
|
@(posedge dac_clk_in);
|
||||||
|
if (dac_rst_count >= expected) return;
|
||||||
|
end
|
||||||
|
$fatal(1, "Timeout waiting for dac_rst_count >= %0d, current=%0d", expected, dac_rst_count);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic wait_adc_rst_count(input int expected, input int max_cycles = 100);
|
||||||
|
int i;
|
||||||
|
begin
|
||||||
|
for (i = 0; i < max_cycles; i++) begin
|
||||||
|
@(posedge adc_clk_in);
|
||||||
|
if (adc_rst_count >= expected) return;
|
||||||
|
end
|
||||||
|
$fatal(1, "Timeout waiting for adc_rst_count >= %0d, current=%0d", expected, adc_rst_count);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic wait_dac_start_count(input int expected, input int max_cycles = 100);
|
||||||
|
int i;
|
||||||
|
begin
|
||||||
|
for (i = 0; i < max_cycles; i++) begin
|
||||||
|
@(posedge dac_clk_in);
|
||||||
|
if (dac_start_count >= expected) return;
|
||||||
|
end
|
||||||
|
$fatal(1, "Timeout waiting for dac_start_count >= %0d, current=%0d", expected, dac_start_count);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic wait_adc_start_count(input int expected, input int max_cycles = 100);
|
||||||
|
int i;
|
||||||
|
begin
|
||||||
|
for (i = 0; i < max_cycles; i++) begin
|
||||||
|
@(posedge adc_clk_in);
|
||||||
|
if (adc_start_count >= expected) return;
|
||||||
|
end
|
||||||
|
$fatal(1, "Timeout waiting for adc_start_count >= %0d, current=%0d", expected, adc_start_count);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic wait_cfg_applied(
|
||||||
|
input logic [31:0] exp_pulse_width,
|
||||||
|
input logic [31:0] exp_pulse_period,
|
||||||
|
input logic [15:0] exp_pulse_num,
|
||||||
|
input logic [15:0] exp_pulse_height_raw,
|
||||||
|
input logic [31:0] exp_pulse_period_adc,
|
||||||
|
input int max_cycles = 200
|
||||||
|
);
|
||||||
|
logic [DAC_DATA_WIDTH-1:0] exp_dac_height;
|
||||||
|
int i;
|
||||||
|
begin
|
||||||
|
exp_dac_height = exp_pulse_height_raw[DAC_DATA_WIDTH-1:0];
|
||||||
|
|
||||||
|
for (i = 0; i < max_cycles; i++) begin
|
||||||
|
@(posedge eth_clk_in);
|
||||||
|
if ((dac_pulse_width === exp_pulse_width ) &&
|
||||||
|
(dac_pulse_period === exp_pulse_period) &&
|
||||||
|
(dac_pulse_num === exp_pulse_num ) &&
|
||||||
|
(dac_pulse_height === exp_dac_height ) &&
|
||||||
|
(adc_pulse_period === exp_pulse_period_adc) &&
|
||||||
|
(adc_pulse_num === exp_pulse_num )) begin
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
$fatal(1,
|
||||||
|
"Timeout waiting config outputs. Got: dac_width=%h dac_period=%h dac_num=%h dac_height=%h adc_period=%h adc_num=%h",
|
||||||
|
dac_pulse_width, dac_pulse_period, dac_pulse_num, dac_pulse_height,
|
||||||
|
adc_pulse_period, adc_pulse_num
|
||||||
|
);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
|
||||||
|
// Test sequence
|
||||||
|
logic [31:0] test_pulse_width;
|
||||||
|
logic [31:0] test_pulse_period;
|
||||||
|
logic [15:0] test_pulse_num;
|
||||||
|
logic [15:0] test_pulse_height_raw;
|
||||||
|
logic [31:0] test_pulse_period_adc;
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
// defaults
|
||||||
|
rst_n = 1'b0;
|
||||||
|
s_axis_tdata = '0;
|
||||||
|
s_axis_tvalid = 1'b0;
|
||||||
|
s_axis_tlast = 1'b0;
|
||||||
|
finish = 1'b0;
|
||||||
|
|
||||||
|
test_pulse_width = 32'h11223344;
|
||||||
|
test_pulse_period = 32'h55667788;
|
||||||
|
test_pulse_num = 16'hA1B2;
|
||||||
|
test_pulse_height_raw = 16'h0CDE; // for DAC_DATA_WIDTH=12 => 12'hCDE
|
||||||
|
test_pulse_period_adc = 32'h50607080;
|
||||||
|
|
||||||
|
repeat (10) @(posedge eth_clk_in);
|
||||||
|
rst_n = 1'b1;
|
||||||
|
|
||||||
|
repeat (10) @(posedge eth_clk_in);
|
||||||
|
|
||||||
|
$display("[%0t] TEST 1: soft_reset", $time);
|
||||||
|
send_cmd(8'h0F);
|
||||||
|
|
||||||
|
wait_dac_rst_count(1);
|
||||||
|
wait_adc_rst_count(1);
|
||||||
|
|
||||||
|
if (dac_rst_count != 1) begin
|
||||||
|
$fatal(1, "Expected exactly one dac_rst pulse after first soft_reset, got %0d", dac_rst_count);
|
||||||
|
end
|
||||||
|
if (adc_rst_count != 1) begin
|
||||||
|
$fatal(1, "Expected exactly one adc_rst pulse after first soft_reset, got %0d", adc_rst_count);
|
||||||
|
end
|
||||||
|
|
||||||
|
$display("[%0t] TEST 1 passed", $time);
|
||||||
|
|
||||||
|
$display("[%0t] TEST 2: set_data", $time);
|
||||||
|
send_set_data(
|
||||||
|
test_pulse_width,
|
||||||
|
test_pulse_period,
|
||||||
|
test_pulse_num,
|
||||||
|
test_pulse_height_raw,
|
||||||
|
test_pulse_period_adc
|
||||||
|
);
|
||||||
|
|
||||||
|
wait_cfg_applied(
|
||||||
|
test_pulse_width,
|
||||||
|
test_pulse_period,
|
||||||
|
test_pulse_num,
|
||||||
|
test_pulse_height_raw,
|
||||||
|
test_pulse_period_adc
|
||||||
|
);
|
||||||
|
|
||||||
|
if (dac_pulse_width !== 32'h11223344) begin
|
||||||
|
$fatal(1, "dac_pulse_width mismatch: got %h expected %h", dac_pulse_width, 32'h11223344);
|
||||||
|
end
|
||||||
|
if (dac_pulse_period !== 32'h55667788) begin
|
||||||
|
$fatal(1, "dac_pulse_period mismatch: got %h expected %h", dac_pulse_period, 32'h55667788);
|
||||||
|
end
|
||||||
|
if (dac_pulse_num !== 16'hA1B2) begin
|
||||||
|
$fatal(1, "dac_pulse_num mismatch: got %h expected %h", dac_pulse_num, 16'hA1B2);
|
||||||
|
end
|
||||||
|
if (dac_pulse_height !== 12'hCDE) begin
|
||||||
|
$fatal(1, "dac_pulse_height mismatch: got %h expected %h", dac_pulse_height, 12'hCDE);
|
||||||
|
end
|
||||||
|
if (adc_pulse_period !== 32'h50607080) begin
|
||||||
|
$fatal(1, "adc_pulse_period mismatch: got %h expected %h", adc_pulse_period, 32'h50607080);
|
||||||
|
end
|
||||||
|
if (adc_pulse_num !== 16'hA1B2) begin
|
||||||
|
$fatal(1, "adc_pulse_num mismatch: got %h expected %h", adc_pulse_num, 16'hA1B2);
|
||||||
|
end
|
||||||
|
|
||||||
|
$display("[%0t] TEST 2 passed", $time);
|
||||||
|
|
||||||
|
repeat (20) @(posedge eth_clk_in);
|
||||||
|
|
||||||
|
$display("[%0t] TEST 3: start", $time);
|
||||||
|
send_cmd(8'hF0);
|
||||||
|
|
||||||
|
wait_dac_start_count(1);
|
||||||
|
wait_adc_start_count(1);
|
||||||
|
|
||||||
|
if (dac_start_count != 1) begin
|
||||||
|
$fatal(1, "Expected exactly one dac_start pulse after first start, got %0d", dac_start_count);
|
||||||
|
end
|
||||||
|
if (adc_start_count != 1) begin
|
||||||
|
$fatal(1, "Expected exactly one adc_start pulse after first start, got %0d", adc_start_count);
|
||||||
|
end
|
||||||
|
|
||||||
|
$display("[%0t] TEST 3 start pulses passed", $time);
|
||||||
|
|
||||||
|
// release busy by finish pulse from ADC domain
|
||||||
|
$display("[%0t] Sending finish pulse", $time);
|
||||||
|
pulse_finish();
|
||||||
|
|
||||||
|
// a bit of wait for finish CDC back to ETH
|
||||||
|
repeat (20) @(posedge eth_clk_in);
|
||||||
|
|
||||||
|
// sanity check that commands are accepted again after finish
|
||||||
|
$display("[%0t] TEST 4: soft_reset after finish", $time);
|
||||||
|
send_cmd(8'h0F);
|
||||||
|
|
||||||
|
wait_dac_rst_count(2);
|
||||||
|
wait_adc_rst_count(2);
|
||||||
|
|
||||||
|
if (dac_rst_count != 2) begin
|
||||||
|
$fatal(1, "Expected exactly two dac_rst pulses total, got %0d", dac_rst_count);
|
||||||
|
end
|
||||||
|
if (adc_rst_count != 2) begin
|
||||||
|
$fatal(1, "Expected exactly two adc_rst pulses total, got %0d", adc_rst_count);
|
||||||
|
end
|
||||||
|
|
||||||
|
$display("[%0t] TEST 4 passed", $time);
|
||||||
|
|
||||||
|
$display("==============================================");
|
||||||
|
$display("ALL BASIC TESTS PASSED");
|
||||||
|
$display("dac_rst_count = %0d", dac_rst_count);
|
||||||
|
$display("adc_rst_count = %0d", adc_rst_count);
|
||||||
|
$display("dac_start_count = %0d", dac_start_count);
|
||||||
|
$display("adc_start_count = %0d", adc_start_count);
|
||||||
|
$display("==============================================");
|
||||||
|
|
||||||
|
#100;
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
197
rtl/controller/tests/tb_control_behav.wcfg
Normal file
197
rtl/controller/tests/tb_control_behav.wcfg
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<wave_config>
|
||||||
|
<wave_state>
|
||||||
|
</wave_state>
|
||||||
|
<db_ref_list>
|
||||||
|
<db_ref path="tb_control_behav.wdb" id="1">
|
||||||
|
<top_modules>
|
||||||
|
<top_module name="glbl" />
|
||||||
|
<top_module name="tb_control" />
|
||||||
|
</top_modules>
|
||||||
|
</db_ref>
|
||||||
|
</db_ref_list>
|
||||||
|
<zoom_setting>
|
||||||
|
<ZoomStartTime time="0.676 ns"></ZoomStartTime>
|
||||||
|
<ZoomEndTime time="645.677 ns"></ZoomEndTime>
|
||||||
|
<Cursor1Time time="349.676 ns"></Cursor1Time>
|
||||||
|
</zoom_setting>
|
||||||
|
<column_width_setting>
|
||||||
|
<NameColumnWidth column_width="558"></NameColumnWidth>
|
||||||
|
<ValueColumnWidth column_width="61"></ValueColumnWidth>
|
||||||
|
</column_width_setting>
|
||||||
|
<WVObjectSize size="23" />
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/eth_clk_in">
|
||||||
|
<obj_property name="ElementShortName">eth_clk_in</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">eth_clk_in</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#008080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/dac_clk_in">
|
||||||
|
<obj_property name="ElementShortName">dac_clk_in</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">dac_clk_in</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/adc_clk_in">
|
||||||
|
<obj_property name="ElementShortName">adc_clk_in</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">adc_clk_in</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/rst_n">
|
||||||
|
<obj_property name="ElementShortName">rst_n</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">rst_n</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#800080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/s_axis_tdata">
|
||||||
|
<obj_property name="ElementShortName">s_axis_tdata[7:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">s_axis_tdata[7:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#008080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
<obj_property name="Radix">BINARYRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/s_axis_tvalid">
|
||||||
|
<obj_property name="ElementShortName">s_axis_tvalid</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">s_axis_tvalid</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#008080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/s_axis_tready">
|
||||||
|
<obj_property name="ElementShortName">s_axis_tready</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">s_axis_tready</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#008080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/s_axis_tlast">
|
||||||
|
<obj_property name="ElementShortName">s_axis_tlast</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">s_axis_tlast</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#008080</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/finish">
|
||||||
|
<obj_property name="ElementShortName">finish</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">finish</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FAAFBE</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/dac_pulse_width">
|
||||||
|
<obj_property name="ElementShortName">dac_pulse_width[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">dac_pulse_width[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/dac_pulse_period">
|
||||||
|
<obj_property name="ElementShortName">dac_pulse_period[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">dac_pulse_period[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/dac_pulse_height">
|
||||||
|
<obj_property name="ElementShortName">dac_pulse_height[11:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">dac_pulse_height[11:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
<obj_property name="Radix">HEXRADIX</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/dac_pulse_num">
|
||||||
|
<obj_property name="ElementShortName">dac_pulse_num[15:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">dac_pulse_num[15:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/adc_pulse_period">
|
||||||
|
<obj_property name="ElementShortName">adc_pulse_period[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">adc_pulse_period[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/adc_pulse_num">
|
||||||
|
<obj_property name="ElementShortName">adc_pulse_num[15:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">adc_pulse_num[15:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/dac_start">
|
||||||
|
<obj_property name="ElementShortName">dac_start</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">dac_start</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/adc_start">
|
||||||
|
<obj_property name="ElementShortName">adc_start</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">adc_start</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/dac_rst">
|
||||||
|
<obj_property name="ElementShortName">dac_rst</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">dac_rst</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#FFA500</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/adc_rst">
|
||||||
|
<obj_property name="ElementShortName">adc_rst</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">adc_rst</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="group" fp_name="group499">
|
||||||
|
<obj_property name="label">tb signals</obj_property>
|
||||||
|
<obj_property name="DisplayName">label</obj_property>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/dac_rst_count">
|
||||||
|
<obj_property name="ElementShortName">dac_rst_count[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">dac_rst_count[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/adc_rst_count">
|
||||||
|
<obj_property name="ElementShortName">adc_rst_count[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">adc_rst_count[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/dac_start_count">
|
||||||
|
<obj_property name="ElementShortName">dac_start_count[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">dac_start_count[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/adc_start_count">
|
||||||
|
<obj_property name="ElementShortName">adc_start_count[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">adc_start_count[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/test_pulse_width">
|
||||||
|
<obj_property name="ElementShortName">test_pulse_width[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">test_pulse_width[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/test_pulse_period">
|
||||||
|
<obj_property name="ElementShortName">test_pulse_period[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">test_pulse_period[31:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/test_pulse_num">
|
||||||
|
<obj_property name="ElementShortName">test_pulse_num[15:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">test_pulse_num[15:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/test_pulse_height_raw">
|
||||||
|
<obj_property name="ElementShortName">test_pulse_height_raw[15:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">test_pulse_height_raw[15:0]</obj_property>
|
||||||
|
<obj_property name="CustomSignalColor">#F0E68C</obj_property>
|
||||||
|
<obj_property name="UseCustomSignalColor">true</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="array" fp_name="/tb_control/DAC_DATA_WIDTH">
|
||||||
|
<obj_property name="ElementShortName">DAC_DATA_WIDTH[31:0]</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">DAC_DATA_WIDTH[31:0]</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/dut/cfg_ack_toggle_adc">
|
||||||
|
<obj_property name="ElementShortName">cfg_ack_toggle_adc</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">cfg_ack_toggle_adc</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
<wvobject type="logic" fp_name="/tb_control/dut/cfg_ack_toggle_dac">
|
||||||
|
<obj_property name="ElementShortName">cfg_ack_toggle_dac</obj_property>
|
||||||
|
<obj_property name="ObjectShortName">cfg_ack_toggle_dac</obj_property>
|
||||||
|
</wvobject>
|
||||||
|
</wave_config>
|
||||||
13
rtl/controller/tests/test_timing.xdc
Normal file
13
rtl/controller/tests/test_timing.xdc
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Primary clocks
|
||||||
|
create_clock -name eth_clk -period 8.000 [get_ports eth_clk_in]
|
||||||
|
create_clock -name dac_clk -period 7.692 [get_ports dac_clk_in]
|
||||||
|
create_clock -name adc_clk -period 15.385 [get_ports adc_clk_in]
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous clock groups
|
||||||
|
# eth, dac, adc are independent domains
|
||||||
|
|
||||||
|
set_clock_groups -name ASYNC_ETH_DAC_ADC -asynchronous \
|
||||||
|
-group [get_clocks eth_clk] \
|
||||||
|
-group [get_clocks dac_clk] \
|
||||||
|
-group [get_clocks adc_clk]
|
||||||
@ -283,6 +283,8 @@ module axis_mac
|
|||||||
reg [31:0] arp_delay;
|
reg [31:0] arp_delay;
|
||||||
reg arp_cached;
|
reg arp_cached;
|
||||||
|
|
||||||
|
reg write_en_flag;
|
||||||
|
|
||||||
always @(posedge gmii_tx_clk or negedge rst_n) begin
|
always @(posedge gmii_tx_clk or negedge rst_n) begin
|
||||||
if (!rst_n) begin
|
if (!rst_n) begin
|
||||||
tx_state <= TX_IDLE;
|
tx_state <= TX_IDLE;
|
||||||
@ -293,8 +295,8 @@ module axis_mac
|
|||||||
udp_send_data_length <= 16'd0;
|
udp_send_data_length <= 16'd0;
|
||||||
udp_tx_req <= 1'b0;
|
udp_tx_req <= 1'b0;
|
||||||
arp_delay <= 32'b0;
|
arp_delay <= 32'b0;
|
||||||
|
write_en_flag <= 1'b0;
|
||||||
|
|
||||||
s_axis_tx_tready <= 1'b0;
|
|
||||||
req_ready <= 1'b0;
|
req_ready <= 1'b0;
|
||||||
|
|
||||||
tx_req_len <= 16'd0;
|
tx_req_len <= 16'd0;
|
||||||
@ -309,8 +311,8 @@ module axis_mac
|
|||||||
case (tx_state)
|
case (tx_state)
|
||||||
// Ready to accept a new packet request
|
// Ready to accept a new packet request
|
||||||
TX_IDLE: begin
|
TX_IDLE: begin
|
||||||
|
write_en_flag <= 1'b0;
|
||||||
udp_tx_req <= 1'b0;
|
udp_tx_req <= 1'b0;
|
||||||
s_axis_tx_tready <= 1'b0;
|
|
||||||
tx_bytes_written <= 16'd0;
|
tx_bytes_written <= 16'd0;
|
||||||
tx_req_inflight <= 1'b0;
|
tx_req_inflight <= 1'b0;
|
||||||
|
|
||||||
@ -340,7 +342,6 @@ module axis_mac
|
|||||||
// Pulse ARP request
|
// Pulse ARP request
|
||||||
TX_ARP_REQ: begin
|
TX_ARP_REQ: begin
|
||||||
req_ready <= 1'b0;
|
req_ready <= 1'b0;
|
||||||
s_axis_tx_tready <= 1'b0;
|
|
||||||
udp_tx_req <= 1'b0;
|
udp_tx_req <= 1'b0;
|
||||||
|
|
||||||
arp_delay <= 32'ha000000;
|
arp_delay <= 32'ha000000;
|
||||||
@ -350,7 +351,6 @@ module axis_mac
|
|||||||
// Wait until ARP is resolved
|
// Wait until ARP is resolved
|
||||||
TX_ARP_SEND: begin
|
TX_ARP_SEND: begin
|
||||||
req_ready <= 1'b0;
|
req_ready <= 1'b0;
|
||||||
s_axis_tx_tready <= 1'b0;
|
|
||||||
udp_tx_req <= 1'b0;
|
udp_tx_req <= 1'b0;
|
||||||
|
|
||||||
// sent
|
// sent
|
||||||
@ -383,7 +383,7 @@ module axis_mac
|
|||||||
|
|
||||||
if (udp_ram_data_req) begin
|
if (udp_ram_data_req) begin
|
||||||
udp_tx_req <= 1'b0;
|
udp_tx_req <= 1'b0;
|
||||||
s_axis_tx_tready <= 1'b1;
|
write_en_flag <= 1'b1;
|
||||||
tx_state <= TX_STREAM;
|
tx_state <= TX_STREAM;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -394,7 +394,6 @@ module axis_mac
|
|||||||
udp_tx_req <= 1'b0;
|
udp_tx_req <= 1'b0;
|
||||||
|
|
||||||
// keep ready high while receiving payload bytes
|
// keep ready high while receiving payload bytes
|
||||||
s_axis_tx_tready <= (tx_bytes_written < tx_req_len);
|
|
||||||
|
|
||||||
if (s_axis_tx_tvalid && s_axis_tx_tready) begin
|
if (s_axis_tx_tvalid && s_axis_tx_tready) begin
|
||||||
tx_ram_wr_data <= s_axis_tx_tdata;
|
tx_ram_wr_data <= s_axis_tx_tdata;
|
||||||
@ -403,7 +402,6 @@ module axis_mac
|
|||||||
tx_bytes_written <= tx_bytes_written + 1'b1;
|
tx_bytes_written <= tx_bytes_written + 1'b1;
|
||||||
|
|
||||||
if (tx_bytes_written + 1'b1 >= tx_req_len) begin
|
if (tx_bytes_written + 1'b1 >= tx_req_len) begin
|
||||||
s_axis_tx_tready <= 1'b0;
|
|
||||||
tx_state <= TX_WAIT_DRAIN;
|
tx_state <= TX_WAIT_DRAIN;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -413,7 +411,8 @@ module axis_mac
|
|||||||
// Wait until TX RAM starts draining enough to allow
|
// Wait until TX RAM starts draining enough to allow
|
||||||
// the next request.
|
// the next request.
|
||||||
TX_WAIT_DRAIN: begin
|
TX_WAIT_DRAIN: begin
|
||||||
s_axis_tx_tready <= 1'b0;
|
// s_axis_tx_tready <= 1'b0;
|
||||||
|
write_en_flag <= 1'b0;
|
||||||
udp_tx_req <= 1'b0;
|
udp_tx_req <= 1'b0;
|
||||||
|
|
||||||
if (udp_ram_data_count <= tx_release_threshold)
|
if (udp_ram_data_count <= tx_release_threshold)
|
||||||
@ -425,11 +424,13 @@ module axis_mac
|
|||||||
tx_state <= TX_IDLE;
|
tx_state <= TX_IDLE;
|
||||||
tx_ram_wr_en <= 1'b0;
|
tx_ram_wr_en <= 1'b0;
|
||||||
udp_tx_req <= 1'b0;
|
udp_tx_req <= 1'b0;
|
||||||
s_axis_tx_tready <= 1'b0;
|
|
||||||
req_ready <= 1'b0;
|
req_ready <= 1'b0;
|
||||||
|
write_en_flag <= 1'b0;
|
||||||
end
|
end
|
||||||
endcase
|
endcase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
assign s_axis_tx_tready = write_en_flag || udp_ram_data_req;
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
@ -4,7 +4,7 @@
|
|||||||
//Description :
|
//Description :
|
||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////
|
||||||
`define TEST_SPEED
|
//`define TEST_SPEED
|
||||||
`timescale 1 ns/1 ns
|
`timescale 1 ns/1 ns
|
||||||
module mac_test
|
module mac_test
|
||||||
(
|
(
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# FPGA settings
|
# FPGA settings
|
||||||
FPGA_PART = xc7a35tfgg484-1
|
FPGA_PART = xc7a100tfgg484-2
|
||||||
FPGA_TOP = ethernet_axis_echo
|
FPGA_TOP = ethernet_axis_echo
|
||||||
FPGA_ARCH = artix7
|
FPGA_ARCH = artix7
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ SYN_FILES += $(sort $(shell find ../../src -type f \( -name '*.v' -o -name '*.sv
|
|||||||
XCI_FILES = $(sort $(shell find ../../src -type f -name '*.xci'))
|
XCI_FILES = $(sort $(shell find ../../src -type f -name '*.xci'))
|
||||||
|
|
||||||
XDC_FILES += debug.xdc
|
XDC_FILES += debug.xdc
|
||||||
XDC_FILES += ../../../../constraints/ax7a035b.xdc
|
XDC_FILES += ../../../../constraints/ax7102.xdc
|
||||||
|
|
||||||
SIM_TOP = tb_mac_test
|
SIM_TOP = tb_mac_test
|
||||||
TB_FILES = test_axis_mac_rx.sv
|
TB_FILES = test_axis_mac_rx.sv
|
||||||
|
|||||||
@ -1,5 +1,36 @@
|
|||||||
# debug ila
|
# debug ila
|
||||||
|
|
||||||
|
connect_debug_port u_ila_0/clk [get_nets [list rgmii_rxc_IBUF_BUFG]]
|
||||||
|
connect_debug_port u_ila_0/probe9 [get_nets [list {axis_mac0/udp_rec_data_length[0]} {axis_mac0/udp_rec_data_length[1]} {axis_mac0/udp_rec_data_length[2]} {axis_mac0/udp_rec_data_length[3]} {axis_mac0/udp_rec_data_length[4]} {axis_mac0/udp_rec_data_length[5]} {axis_mac0/udp_rec_data_length[6]} {axis_mac0/udp_rec_data_length[7]} {axis_mac0/udp_rec_data_length[8]} {axis_mac0/udp_rec_data_length[9]} {axis_mac0/udp_rec_data_length[10]} {axis_mac0/udp_rec_data_length[11]} {axis_mac0/udp_rec_data_length[12]} {axis_mac0/udp_rec_data_length[13]} {axis_mac0/udp_rec_data_length[14]} {axis_mac0/udp_rec_data_length[15]}]]
|
||||||
|
connect_debug_port dbg_hub/clk [get_nets rgmii_rxc_IBUF_BUFG]
|
||||||
|
|
||||||
|
connect_debug_port u_ila_0/probe22 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[0]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[1]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[2]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[3]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[4]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[5]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[6]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[7]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[8]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[9]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[10]}]]
|
||||||
|
connect_debug_port u_ila_0/probe23 [get_nets [list {mac_test0/mac_top0/mac_rx0/mac_rx_datain[0]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[1]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[2]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[3]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[4]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[5]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[6]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[7]}]]
|
||||||
|
connect_debug_port u_ila_0/probe24 [get_nets [list {mac_test0/mac_top0/mac_rx0/ip_total_data_length[0]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[1]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[2]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[3]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[4]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[5]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[6]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[7]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[8]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[9]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[10]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[11]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[12]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[13]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[14]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[15]}]]
|
||||||
|
connect_debug_port u_ila_0/probe25 [get_nets [list {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[0]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[1]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[2]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[3]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[4]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[5]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[6]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[7]}]]
|
||||||
|
connect_debug_port u_ila_0/probe26 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[0]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[1]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[2]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[3]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[4]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[5]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[6]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[7]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[8]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[9]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[10]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[11]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[12]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[13]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[14]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[15]}]]
|
||||||
|
connect_debug_port u_ila_0/probe27 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[0]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[1]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[2]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[3]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[4]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[5]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[6]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[7]}]]
|
||||||
|
connect_debug_port u_ila_0/probe28 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[0]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[1]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[2]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[3]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[4]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[5]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[6]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[7]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[8]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[9]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[10]}]]
|
||||||
|
connect_debug_port u_ila_0/probe29 [get_nets [list {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[0]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[1]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[2]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[3]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[4]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[5]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[6]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[7]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[8]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[9]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[10]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[11]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[12]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[13]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[14]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[15]}]]
|
||||||
|
connect_debug_port u_ila_0/probe30 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp0/ck_state[0]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[1]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[2]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[3]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[4]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[5]}]]
|
||||||
|
connect_debug_port u_ila_0/probe31 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp0/state[0]} {mac_test0/mac_top0/mac_tx0/udp0/state[1]} {mac_test0/mac_top0/mac_tx0/udp0/state[2]} {mac_test0/mac_top0/mac_tx0/udp0/state[3]} {mac_test0/mac_top0/mac_tx0/udp0/state[4]} {mac_test0/mac_top0/mac_tx0/udp0/state[5]}]]
|
||||||
|
connect_debug_port u_ila_0/probe32 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp0/usedw[0]} {mac_test0/mac_top0/mac_tx0/udp0/usedw[1]} {mac_test0/mac_top0/mac_tx0/udp0/usedw[2]} {mac_test0/mac_top0/mac_tx0/udp0/usedw[3]}]]
|
||||||
|
connect_debug_port u_ila_0/probe33 [get_nets [list {mac_test0/mac_top0/mac_tx0/mac_tx_data[0]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[1]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[2]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[3]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[4]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[5]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[6]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[7]}]]
|
||||||
|
connect_debug_port u_ila_0/probe34 [get_nets [list {mac_test0/mac_top0/mac_tx0/ram_wr_data[0]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[1]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[2]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[3]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[4]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[5]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[6]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[7]}]]
|
||||||
|
connect_debug_port u_ila_0/probe35 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[0]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[1]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[2]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[3]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[4]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[5]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[6]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[7]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[8]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[9]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[10]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[11]}]]
|
||||||
|
connect_debug_port u_ila_0/probe36 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp_send_data_length[0]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[1]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[2]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[3]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[4]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[5]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[6]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[7]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[8]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[9]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[10]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[11]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[12]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[13]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[14]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[15]}]]
|
||||||
|
connect_debug_port u_ila_0/probe37 [get_nets [list {mac_test0/state[0]} {mac_test0/state[1]} {mac_test0/state[2]} {mac_test0/state[3]} {mac_test0/state[4]} {mac_test0/state[5]} {mac_test0/state[6]} {mac_test0/state[7]} {mac_test0/state[8]}]]
|
||||||
|
connect_debug_port u_ila_0/probe39 [get_nets [list mac_test0/mac_top0/mac_tx0/almost_full]]
|
||||||
|
connect_debug_port u_ila_0/probe45 [get_nets [list mac_test0/mac_top0/mac_tx0/mac_data_valid]]
|
||||||
|
connect_debug_port u_ila_0/probe47 [get_nets [list mac_test0/mac_top0/mac_tx0/mac_send_end]]
|
||||||
|
connect_debug_port u_ila_0/probe48 [get_nets [list mac_test0/mac_top0/mac_tx0/ram_wr_en]]
|
||||||
|
connect_debug_port u_ila_0/probe50 [get_nets [list mac_test0/mac_top0/mac_rx0/udp0/ram_wr_en]]
|
||||||
|
connect_debug_port u_ila_0/probe59 [get_nets [list mac_test0/mac_top0/mac_tx0/udp_ram_data_req]]
|
||||||
|
connect_debug_port u_ila_0/probe62 [get_nets [list mac_test0/mac_top0/mac_rx0/udp_rec_data_valid]]
|
||||||
|
connect_debug_port u_ila_0/probe64 [get_nets [list mac_test0/mac_top0/mac_tx0/udp_tx_end]]
|
||||||
|
connect_debug_port u_ila_0/probe66 [get_nets [list mac_test0/mac_top0/mac_tx0/udp_tx_req]]
|
||||||
|
connect_debug_port u_ila_0/probe68 [get_nets [list mac_test0/mac_top0/mac_tx0/upper_data_req]]
|
||||||
|
|
||||||
create_debug_core u_ila_0 ila
|
create_debug_core u_ila_0 ila
|
||||||
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
|
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
|
||||||
set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_0]
|
set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_0]
|
||||||
@ -10,251 +41,179 @@ set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_0]
|
|||||||
set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
|
set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
|
||||||
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
|
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/clk]
|
set_property port_width 1 [get_debug_ports u_ila_0/clk]
|
||||||
connect_debug_port u_ila_0/clk [get_nets [list rgmii_rxc_IBUF_BUFG]]
|
connect_debug_port u_ila_0/clk [get_nets [list e_gtxc_OBUF_BUFG]]
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe0]
|
set_property port_width 6 [get_debug_ports u_ila_0/probe0]
|
||||||
connect_debug_port u_ila_0/probe0 [get_nets [list {arbi_inst/rx_buffer_inst/e10_100_rxd[0]} {arbi_inst/rx_buffer_inst/e10_100_rxd[1]} {arbi_inst/rx_buffer_inst/e10_100_rxd[2]} {arbi_inst/rx_buffer_inst/e10_100_rxd[3]} {arbi_inst/rx_buffer_inst/e10_100_rxd[4]} {arbi_inst/rx_buffer_inst/e10_100_rxd[5]} {arbi_inst/rx_buffer_inst/e10_100_rxd[6]} {arbi_inst/rx_buffer_inst/e10_100_rxd[7]}]]
|
connect_debug_port u_ila_0/probe0 [get_nets [list {axis_mac0/mac_top0/mac_tx0/udp0/state[0]} {axis_mac0/mac_top0/mac_tx0/udp0/state[1]} {axis_mac0/mac_top0/mac_tx0/udp0/state[2]} {axis_mac0/mac_top0/mac_tx0/udp0/state[3]} {axis_mac0/mac_top0/mac_tx0/udp0/state[4]} {axis_mac0/mac_top0/mac_tx0/udp0/state[5]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe1]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe1]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe1]
|
set_property port_width 6 [get_debug_ports u_ila_0/probe1]
|
||||||
connect_debug_port u_ila_0/probe1 [get_nets [list {arbi_inst/gmii_rxd[0]} {arbi_inst/gmii_rxd[1]} {arbi_inst/gmii_rxd[2]} {arbi_inst/gmii_rxd[3]} {arbi_inst/gmii_rxd[4]} {arbi_inst/gmii_rxd[5]} {arbi_inst/gmii_rxd[6]} {arbi_inst/gmii_rxd[7]}]]
|
connect_debug_port u_ila_0/probe1 [get_nets [list {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[0]} {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[1]} {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[2]} {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[3]} {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[4]} {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[5]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe2]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe2]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe2]
|
set_property port_width 4 [get_debug_ports u_ila_0/probe2]
|
||||||
connect_debug_port u_ila_0/probe2 [get_nets [list {arbi_inst/gmii_txd[0]} {arbi_inst/gmii_txd[1]} {arbi_inst/gmii_txd[2]} {arbi_inst/gmii_txd[3]} {arbi_inst/gmii_txd[4]} {arbi_inst/gmii_txd[5]} {arbi_inst/gmii_txd[6]} {arbi_inst/gmii_txd[7]}]]
|
connect_debug_port u_ila_0/probe2 [get_nets [list {axis_mac0/mac_top0/mac_tx0/udp0/usedw[0]} {axis_mac0/mac_top0/mac_tx0/udp0/usedw[1]} {axis_mac0/mac_top0/mac_tx0/udp0/usedw[2]} {axis_mac0/mac_top0/mac_tx0/udp0/usedw[3]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe3]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe3]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe3]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe3]
|
||||||
connect_debug_port u_ila_0/probe3 [get_nets [list {arbi_inst/e_txd[0]} {arbi_inst/e_txd[1]} {arbi_inst/e_txd[2]} {arbi_inst/e_txd[3]} {arbi_inst/e_txd[4]} {arbi_inst/e_txd[5]} {arbi_inst/e_txd[6]} {arbi_inst/e_txd[7]}]]
|
connect_debug_port u_ila_0/probe3 [get_nets [list {axis_mac0/s_axis_tx_tdata[0]} {axis_mac0/s_axis_tx_tdata[1]} {axis_mac0/s_axis_tx_tdata[2]} {axis_mac0/s_axis_tx_tdata[3]} {axis_mac0/s_axis_tx_tdata[4]} {axis_mac0/s_axis_tx_tdata[5]} {axis_mac0/s_axis_tx_tdata[6]} {axis_mac0/s_axis_tx_tdata[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe4]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe4]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe4]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe4]
|
||||||
connect_debug_port u_ila_0/probe4 [get_nets [list {arbi_inst/e_rxd[0]} {arbi_inst/e_rxd[1]} {arbi_inst/e_rxd[2]} {arbi_inst/e_rxd[3]} {arbi_inst/e_rxd[4]} {arbi_inst/e_rxd[5]} {arbi_inst/e_rxd[6]} {arbi_inst/e_rxd[7]}]]
|
connect_debug_port u_ila_0/probe4 [get_nets [list {axis_mac0/rx_payload_len[0]} {axis_mac0/rx_payload_len[1]} {axis_mac0/rx_payload_len[2]} {axis_mac0/rx_payload_len[3]} {axis_mac0/rx_payload_len[4]} {axis_mac0/rx_payload_len[5]} {axis_mac0/rx_payload_len[6]} {axis_mac0/rx_payload_len[7]} {axis_mac0/rx_payload_len[8]} {axis_mac0/rx_payload_len[9]} {axis_mac0/rx_payload_len[10]} {axis_mac0/rx_payload_len[11]} {axis_mac0/rx_payload_len[12]} {axis_mac0/rx_payload_len[13]} {axis_mac0/rx_payload_len[14]} {axis_mac0/rx_payload_len[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe5]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe5]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe5]
|
set_property port_width 2 [get_debug_ports u_ila_0/probe5]
|
||||||
connect_debug_port u_ila_0/probe5 [get_nets [list {arbi_inst/tx_buffer_inst/tx_data_cnt[0]} {arbi_inst/tx_buffer_inst/tx_data_cnt[1]} {arbi_inst/tx_buffer_inst/tx_data_cnt[2]} {arbi_inst/tx_buffer_inst/tx_data_cnt[3]} {arbi_inst/tx_buffer_inst/tx_data_cnt[4]} {arbi_inst/tx_buffer_inst/tx_data_cnt[5]} {arbi_inst/tx_buffer_inst/tx_data_cnt[6]} {arbi_inst/tx_buffer_inst/tx_data_cnt[7]} {arbi_inst/tx_buffer_inst/tx_data_cnt[8]} {arbi_inst/tx_buffer_inst/tx_data_cnt[9]} {arbi_inst/tx_buffer_inst/tx_data_cnt[10]} {arbi_inst/tx_buffer_inst/tx_data_cnt[11]} {arbi_inst/tx_buffer_inst/tx_data_cnt[12]} {arbi_inst/tx_buffer_inst/tx_data_cnt[13]} {arbi_inst/tx_buffer_inst/tx_data_cnt[14]} {arbi_inst/tx_buffer_inst/tx_data_cnt[15]}]]
|
connect_debug_port u_ila_0/probe5 [get_nets [list {axis_mac0/rx_state[0]} {axis_mac0/rx_state[1]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe6]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe6]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe6]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe6]
|
||||||
connect_debug_port u_ila_0/probe6 [get_nets [list {arbi_inst/tx_buffer_inst/tx_rdata[0]} {arbi_inst/tx_buffer_inst/tx_rdata[1]} {arbi_inst/tx_buffer_inst/tx_rdata[2]} {arbi_inst/tx_buffer_inst/tx_rdata[3]} {arbi_inst/tx_buffer_inst/tx_rdata[4]} {arbi_inst/tx_buffer_inst/tx_rdata[5]} {arbi_inst/tx_buffer_inst/tx_rdata[6]} {arbi_inst/tx_buffer_inst/tx_rdata[7]}]]
|
connect_debug_port u_ila_0/probe6 [get_nets [list {axis_mac0/m_axis_rx_tdata[0]} {axis_mac0/m_axis_rx_tdata[1]} {axis_mac0/m_axis_rx_tdata[2]} {axis_mac0/m_axis_rx_tdata[3]} {axis_mac0/m_axis_rx_tdata[4]} {axis_mac0/m_axis_rx_tdata[5]} {axis_mac0/m_axis_rx_tdata[6]} {axis_mac0/m_axis_rx_tdata[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe7]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe7]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe7]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe7]
|
||||||
connect_debug_port u_ila_0/probe7 [get_nets [list {arbi_inst/tx_buffer_inst/tx_wdata[0]} {arbi_inst/tx_buffer_inst/tx_wdata[1]} {arbi_inst/tx_buffer_inst/tx_wdata[2]} {arbi_inst/tx_buffer_inst/tx_wdata[3]} {arbi_inst/tx_buffer_inst/tx_wdata[4]} {arbi_inst/tx_buffer_inst/tx_wdata[5]} {arbi_inst/tx_buffer_inst/tx_wdata[6]} {arbi_inst/tx_buffer_inst/tx_wdata[7]}]]
|
connect_debug_port u_ila_0/probe7 [get_nets [list {axis_mac0/rx_index[0]} {axis_mac0/rx_index[1]} {axis_mac0/rx_index[2]} {axis_mac0/rx_index[3]} {axis_mac0/rx_index[4]} {axis_mac0/rx_index[5]} {axis_mac0/rx_index[6]} {axis_mac0/rx_index[7]} {axis_mac0/rx_index[8]} {axis_mac0/rx_index[9]} {axis_mac0/rx_index[10]} {axis_mac0/rx_index[11]} {axis_mac0/rx_index[12]} {axis_mac0/rx_index[13]} {axis_mac0/rx_index[14]} {axis_mac0/rx_index[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe8]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe8]
|
||||||
set_property port_width 6 [get_debug_ports u_ila_0/probe8]
|
set_property port_width 3 [get_debug_ports u_ila_0/probe8]
|
||||||
connect_debug_port u_ila_0/probe8 [get_nets [list {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[0]} {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[1]} {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[2]} {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[3]} {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[4]} {axis_mac0/mac_top0/mac_tx0/udp0/ck_state[5]}]]
|
connect_debug_port u_ila_0/probe8 [get_nets [list {axis_mac0/tx_state[0]} {axis_mac0/tx_state[1]} {axis_mac0/tx_state[2]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe9]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe9]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe9]
|
set_property port_width 2 [get_debug_ports u_ila_0/probe9]
|
||||||
connect_debug_port u_ila_0/probe9 [get_nets [list {axis_mac0/udp_rec_data_length[0]} {axis_mac0/udp_rec_data_length[1]} {axis_mac0/udp_rec_data_length[2]} {axis_mac0/udp_rec_data_length[3]} {axis_mac0/udp_rec_data_length[4]} {axis_mac0/udp_rec_data_length[5]} {axis_mac0/udp_rec_data_length[6]} {axis_mac0/udp_rec_data_length[7]} {axis_mac0/udp_rec_data_length[8]} {axis_mac0/udp_rec_data_length[9]} {axis_mac0/udp_rec_data_length[10]} {axis_mac0/udp_rec_data_length[11]} {axis_mac0/udp_rec_data_length[12]} {axis_mac0/udp_rec_data_length[13]} {axis_mac0/udp_rec_data_length[14]} {axis_mac0/udp_rec_data_length[15]}]]
|
connect_debug_port u_ila_0/probe9 [get_nets [list {test_state[0]} {test_state[1]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe10]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe10]
|
||||||
set_property port_width 3 [get_debug_ports u_ila_0/probe10]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe10]
|
||||||
connect_debug_port u_ila_0/probe10 [get_nets [list {axis_mac0/tx_state[0]} {axis_mac0/tx_state[1]} {axis_mac0/tx_state[2]}]]
|
connect_debug_port u_ila_0/probe10 [get_nets [list {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[0]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[1]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[2]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[3]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[4]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[5]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[6]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[7]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[8]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[9]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[10]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[11]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[12]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[13]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[14]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe11]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe11]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe11]
|
set_property port_width 11 [get_debug_ports u_ila_0/probe11]
|
||||||
connect_debug_port u_ila_0/probe11 [get_nets [list {axis_mac0/s_axis_tx_tdata[0]} {axis_mac0/s_axis_tx_tdata[1]} {axis_mac0/s_axis_tx_tdata[2]} {axis_mac0/s_axis_tx_tdata[3]} {axis_mac0/s_axis_tx_tdata[4]} {axis_mac0/s_axis_tx_tdata[5]} {axis_mac0/s_axis_tx_tdata[6]} {axis_mac0/s_axis_tx_tdata[7]}]]
|
connect_debug_port u_ila_0/probe11 [get_nets [list {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[0]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[1]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[2]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[3]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[4]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[5]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[6]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[7]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[8]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[9]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[10]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe12]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe12]
|
||||||
set_property port_width 2 [get_debug_ports u_ila_0/probe12]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe12]
|
||||||
connect_debug_port u_ila_0/probe12 [get_nets [list {axis_mac0/rx_state[0]} {axis_mac0/rx_state[1]}]]
|
connect_debug_port u_ila_0/probe12 [get_nets [list {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[0]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[1]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[2]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[3]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[4]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[5]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[6]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe13]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe13]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe13]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe13]
|
||||||
connect_debug_port u_ila_0/probe13 [get_nets [list {axis_mac0/rx_payload_len[0]} {axis_mac0/rx_payload_len[1]} {axis_mac0/rx_payload_len[2]} {axis_mac0/rx_payload_len[3]} {axis_mac0/rx_payload_len[4]} {axis_mac0/rx_payload_len[5]} {axis_mac0/rx_payload_len[6]} {axis_mac0/rx_payload_len[7]} {axis_mac0/rx_payload_len[8]} {axis_mac0/rx_payload_len[9]} {axis_mac0/rx_payload_len[10]} {axis_mac0/rx_payload_len[11]} {axis_mac0/rx_payload_len[12]} {axis_mac0/rx_payload_len[13]} {axis_mac0/rx_payload_len[14]} {axis_mac0/rx_payload_len[15]}]]
|
connect_debug_port u_ila_0/probe13 [get_nets [list {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[0]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[1]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[2]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[3]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[4]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[5]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[6]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[7]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[8]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[9]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[10]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[11]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[12]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[13]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[14]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe14]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe14]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe14]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe14]
|
||||||
connect_debug_port u_ila_0/probe14 [get_nets [list {axis_mac0/rx_index[0]} {axis_mac0/rx_index[1]} {axis_mac0/rx_index[2]} {axis_mac0/rx_index[3]} {axis_mac0/rx_index[4]} {axis_mac0/rx_index[5]} {axis_mac0/rx_index[6]} {axis_mac0/rx_index[7]} {axis_mac0/rx_index[8]} {axis_mac0/rx_index[9]} {axis_mac0/rx_index[10]} {axis_mac0/rx_index[11]} {axis_mac0/rx_index[12]} {axis_mac0/rx_index[13]} {axis_mac0/rx_index[14]} {axis_mac0/rx_index[15]}]]
|
connect_debug_port u_ila_0/probe14 [get_nets [list {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[0]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[1]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[2]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[3]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[4]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[5]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[6]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe15]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe15]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe15]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe15]
|
||||||
connect_debug_port u_ila_0/probe15 [get_nets [list {axis_mac0/m_axis_rx_tdata[0]} {axis_mac0/m_axis_rx_tdata[1]} {axis_mac0/m_axis_rx_tdata[2]} {axis_mac0/m_axis_rx_tdata[3]} {axis_mac0/m_axis_rx_tdata[4]} {axis_mac0/m_axis_rx_tdata[5]} {axis_mac0/m_axis_rx_tdata[6]} {axis_mac0/m_axis_rx_tdata[7]}]]
|
connect_debug_port u_ila_0/probe15 [get_nets [list {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[0]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[1]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[2]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[3]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[4]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[5]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[6]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[7]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[8]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[9]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[10]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[11]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[12]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[13]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[14]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe16]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe16]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe16]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe16]
|
||||||
connect_debug_port u_ila_0/probe16 [get_nets [list {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[0]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[1]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[2]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[3]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[4]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[5]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[6]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[7]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[8]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[9]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[10]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[11]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[12]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[13]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[14]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[15]}]]
|
connect_debug_port u_ila_0/probe16 [get_nets [list {axis_mac0/mac_top0/mac_tx0/mac_tx_data[0]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[1]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[2]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[3]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[4]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[5]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[6]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe17]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe17]
|
||||||
set_property port_width 12 [get_debug_ports u_ila_0/probe17]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe17]
|
||||||
connect_debug_port u_ila_0/probe17 [get_nets [list {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[0]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[1]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[2]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[3]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[4]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[5]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[6]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[7]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[8]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[9]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[10]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[11]}]]
|
connect_debug_port u_ila_0/probe17 [get_nets [list {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[0]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[1]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[2]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[3]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[4]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[5]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[6]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[7]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[8]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[9]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[10]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[11]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[12]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[13]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[14]} {axis_mac0/mac_top0/mac_tx0/udp_send_data_length[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe18]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe18]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe18]
|
set_property port_width 12 [get_debug_ports u_ila_0/probe18]
|
||||||
connect_debug_port u_ila_0/probe18 [get_nets [list {axis_mac0/mac_top0/mac_tx0/ram_wr_data[0]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[1]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[2]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[3]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[4]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[5]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[6]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[7]}]]
|
connect_debug_port u_ila_0/probe18 [get_nets [list {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[0]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[1]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[2]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[3]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[4]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[5]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[6]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[7]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[8]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[9]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[10]} {axis_mac0/mac_top0/mac_tx0/udp_ram_data_count[11]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe19]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe19]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe19]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe19]
|
||||||
connect_debug_port u_ila_0/probe19 [get_nets [list {axis_mac0/mac_top0/mac_tx0/mac_tx_data[0]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[1]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[2]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[3]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[4]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[5]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[6]} {axis_mac0/mac_top0/mac_tx0/mac_tx_data[7]}]]
|
connect_debug_port u_ila_0/probe19 [get_nets [list {axis_mac0/mac_top0/mac_tx0/ram_wr_data[0]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[1]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[2]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[3]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[4]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[5]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[6]} {axis_mac0/mac_top0/mac_tx0/ram_wr_data[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe20]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe20]
|
||||||
set_property port_width 4 [get_debug_ports u_ila_0/probe20]
|
set_property port_width 11 [get_debug_ports u_ila_0/probe20]
|
||||||
connect_debug_port u_ila_0/probe20 [get_nets [list {axis_mac0/mac_top0/mac_tx0/udp0/usedw[0]} {axis_mac0/mac_top0/mac_tx0/udp0/usedw[1]} {axis_mac0/mac_top0/mac_tx0/udp0/usedw[2]} {axis_mac0/mac_top0/mac_tx0/udp0/usedw[3]}]]
|
connect_debug_port u_ila_0/probe20 [get_nets [list {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[0]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[1]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[2]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[3]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[4]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[5]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[6]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[7]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[8]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[9]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[10]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe21]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe21]
|
||||||
set_property port_width 6 [get_debug_ports u_ila_0/probe21]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe21]
|
||||||
connect_debug_port u_ila_0/probe21 [get_nets [list {axis_mac0/mac_top0/mac_tx0/udp0/state[0]} {axis_mac0/mac_top0/mac_tx0/udp0/state[1]} {axis_mac0/mac_top0/mac_tx0/udp0/state[2]} {axis_mac0/mac_top0/mac_tx0/udp0/state[3]} {axis_mac0/mac_top0/mac_tx0/udp0/state[4]} {axis_mac0/mac_top0/mac_tx0/udp0/state[5]}]]
|
connect_debug_port u_ila_0/probe21 [get_nets [list {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[0]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[1]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[2]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[3]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[4]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[5]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[6]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe22]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe22]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe22]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe22]
|
||||||
connect_debug_port u_ila_0/probe22 [get_nets [list {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[0]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[1]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[2]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[3]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[4]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[5]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[6]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[7]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[8]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[9]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[10]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[11]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[12]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[13]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[14]} {axis_mac0/mac_top0/mac_rx0/upper_layer_data_length[15]}]]
|
connect_debug_port u_ila_0/probe22 [get_nets [list axis_mac0/mac_top0/mac_tx0/almost_full]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe23]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe23]
|
||||||
set_property port_width 11 [get_debug_ports u_ila_0/probe23]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe23]
|
||||||
connect_debug_port u_ila_0/probe23 [get_nets [list {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[0]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[1]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[2]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[3]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[4]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[5]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[6]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[7]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[8]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[9]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_read_addr[10]}]]
|
connect_debug_port u_ila_0/probe23 [get_nets [list axis_mac0/arp_found]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe24]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe24]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe24]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe24]
|
||||||
connect_debug_port u_ila_0/probe24 [get_nets [list {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[0]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[1]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[2]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[3]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[4]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[5]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[6]} {axis_mac0/mac_top0/mac_rx0/udp_rec_ram_rdata[7]}]]
|
connect_debug_port u_ila_0/probe24 [get_nets [list axis_mac0/m_axis_rx_tlast]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe25]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe25]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe25]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe25]
|
||||||
connect_debug_port u_ila_0/probe25 [get_nets [list {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[0]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[1]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[2]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[3]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[4]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[5]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[6]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[7]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[8]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[9]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[10]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[11]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[12]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[13]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[14]} {axis_mac0/mac_top0/mac_rx0/udp_rec_data_length[15]}]]
|
connect_debug_port u_ila_0/probe25 [get_nets [list axis_mac0/m_axis_rx_tready]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe26]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe26]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe26]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe26]
|
||||||
connect_debug_port u_ila_0/probe26 [get_nets [list {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[0]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[1]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[2]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[3]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[4]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[5]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[6]} {axis_mac0/mac_top0/mac_rx0/mac_rx_dataout[7]}]]
|
connect_debug_port u_ila_0/probe26 [get_nets [list axis_mac0/m_axis_rx_tvalid]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe27]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe27]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe27]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe27]
|
||||||
connect_debug_port u_ila_0/probe27 [get_nets [list {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[0]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[1]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[2]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[3]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[4]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[5]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[6]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[7]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[8]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[9]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[10]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[11]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[12]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[13]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[14]} {axis_mac0/mac_top0/mac_rx0/ip_total_data_length[15]}]]
|
connect_debug_port u_ila_0/probe27 [get_nets [list axis_mac0/mac_top0/mac_tx0/mac_data_valid]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe28]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe28]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe28]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe28]
|
||||||
connect_debug_port u_ila_0/probe28 [get_nets [list {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[0]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[1]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[2]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[3]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[4]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[5]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[6]} {axis_mac0/mac_top0/mac_rx0/mac_rx_datain[7]}]]
|
connect_debug_port u_ila_0/probe28 [get_nets [list axis_mac0/mac_top0/mac_tx0/mac_send_end]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe29]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe29]
|
||||||
set_property port_width 11 [get_debug_ports u_ila_0/probe29]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe29]
|
||||||
connect_debug_port u_ila_0/probe29 [get_nets [list {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[0]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[1]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[2]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[3]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[4]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[5]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[6]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[7]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[8]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[9]} {axis_mac0/mac_top0/mac_rx0/udp0/ram_write_addr[10]}]]
|
connect_debug_port u_ila_0/probe29 [get_nets [list axis_mac0/mac_top0/mac_rx0/udp0/ram_wr_en]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe30]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe30]
|
||||||
set_property port_width 2 [get_debug_ports u_ila_0/probe30]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe30]
|
||||||
connect_debug_port u_ila_0/probe30 [get_nets [list {test_state[0]} {test_state[1]}]]
|
connect_debug_port u_ila_0/probe30 [get_nets [list axis_mac0/mac_top0/mac_tx0/ram_wr_en]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe31]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe31]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe31]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe31]
|
||||||
connect_debug_port u_ila_0/probe31 [get_nets [list axis_mac0/mac_top0/mac_tx0/almost_full]]
|
connect_debug_port u_ila_0/probe31 [get_nets [list req_ready]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe32]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe32]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe32]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe32]
|
||||||
connect_debug_port u_ila_0/probe32 [get_nets [list axis_mac0/arp_found]]
|
connect_debug_port u_ila_0/probe32 [get_nets [list axis_mac0/req_ready]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe33]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe33]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe33]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe33]
|
||||||
connect_debug_port u_ila_0/probe33 [get_nets [list arbi_inst/rx_buffer_inst/e10_100_rx_dv]]
|
connect_debug_port u_ila_0/probe33 [get_nets [list axis_mac0/s_axis_tx_tlast]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe34]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe34]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe34]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe34]
|
||||||
connect_debug_port u_ila_0/probe34 [get_nets [list arbi_inst/e_rx_dv]]
|
connect_debug_port u_ila_0/probe34 [get_nets [list axis_mac0/s_axis_tx_tready]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe35]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe35]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe35]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe35]
|
||||||
connect_debug_port u_ila_0/probe35 [get_nets [list arbi_inst/e_tx_en]]
|
connect_debug_port u_ila_0/probe35 [get_nets [list axis_mac0/s_axis_tx_tvalid]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe36]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe36]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe36]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe36]
|
||||||
connect_debug_port u_ila_0/probe36 [get_nets [list arbi_inst/gmii_rx_dv]]
|
connect_debug_port u_ila_0/probe36 [get_nets [list send_req]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe37]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe37]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe37]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe37]
|
||||||
connect_debug_port u_ila_0/probe37 [get_nets [list arbi_inst/rx_buffer_inst/gmii_rx_dv_d0]]
|
connect_debug_port u_ila_0/probe37 [get_nets [list axis_mac0/send_req]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe38]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe38]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe38]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe38]
|
||||||
connect_debug_port u_ila_0/probe38 [get_nets [list arbi_inst/rx_buffer_inst/gmii_rx_dv_d1]]
|
connect_debug_port u_ila_0/probe38 [get_nets [list axis_mac0/mac_top0/mac_tx0/udp_ram_data_req]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe39]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe39]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe39]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe39]
|
||||||
connect_debug_port u_ila_0/probe39 [get_nets [list arbi_inst/gmii_tx_en]]
|
connect_debug_port u_ila_0/probe39 [get_nets [list axis_mac0/mac_top0/mac_rx0/udp_rec_data_valid]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe40]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe40]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe40]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe40]
|
||||||
connect_debug_port u_ila_0/probe40 [get_nets [list axis_mac0/m_axis_rx_tlast]]
|
connect_debug_port u_ila_0/probe40 [get_nets [list axis_mac0/mac_top0/mac_tx0/udp_tx_end]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe41]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe41]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe41]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe41]
|
||||||
connect_debug_port u_ila_0/probe41 [get_nets [list axis_mac0/m_axis_rx_tready]]
|
connect_debug_port u_ila_0/probe41 [get_nets [list axis_mac0/mac_top0/mac_tx0/udp_tx_req]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe42]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe42]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe42]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe42]
|
||||||
connect_debug_port u_ila_0/probe42 [get_nets [list axis_mac0/m_axis_rx_tvalid]]
|
connect_debug_port u_ila_0/probe42 [get_nets [list axis_mac0/mac_top0/mac_tx0/upper_data_req]]
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe43]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe43]
|
|
||||||
connect_debug_port u_ila_0/probe43 [get_nets [list axis_mac0/mac_top0/mac_tx0/mac_data_valid]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe44]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe44]
|
|
||||||
connect_debug_port u_ila_0/probe44 [get_nets [list axis_mac0/mac_top0/mac_tx0/mac_send_end]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe45]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe45]
|
|
||||||
connect_debug_port u_ila_0/probe45 [get_nets [list axis_mac0/mac_top0/mac_rx0/udp0/ram_wr_en]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe46]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe46]
|
|
||||||
connect_debug_port u_ila_0/probe46 [get_nets [list axis_mac0/mac_top0/mac_tx0/ram_wr_en]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe47]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe47]
|
|
||||||
connect_debug_port u_ila_0/probe47 [get_nets [list req_ready]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe48]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe48]
|
|
||||||
connect_debug_port u_ila_0/probe48 [get_nets [list axis_mac0/req_ready]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe49]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe49]
|
|
||||||
connect_debug_port u_ila_0/probe49 [get_nets [list axis_mac0/s_axis_tx_tlast]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe50]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe50]
|
|
||||||
connect_debug_port u_ila_0/probe50 [get_nets [list axis_mac0/s_axis_tx_tready]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe51]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe51]
|
|
||||||
connect_debug_port u_ila_0/probe51 [get_nets [list axis_mac0/s_axis_tx_tvalid]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe52]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe52]
|
|
||||||
connect_debug_port u_ila_0/probe52 [get_nets [list axis_mac0/send_req]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe53]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe53]
|
|
||||||
connect_debug_port u_ila_0/probe53 [get_nets [list send_req]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe54]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe54]
|
|
||||||
connect_debug_port u_ila_0/probe54 [get_nets [list arbi_inst/tx_buffer_inst/tx_rden]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe55]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe55]
|
|
||||||
connect_debug_port u_ila_0/probe55 [get_nets [list arbi_inst/tx_buffer_inst/tx_wren]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe56]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe56]
|
|
||||||
connect_debug_port u_ila_0/probe56 [get_nets [list axis_mac0/mac_top0/mac_tx0/udp_ram_data_req]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe57]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe57]
|
|
||||||
connect_debug_port u_ila_0/probe57 [get_nets [list axis_mac0/mac_top0/mac_rx0/udp_rec_data_valid]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe58]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe58]
|
|
||||||
connect_debug_port u_ila_0/probe58 [get_nets [list axis_mac0/mac_top0/mac_tx0/udp_tx_end]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe59]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe59]
|
|
||||||
connect_debug_port u_ila_0/probe59 [get_nets [list axis_mac0/mac_top0/mac_tx0/udp_tx_req]]
|
|
||||||
create_debug_port u_ila_0 probe
|
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe60]
|
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe60]
|
|
||||||
connect_debug_port u_ila_0/probe60 [get_nets [list axis_mac0/mac_top0/mac_tx0/upper_data_req]]
|
|
||||||
set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
|
set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
|
||||||
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
|
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
|
||||||
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
|
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
|
||||||
connect_debug_port dbg_hub/clk [get_nets rgmii_rxc_IBUF_BUFG]
|
connect_debug_port dbg_hub/clk [get_nets e_gtxc_OBUF_BUFG]
|
||||||
|
|||||||
@ -7,113 +7,63 @@
|
|||||||
|
|
||||||
module ethernet_axis_echo
|
module ethernet_axis_echo
|
||||||
(
|
(
|
||||||
input sys_clk_p,
|
input sys_clk_p, // system clock positive
|
||||||
input sys_clk_n,
|
input sys_clk_n, // system clock negative
|
||||||
input rst_n,
|
input rst_n, // reset ,low active
|
||||||
output [3:0] led,
|
output [3:0] led, // display network rate status
|
||||||
output e_reset,
|
output e_reset, // phy reset
|
||||||
output e_mdc,
|
output e_mdc, // phy emdio clock
|
||||||
inout e_mdio,
|
inout e_mdio, // phy emdio data
|
||||||
output [3:0] rgmii_txd,
|
input e_rxc, // 125Mhz ethernet gmii rx clock
|
||||||
output rgmii_txctl,
|
input e_rxdv, // GMII recieving data valid
|
||||||
output rgmii_txc,
|
input e_rxer, // GMII recieving data error
|
||||||
input [3:0] rgmii_rxd,
|
input [7:0] e_rxd, // GMII recieving data
|
||||||
input rgmii_rxctl,
|
|
||||||
input rgmii_rxc
|
|
||||||
);
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
input e_txc, // 25Mhz ethernet mii tx clock
|
||||||
// Internal GMII-side signals
|
output e_gtxc, // 125Mhz ethernet gmii tx clock
|
||||||
// ------------------------------------------------------------
|
output e_txen, // GMII sending data valid
|
||||||
wire [7:0] gmii_txd;
|
output e_txer, // GMII sending data error
|
||||||
wire gmii_tx_en;
|
output[7:0] e_txd // GMII sending data
|
||||||
wire gmii_tx_er;
|
);
|
||||||
wire gmii_tx_clk;
|
wire sys_clk; //single end clock
|
||||||
wire gmii_crs;
|
wire [31:0] pack_total_len ; //package length
|
||||||
wire gmii_col;
|
wire [1:0] speed ; //net speed select
|
||||||
wire [7:0] gmii_rxd_i;
|
wire link ; //link status
|
||||||
wire gmii_rx_dv;
|
wire erxdv ;
|
||||||
wire gmii_rx_er;
|
wire [7:0] erxd ;
|
||||||
wire gmii_rx_clk;
|
wire e_tx_en ;
|
||||||
|
wire [7:0] etxd ;
|
||||||
|
wire e_rst_n ;
|
||||||
|
assign e_gtxc = e_rxc;
|
||||||
|
assign e_reset = 1'b1;
|
||||||
|
|
||||||
wire [31:0] pack_total_len;
|
// generate single end clock
|
||||||
|
|
||||||
wire e_rx_dv;
|
|
||||||
wire [7:0] e_rxd;
|
|
||||||
wire e_tx_en;
|
|
||||||
wire [7:0] e_txd;
|
|
||||||
wire e_rst_n;
|
|
||||||
wire sys_clk;
|
|
||||||
|
|
||||||
wire duplex_mode;
|
|
||||||
|
|
||||||
assign duplex_mode = 1'b1;
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
// System clock buffer
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
IBUFDS sys_clk_ibufgds
|
IBUFDS sys_clk_ibufgds
|
||||||
(
|
(
|
||||||
.O (sys_clk),
|
.O (sys_clk ),
|
||||||
.I (sys_clk_p),
|
.I (sys_clk_p ),
|
||||||
.IB (sys_clk_n)
|
.IB (sys_clk_n )
|
||||||
);
|
);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
// IDELAYCTRL
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
(* IODELAY_GROUP = "rgmii_idelay_group" *)
|
|
||||||
IDELAYCTRL IDELAYCTRL_inst (
|
|
||||||
.RDY(),
|
|
||||||
.REFCLK(sys_clk),
|
|
||||||
.RST(1'b0)
|
|
||||||
);
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// Different conversion of GMII data according to different network speeds
|
||||||
// GMII <-> RGMII conversion
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
util_gmii_to_rgmii util_gmii_to_rgmii_m0
|
|
||||||
(
|
|
||||||
.reset (1'b0),
|
|
||||||
.rgmii_td (rgmii_txd),
|
|
||||||
.rgmii_tx_ctl (rgmii_txctl),
|
|
||||||
.rgmii_txc (rgmii_txc),
|
|
||||||
.rgmii_rd (rgmii_rxd),
|
|
||||||
.rgmii_rx_ctl (rgmii_rxctl),
|
|
||||||
.gmii_rx_clk (gmii_rx_clk),
|
|
||||||
.gmii_txd (e_txd),
|
|
||||||
.gmii_tx_en (e_tx_en),
|
|
||||||
.gmii_tx_er (1'b0),
|
|
||||||
.gmii_tx_clk (gmii_tx_clk),
|
|
||||||
.gmii_crs (gmii_crs),
|
|
||||||
.gmii_col (gmii_col),
|
|
||||||
.gmii_rxd (gmii_rxd_i),
|
|
||||||
.rgmii_rxc (rgmii_rxc),
|
|
||||||
.gmii_rx_dv (gmii_rx_dv),
|
|
||||||
.gmii_rx_er (gmii_rx_er),
|
|
||||||
.speed_selection (2'b10),
|
|
||||||
.duplex_mode (duplex_mode)
|
|
||||||
);
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
// GMII arbitration / adaptation
|
|
||||||
// ------------------------------------------------------------
|
|
||||||
gmii_arbi arbi_inst
|
gmii_arbi arbi_inst
|
||||||
(
|
(
|
||||||
.clk (gmii_tx_clk),
|
.clk (e_gtxc ),
|
||||||
.rst_n (rst_n),
|
.rst_n (rst_n ),
|
||||||
.speed (2'b10),
|
.speed (2'b10 ),
|
||||||
.link (1'b1),
|
.link (1'b1 ),
|
||||||
.pack_total_len (pack_total_len),
|
.pack_total_len (pack_total_len ),
|
||||||
.e_rst_n (e_rst_n),
|
.e_rst_n (e_rst_n ),
|
||||||
.gmii_rx_dv (gmii_rx_dv),
|
.gmii_rx_dv (e_rxdv ),
|
||||||
.gmii_rxd (gmii_rxd_i),
|
.gmii_rxd (e_rxd ),
|
||||||
.gmii_tx_en (gmii_tx_en),
|
.gmii_tx_en (e_tx_en ),
|
||||||
.gmii_txd (gmii_txd),
|
.gmii_txd (etxd ),
|
||||||
.e_rx_dv (e_rx_dv),
|
.e_rx_dv (erxdv ),
|
||||||
.e_rxd (e_rxd),
|
.e_rxd (erxd ),
|
||||||
.e_tx_en (e_tx_en),
|
.e_tx_en (e_txen ),
|
||||||
.e_txd (e_txd)
|
.e_txd (e_txd )
|
||||||
);
|
);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -139,14 +89,14 @@ module ethernet_axis_echo
|
|||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
axis_mac axis_mac0
|
axis_mac axis_mac0
|
||||||
(
|
(
|
||||||
.gmii_tx_clk (gmii_tx_clk),
|
.gmii_tx_clk (e_gtxc),
|
||||||
.gmii_rx_clk (gmii_rx_clk),
|
.gmii_rx_clk (e_rxc),
|
||||||
.rst_n (e_rst_n),
|
.rst_n (e_rst_n),
|
||||||
|
|
||||||
.gmii_rx_dv (e_rx_dv),
|
.gmii_rx_dv (erxdv),
|
||||||
.gmii_rxd (e_rxd),
|
.gmii_rxd (erxd),
|
||||||
.gmii_tx_en (gmii_tx_en),
|
.gmii_tx_en (e_tx_en),
|
||||||
.gmii_txd (gmii_txd),
|
.gmii_txd (etxd),
|
||||||
|
|
||||||
.send_req (send_req),
|
.send_req (send_req),
|
||||||
.data_length (data_length),
|
.data_length (data_length),
|
||||||
@ -184,7 +134,7 @@ module ethernet_axis_echo
|
|||||||
|
|
||||||
assign tx_done_pulse_rx = tx_done_toggle_rx_d1 ^ tx_done_toggle_rx_d0;
|
assign tx_done_pulse_rx = tx_done_toggle_rx_d1 ^ tx_done_toggle_rx_d0;
|
||||||
|
|
||||||
always @(posedge gmii_rx_clk or negedge e_rst_n) begin
|
always @(posedge e_rxc or negedge e_rst_n) begin
|
||||||
if (!e_rst_n) begin
|
if (!e_rst_n) begin
|
||||||
tx_done_toggle_rx_d0 <= 1'b0;
|
tx_done_toggle_rx_d0 <= 1'b0;
|
||||||
tx_done_toggle_rx_d1 <= 1'b0;
|
tx_done_toggle_rx_d1 <= 1'b0;
|
||||||
@ -194,7 +144,7 @@ module ethernet_axis_echo
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
always @(posedge gmii_rx_clk or negedge e_rst_n) begin
|
always @(posedge e_rxc or negedge e_rst_n) begin
|
||||||
if (!e_rst_n) begin
|
if (!e_rst_n) begin
|
||||||
rx_wr_ptr <= 16'd0;
|
rx_wr_ptr <= 16'd0;
|
||||||
rx_pkt_len <= 16'd0;
|
rx_pkt_len <= 16'd0;
|
||||||
@ -227,7 +177,7 @@ module ethernet_axis_echo
|
|||||||
// sync RX pendind to TX domain
|
// sync RX pendind to TX domain
|
||||||
reg rx_pkt_pending_tx_d0, rx_pkt_pending_tx_d1;
|
reg rx_pkt_pending_tx_d0, rx_pkt_pending_tx_d1;
|
||||||
|
|
||||||
always @(posedge gmii_tx_clk or negedge e_rst_n) begin
|
always @(posedge e_gtxc or negedge e_rst_n) begin
|
||||||
if (!e_rst_n) begin
|
if (!e_rst_n) begin
|
||||||
rx_pkt_pending_tx_d0 <= 1'b0;
|
rx_pkt_pending_tx_d0 <= 1'b0;
|
||||||
rx_pkt_pending_tx_d1 <= 1'b0;
|
rx_pkt_pending_tx_d1 <= 1'b0;
|
||||||
@ -253,7 +203,7 @@ module ethernet_axis_echo
|
|||||||
reg [15:0] tx_pkt_len;
|
reg [15:0] tx_pkt_len;
|
||||||
reg [15:0] tx_rd_ptr;
|
reg [15:0] tx_rd_ptr;
|
||||||
|
|
||||||
always @(posedge gmii_tx_clk or negedge e_rst_n) begin
|
always @(posedge e_gtxc or negedge e_rst_n) begin
|
||||||
if (!e_rst_n) begin
|
if (!e_rst_n) begin
|
||||||
test_state <= TX_IDLE;
|
test_state <= TX_IDLE;
|
||||||
tx_busy <= 1'b0;
|
tx_busy <= 1'b0;
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# FPGA settings
|
# FPGA settings
|
||||||
FPGA_PART = xc7a35tfgg484-1
|
FPGA_PART = xc7a100tfgg484-2
|
||||||
FPGA_TOP = ethernet_test_minimal
|
FPGA_TOP = ethernet_test_minimal
|
||||||
FPGA_ARCH = artix7
|
FPGA_ARCH = artix7
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ SYN_FILES += $(sort $(shell find ../../src -type f \( -name '*.v' -o -name '*.sv
|
|||||||
XCI_FILES = $(sort $(shell find ../../src -type f -name '*.xci'))
|
XCI_FILES = $(sort $(shell find ../../src -type f -name '*.xci'))
|
||||||
|
|
||||||
XDC_FILES += debug.xdc
|
XDC_FILES += debug.xdc
|
||||||
XDC_FILES += ../../../../constraints/ax7a035b.xdc
|
XDC_FILES += ../../../../constraints/ax7102.xdc
|
||||||
|
|
||||||
program: $(PROJECT).bit
|
program: $(PROJECT).bit
|
||||||
echo "open_hw_manager" > program.tcl
|
echo "open_hw_manager" > program.tcl
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
# debug ILA
|
# debug ILA
|
||||||
|
|
||||||
|
connect_debug_port u_ila_0/clk [get_nets [list rgmii_rxc_IBUF_BUFG]]
|
||||||
|
connect_debug_port dbg_hub/clk [get_nets rgmii_rxc_IBUF_BUFG]
|
||||||
|
|
||||||
create_debug_core u_ila_0 ila
|
create_debug_core u_ila_0 ila
|
||||||
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
|
set_property ALL_PROBE_SAME_MU true [get_debug_cores u_ila_0]
|
||||||
set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_0]
|
set_property ALL_PROBE_SAME_MU_CNT 1 [get_debug_cores u_ila_0]
|
||||||
@ -10,102 +13,102 @@ set_property C_INPUT_PIPE_STAGES 0 [get_debug_cores u_ila_0]
|
|||||||
set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
|
set_property C_TRIGIN_EN false [get_debug_cores u_ila_0]
|
||||||
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
|
set_property C_TRIGOUT_EN false [get_debug_cores u_ila_0]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/clk]
|
set_property port_width 1 [get_debug_ports u_ila_0/clk]
|
||||||
connect_debug_port u_ila_0/clk [get_nets [list rgmii_rxc_IBUF_BUFG]]
|
connect_debug_port u_ila_0/clk [get_nets [list e_gtxc_OBUF_BUFG]]
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe0]
|
||||||
set_property port_width 9 [get_debug_ports u_ila_0/probe0]
|
set_property port_width 11 [get_debug_ports u_ila_0/probe0]
|
||||||
connect_debug_port u_ila_0/probe0 [get_nets [list {mac_test0/state[0]} {mac_test0/state[1]} {mac_test0/state[2]} {mac_test0/state[3]} {mac_test0/state[4]} {mac_test0/state[5]} {mac_test0/state[6]} {mac_test0/state[7]} {mac_test0/state[8]}]]
|
connect_debug_port u_ila_0/probe0 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[0]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[1]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[2]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[3]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[4]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[5]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[6]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[7]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[8]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[9]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[10]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe1]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe1]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe1]
|
set_property port_width 4 [get_debug_ports u_ila_0/probe1]
|
||||||
connect_debug_port u_ila_0/probe1 [get_nets [list {arbi_inst/rx_buffer_inst/e10_100_rxd[0]} {arbi_inst/rx_buffer_inst/e10_100_rxd[1]} {arbi_inst/rx_buffer_inst/e10_100_rxd[2]} {arbi_inst/rx_buffer_inst/e10_100_rxd[3]} {arbi_inst/rx_buffer_inst/e10_100_rxd[4]} {arbi_inst/rx_buffer_inst/e10_100_rxd[5]} {arbi_inst/rx_buffer_inst/e10_100_rxd[6]} {arbi_inst/rx_buffer_inst/e10_100_rxd[7]}]]
|
connect_debug_port u_ila_0/probe1 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp0/usedw[0]} {mac_test0/mac_top0/mac_tx0/udp0/usedw[1]} {mac_test0/mac_top0/mac_tx0/udp0/usedw[2]} {mac_test0/mac_top0/mac_tx0/udp0/usedw[3]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe2]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe2]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe2]
|
set_property port_width 6 [get_debug_ports u_ila_0/probe2]
|
||||||
connect_debug_port u_ila_0/probe2 [get_nets [list {arbi_inst/tx_buffer_inst/tx_wdata[0]} {arbi_inst/tx_buffer_inst/tx_wdata[1]} {arbi_inst/tx_buffer_inst/tx_wdata[2]} {arbi_inst/tx_buffer_inst/tx_wdata[3]} {arbi_inst/tx_buffer_inst/tx_wdata[4]} {arbi_inst/tx_buffer_inst/tx_wdata[5]} {arbi_inst/tx_buffer_inst/tx_wdata[6]} {arbi_inst/tx_buffer_inst/tx_wdata[7]}]]
|
connect_debug_port u_ila_0/probe2 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp0/state[0]} {mac_test0/mac_top0/mac_tx0/udp0/state[1]} {mac_test0/mac_top0/mac_tx0/udp0/state[2]} {mac_test0/mac_top0/mac_tx0/udp0/state[3]} {mac_test0/mac_top0/mac_tx0/udp0/state[4]} {mac_test0/mac_top0/mac_tx0/udp0/state[5]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe3]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe3]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe3]
|
set_property port_width 9 [get_debug_ports u_ila_0/probe3]
|
||||||
connect_debug_port u_ila_0/probe3 [get_nets [list {arbi_inst/tx_buffer_inst/tx_rdata[0]} {arbi_inst/tx_buffer_inst/tx_rdata[1]} {arbi_inst/tx_buffer_inst/tx_rdata[2]} {arbi_inst/tx_buffer_inst/tx_rdata[3]} {arbi_inst/tx_buffer_inst/tx_rdata[4]} {arbi_inst/tx_buffer_inst/tx_rdata[5]} {arbi_inst/tx_buffer_inst/tx_rdata[6]} {arbi_inst/tx_buffer_inst/tx_rdata[7]}]]
|
connect_debug_port u_ila_0/probe3 [get_nets [list {mac_test0/state[0]} {mac_test0/state[1]} {mac_test0/state[2]} {mac_test0/state[3]} {mac_test0/state[4]} {mac_test0/state[5]} {mac_test0/state[6]} {mac_test0/state[7]} {mac_test0/state[8]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe4]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe4]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe4]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe4]
|
||||||
connect_debug_port u_ila_0/probe4 [get_nets [list {arbi_inst/tx_buffer_inst/tx_data_cnt[0]} {arbi_inst/tx_buffer_inst/tx_data_cnt[1]} {arbi_inst/tx_buffer_inst/tx_data_cnt[2]} {arbi_inst/tx_buffer_inst/tx_data_cnt[3]} {arbi_inst/tx_buffer_inst/tx_data_cnt[4]} {arbi_inst/tx_buffer_inst/tx_data_cnt[5]} {arbi_inst/tx_buffer_inst/tx_data_cnt[6]} {arbi_inst/tx_buffer_inst/tx_data_cnt[7]} {arbi_inst/tx_buffer_inst/tx_data_cnt[8]} {arbi_inst/tx_buffer_inst/tx_data_cnt[9]} {arbi_inst/tx_buffer_inst/tx_data_cnt[10]} {arbi_inst/tx_buffer_inst/tx_data_cnt[11]} {arbi_inst/tx_buffer_inst/tx_data_cnt[12]} {arbi_inst/tx_buffer_inst/tx_data_cnt[13]} {arbi_inst/tx_buffer_inst/tx_data_cnt[14]} {arbi_inst/tx_buffer_inst/tx_data_cnt[15]}]]
|
connect_debug_port u_ila_0/probe4 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp_send_data_length[0]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[1]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[2]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[3]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[4]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[5]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[6]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[7]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[8]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[9]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[10]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[11]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[12]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[13]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[14]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe5]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe5]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe5]
|
set_property port_width 12 [get_debug_ports u_ila_0/probe5]
|
||||||
connect_debug_port u_ila_0/probe5 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp_send_data_length[0]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[1]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[2]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[3]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[4]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[5]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[6]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[7]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[8]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[9]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[10]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[11]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[12]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[13]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[14]} {mac_test0/mac_top0/mac_tx0/udp_send_data_length[15]}]]
|
connect_debug_port u_ila_0/probe5 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[0]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[1]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[2]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[3]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[4]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[5]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[6]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[7]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[8]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[9]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[10]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[11]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe6]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe6]
|
||||||
set_property port_width 12 [get_debug_ports u_ila_0/probe6]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe6]
|
||||||
connect_debug_port u_ila_0/probe6 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[0]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[1]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[2]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[3]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[4]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[5]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[6]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[7]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[8]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[9]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[10]} {mac_test0/mac_top0/mac_tx0/udp_ram_data_count[11]}]]
|
connect_debug_port u_ila_0/probe6 [get_nets [list {mac_test0/mac_top0/mac_tx0/ram_wr_data[0]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[1]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[2]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[3]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[4]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[5]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[6]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe7]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe7]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe7]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe7]
|
||||||
connect_debug_port u_ila_0/probe7 [get_nets [list {mac_test0/mac_top0/mac_tx0/ram_wr_data[0]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[1]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[2]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[3]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[4]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[5]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[6]} {mac_test0/mac_top0/mac_tx0/ram_wr_data[7]}]]
|
connect_debug_port u_ila_0/probe7 [get_nets [list {mac_test0/mac_top0/mac_tx0/mac_tx_data[0]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[1]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[2]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[3]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[4]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[5]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[6]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe8]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe8]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe8]
|
set_property port_width 6 [get_debug_ports u_ila_0/probe8]
|
||||||
connect_debug_port u_ila_0/probe8 [get_nets [list {mac_test0/mac_top0/mac_tx0/mac_tx_data[0]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[1]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[2]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[3]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[4]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[5]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[6]} {mac_test0/mac_top0/mac_tx0/mac_tx_data[7]}]]
|
connect_debug_port u_ila_0/probe8 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp0/ck_state[0]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[1]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[2]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[3]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[4]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[5]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe9]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe9]
|
||||||
set_property port_width 4 [get_debug_ports u_ila_0/probe9]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe9]
|
||||||
connect_debug_port u_ila_0/probe9 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp0/usedw[0]} {mac_test0/mac_top0/mac_tx0/udp0/usedw[1]} {mac_test0/mac_top0/mac_tx0/udp0/usedw[2]} {mac_test0/mac_top0/mac_tx0/udp0/usedw[3]}]]
|
connect_debug_port u_ila_0/probe9 [get_nets [list {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[0]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[1]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[2]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[3]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[4]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[5]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[6]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[7]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[8]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[9]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[10]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[11]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[12]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[13]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[14]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe10]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe10]
|
||||||
set_property port_width 6 [get_debug_ports u_ila_0/probe10]
|
set_property port_width 11 [get_debug_ports u_ila_0/probe10]
|
||||||
connect_debug_port u_ila_0/probe10 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp0/state[0]} {mac_test0/mac_top0/mac_tx0/udp0/state[1]} {mac_test0/mac_top0/mac_tx0/udp0/state[2]} {mac_test0/mac_top0/mac_tx0/udp0/state[3]} {mac_test0/mac_top0/mac_tx0/udp0/state[4]} {mac_test0/mac_top0/mac_tx0/udp0/state[5]}]]
|
connect_debug_port u_ila_0/probe10 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[0]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[1]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[2]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[3]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[4]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[5]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[6]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[7]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[8]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[9]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[10]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe11]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe11]
|
||||||
set_property port_width 6 [get_debug_ports u_ila_0/probe11]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe11]
|
||||||
connect_debug_port u_ila_0/probe11 [get_nets [list {mac_test0/mac_top0/mac_tx0/udp0/ck_state[0]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[1]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[2]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[3]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[4]} {mac_test0/mac_top0/mac_tx0/udp0/ck_state[5]}]]
|
connect_debug_port u_ila_0/probe11 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[0]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[1]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[2]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[3]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[4]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[5]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[6]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe12]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe12]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe12]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe12]
|
||||||
connect_debug_port u_ila_0/probe12 [get_nets [list {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[0]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[1]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[2]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[3]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[4]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[5]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[6]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[7]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[8]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[9]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[10]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[11]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[12]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[13]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[14]} {mac_test0/mac_top0/mac_rx0/upper_layer_data_length[15]}]]
|
connect_debug_port u_ila_0/probe12 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[0]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[1]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[2]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[3]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[4]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[5]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[6]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[7]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[8]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[9]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[10]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[11]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[12]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[13]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[14]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe13]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe13]
|
||||||
set_property port_width 11 [get_debug_ports u_ila_0/probe13]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe13]
|
||||||
connect_debug_port u_ila_0/probe13 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[0]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[1]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[2]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[3]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[4]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[5]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[6]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[7]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[8]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[9]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_read_addr[10]}]]
|
connect_debug_port u_ila_0/probe13 [get_nets [list {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[0]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[1]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[2]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[3]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[4]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[5]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[6]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe14]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe14]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe14]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe14]
|
||||||
connect_debug_port u_ila_0/probe14 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[0]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[1]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[2]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[3]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[4]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[5]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[6]} {mac_test0/mac_top0/mac_rx0/udp_rec_ram_rdata[7]}]]
|
connect_debug_port u_ila_0/probe14 [get_nets [list {mac_test0/mac_top0/mac_rx0/ip_total_data_length[0]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[1]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[2]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[3]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[4]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[5]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[6]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[7]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[8]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[9]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[10]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[11]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[12]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[13]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[14]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe15]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe15]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe15]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe15]
|
||||||
connect_debug_port u_ila_0/probe15 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[0]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[1]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[2]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[3]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[4]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[5]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[6]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[7]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[8]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[9]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[10]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[11]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[12]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[13]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[14]} {mac_test0/mac_top0/mac_rx0/udp_rec_data_length[15]}]]
|
connect_debug_port u_ila_0/probe15 [get_nets [list {mac_test0/mac_top0/mac_rx0/mac_rx_datain[0]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[1]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[2]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[3]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[4]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[5]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[6]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe16]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe16]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe16]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe16]
|
||||||
connect_debug_port u_ila_0/probe16 [get_nets [list {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[0]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[1]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[2]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[3]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[4]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[5]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[6]} {mac_test0/mac_top0/mac_rx0/mac_rx_dataout[7]}]]
|
connect_debug_port u_ila_0/probe16 [get_nets [list {arbi_inst/gmii_txd[0]} {arbi_inst/gmii_txd[1]} {arbi_inst/gmii_txd[2]} {arbi_inst/gmii_txd[3]} {arbi_inst/gmii_txd[4]} {arbi_inst/gmii_txd[5]} {arbi_inst/gmii_txd[6]} {arbi_inst/gmii_txd[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe17]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe17]
|
||||||
set_property port_width 16 [get_debug_ports u_ila_0/probe17]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe17]
|
||||||
connect_debug_port u_ila_0/probe17 [get_nets [list {mac_test0/mac_top0/mac_rx0/ip_total_data_length[0]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[1]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[2]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[3]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[4]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[5]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[6]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[7]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[8]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[9]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[10]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[11]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[12]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[13]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[14]} {mac_test0/mac_top0/mac_rx0/ip_total_data_length[15]}]]
|
connect_debug_port u_ila_0/probe17 [get_nets [list {arbi_inst/gmii_rxd[0]} {arbi_inst/gmii_rxd[1]} {arbi_inst/gmii_rxd[2]} {arbi_inst/gmii_rxd[3]} {arbi_inst/gmii_rxd[4]} {arbi_inst/gmii_rxd[5]} {arbi_inst/gmii_rxd[6]} {arbi_inst/gmii_rxd[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe18]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe18]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe18]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe18]
|
||||||
connect_debug_port u_ila_0/probe18 [get_nets [list {mac_test0/mac_top0/mac_rx0/mac_rx_datain[0]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[1]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[2]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[3]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[4]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[5]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[6]} {mac_test0/mac_top0/mac_rx0/mac_rx_datain[7]}]]
|
connect_debug_port u_ila_0/probe18 [get_nets [list {arbi_inst/e_txd[0]} {arbi_inst/e_txd[1]} {arbi_inst/e_txd[2]} {arbi_inst/e_txd[3]} {arbi_inst/e_txd[4]} {arbi_inst/e_txd[5]} {arbi_inst/e_txd[6]} {arbi_inst/e_txd[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe19]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe19]
|
||||||
set_property port_width 11 [get_debug_ports u_ila_0/probe19]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe19]
|
||||||
connect_debug_port u_ila_0/probe19 [get_nets [list {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[0]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[1]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[2]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[3]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[4]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[5]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[6]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[7]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[8]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[9]} {mac_test0/mac_top0/mac_rx0/udp0/ram_write_addr[10]}]]
|
connect_debug_port u_ila_0/probe19 [get_nets [list {arbi_inst/e_rxd[0]} {arbi_inst/e_rxd[1]} {arbi_inst/e_rxd[2]} {arbi_inst/e_rxd[3]} {arbi_inst/e_rxd[4]} {arbi_inst/e_rxd[5]} {arbi_inst/e_rxd[6]} {arbi_inst/e_rxd[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe20]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe20]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe20]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe20]
|
||||||
connect_debug_port u_ila_0/probe20 [get_nets [list {arbi_inst/gmii_txd[0]} {arbi_inst/gmii_txd[1]} {arbi_inst/gmii_txd[2]} {arbi_inst/gmii_txd[3]} {arbi_inst/gmii_txd[4]} {arbi_inst/gmii_txd[5]} {arbi_inst/gmii_txd[6]} {arbi_inst/gmii_txd[7]}]]
|
connect_debug_port u_ila_0/probe20 [get_nets [list {arbi_inst/tx_buffer_inst/tx_wdata[0]} {arbi_inst/tx_buffer_inst/tx_wdata[1]} {arbi_inst/tx_buffer_inst/tx_wdata[2]} {arbi_inst/tx_buffer_inst/tx_wdata[3]} {arbi_inst/tx_buffer_inst/tx_wdata[4]} {arbi_inst/tx_buffer_inst/tx_wdata[5]} {arbi_inst/tx_buffer_inst/tx_wdata[6]} {arbi_inst/tx_buffer_inst/tx_wdata[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe21]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe21]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe21]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe21]
|
||||||
connect_debug_port u_ila_0/probe21 [get_nets [list {arbi_inst/gmii_rxd[0]} {arbi_inst/gmii_rxd[1]} {arbi_inst/gmii_rxd[2]} {arbi_inst/gmii_rxd[3]} {arbi_inst/gmii_rxd[4]} {arbi_inst/gmii_rxd[5]} {arbi_inst/gmii_rxd[6]} {arbi_inst/gmii_rxd[7]}]]
|
connect_debug_port u_ila_0/probe21 [get_nets [list {arbi_inst/tx_buffer_inst/tx_rdata[0]} {arbi_inst/tx_buffer_inst/tx_rdata[1]} {arbi_inst/tx_buffer_inst/tx_rdata[2]} {arbi_inst/tx_buffer_inst/tx_rdata[3]} {arbi_inst/tx_buffer_inst/tx_rdata[4]} {arbi_inst/tx_buffer_inst/tx_rdata[5]} {arbi_inst/tx_buffer_inst/tx_rdata[6]} {arbi_inst/tx_buffer_inst/tx_rdata[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe22]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe22]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe22]
|
set_property port_width 16 [get_debug_ports u_ila_0/probe22]
|
||||||
connect_debug_port u_ila_0/probe22 [get_nets [list {arbi_inst/e_txd[0]} {arbi_inst/e_txd[1]} {arbi_inst/e_txd[2]} {arbi_inst/e_txd[3]} {arbi_inst/e_txd[4]} {arbi_inst/e_txd[5]} {arbi_inst/e_txd[6]} {arbi_inst/e_txd[7]}]]
|
connect_debug_port u_ila_0/probe22 [get_nets [list {arbi_inst/tx_buffer_inst/tx_data_cnt[0]} {arbi_inst/tx_buffer_inst/tx_data_cnt[1]} {arbi_inst/tx_buffer_inst/tx_data_cnt[2]} {arbi_inst/tx_buffer_inst/tx_data_cnt[3]} {arbi_inst/tx_buffer_inst/tx_data_cnt[4]} {arbi_inst/tx_buffer_inst/tx_data_cnt[5]} {arbi_inst/tx_buffer_inst/tx_data_cnt[6]} {arbi_inst/tx_buffer_inst/tx_data_cnt[7]} {arbi_inst/tx_buffer_inst/tx_data_cnt[8]} {arbi_inst/tx_buffer_inst/tx_data_cnt[9]} {arbi_inst/tx_buffer_inst/tx_data_cnt[10]} {arbi_inst/tx_buffer_inst/tx_data_cnt[11]} {arbi_inst/tx_buffer_inst/tx_data_cnt[12]} {arbi_inst/tx_buffer_inst/tx_data_cnt[13]} {arbi_inst/tx_buffer_inst/tx_data_cnt[14]} {arbi_inst/tx_buffer_inst/tx_data_cnt[15]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe23]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe23]
|
||||||
set_property port_width 8 [get_debug_ports u_ila_0/probe23]
|
set_property port_width 8 [get_debug_ports u_ila_0/probe23]
|
||||||
connect_debug_port u_ila_0/probe23 [get_nets [list {arbi_inst/e_rxd[0]} {arbi_inst/e_rxd[1]} {arbi_inst/e_rxd[2]} {arbi_inst/e_rxd[3]} {arbi_inst/e_rxd[4]} {arbi_inst/e_rxd[5]} {arbi_inst/e_rxd[6]} {arbi_inst/e_rxd[7]}]]
|
connect_debug_port u_ila_0/probe23 [get_nets [list {arbi_inst/rx_buffer_inst/e10_100_rxd[0]} {arbi_inst/rx_buffer_inst/e10_100_rxd[1]} {arbi_inst/rx_buffer_inst/e10_100_rxd[2]} {arbi_inst/rx_buffer_inst/e10_100_rxd[3]} {arbi_inst/rx_buffer_inst/e10_100_rxd[4]} {arbi_inst/rx_buffer_inst/e10_100_rxd[5]} {arbi_inst/rx_buffer_inst/e10_100_rxd[6]} {arbi_inst/rx_buffer_inst/e10_100_rxd[7]}]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe24]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe24]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe24]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe24]
|
||||||
@ -149,11 +152,11 @@ connect_debug_port u_ila_0/probe33 [get_nets [list mac_test0/mac_top0/mac_tx0/ma
|
|||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe34]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe34]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe34]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe34]
|
||||||
connect_debug_port u_ila_0/probe34 [get_nets [list mac_test0/mac_top0/mac_rx0/udp0/ram_wr_en]]
|
connect_debug_port u_ila_0/probe34 [get_nets [list mac_test0/mac_top0/mac_tx0/ram_wr_en]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe35]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe35]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe35]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe35]
|
||||||
connect_debug_port u_ila_0/probe35 [get_nets [list mac_test0/mac_top0/mac_tx0/ram_wr_en]]
|
connect_debug_port u_ila_0/probe35 [get_nets [list mac_test0/mac_top0/mac_rx0/udp0/ram_wr_en]]
|
||||||
create_debug_port u_ila_0 probe
|
create_debug_port u_ila_0 probe
|
||||||
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe36]
|
set_property PROBE_TYPE DATA_AND_TRIGGER [get_debug_ports u_ila_0/probe36]
|
||||||
set_property port_width 1 [get_debug_ports u_ila_0/probe36]
|
set_property port_width 1 [get_debug_ports u_ila_0/probe36]
|
||||||
@ -185,4 +188,4 @@ connect_debug_port u_ila_0/probe42 [get_nets [list mac_test0/mac_top0/mac_tx0/up
|
|||||||
set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
|
set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
|
||||||
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
|
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
|
||||||
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
|
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
|
||||||
connect_debug_port dbg_hub/clk [get_nets rgmii_rxc_IBUF_BUFG]
|
connect_debug_port dbg_hub/clk [get_nets e_gtxc_OBUF_BUFG]
|
||||||
|
|||||||
@ -1,134 +1,77 @@
|
|||||||
module ethernet_test_minimal
|
`timescale 1ns / 1ps
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Module Name: ethernet_test
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////
|
||||||
|
module ethernet_test
|
||||||
(
|
(
|
||||||
input sys_clk_p, //system clock positive
|
input sys_clk_p, // system clock positive
|
||||||
input sys_clk_n, //system clock negative
|
input sys_clk_n, // system clock negative
|
||||||
input rst_n, //reset ,low active
|
input rst_n, // reset ,low active
|
||||||
output [3:0] led, //display network rate status
|
output [3:0] led, // display network rate status
|
||||||
output e_reset, //phy reset
|
output e_reset, // phy reset
|
||||||
output e_mdc, //phy emdio clock
|
output e_mdc, // phy emdio clock
|
||||||
inout e_mdio, //phy emdio data
|
inout e_mdio, // phy emdio data
|
||||||
output[3:0] rgmii_txd, //phy data send
|
input e_rxc, // 125Mhz ethernet gmii rx clock
|
||||||
output rgmii_txctl, //phy data send control
|
input e_rxdv, // GMII recieving data valid
|
||||||
output rgmii_txc, //Clock for sending data
|
input e_rxer, // GMII recieving data error
|
||||||
input[3:0] rgmii_rxd, //recieve data
|
input [7:0] e_rxd, // GMII recieving data
|
||||||
input rgmii_rxctl, //Control signal for receiving data
|
|
||||||
input rgmii_rxc //Clock for recieving data
|
input e_txc, // 25Mhz ethernet mii tx clock
|
||||||
|
output e_gtxc, // 125Mhz ethernet gmii tx clock
|
||||||
|
output e_txen, // GMII sending data valid
|
||||||
|
output e_txer, // GMII sending data error
|
||||||
|
output[7:0] e_txd // GMII sending data
|
||||||
);
|
);
|
||||||
wire [ 7:0] gmii_txd; //gmii data
|
wire sys_clk; //single end clock
|
||||||
wire gmii_tx_en; //gmii send enable
|
wire [31:0] pack_total_len ; //package length
|
||||||
wire gmii_tx_er;
|
wire [1:0] speed ; //net speed select
|
||||||
wire gmii_tx_clk; //gmii send clock
|
wire link ; //link status
|
||||||
wire gmii_crs;
|
wire erxdv ;
|
||||||
wire gmii_col;
|
wire [7:0] erxd ;
|
||||||
wire [ 7:0] gmii_rxd; //gmii recieving data
|
wire e_tx_en ;
|
||||||
wire gmii_rx_dv; //gmii recieving data valid
|
wire [7:0] etxd ;
|
||||||
wire gmii_rx_er;
|
wire e_rst_n ;
|
||||||
wire gmii_rx_clk; //gmii recieve clock
|
assign e_gtxc = e_rxc;
|
||||||
wire [ 1:0] speed_selection; // 1x gigabit, 01 100Mbps, 00 10mbps
|
assign e_reset = 1'b1;
|
||||||
wire duplex_mode; // 1 full, 0 half
|
|
||||||
wire rgmii_rxcpll;
|
|
||||||
|
|
||||||
wire [31:0] pack_total_len ; //package length
|
// generate single end clock
|
||||||
|
|
||||||
wire [1:0] speed ; //net speed select
|
|
||||||
wire link ; //link status
|
|
||||||
wire e_rx_dv ;
|
|
||||||
wire [7:0] e_rxd ;
|
|
||||||
wire e_tx_en ;
|
|
||||||
wire [7:0] e_txd ;
|
|
||||||
wire e_rst_n ;
|
|
||||||
wire sys_clk ;
|
|
||||||
|
|
||||||
|
|
||||||
assign duplex_mode = 1'b1;
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
generate single end clock
|
|
||||||
**************************************************************************/
|
|
||||||
IBUFDS sys_clk_ibufgds
|
IBUFDS sys_clk_ibufgds
|
||||||
(
|
(
|
||||||
.O (sys_clk ),
|
.O (sys_clk ),
|
||||||
.I (sys_clk_p ),
|
.I (sys_clk_p ),
|
||||||
.IB (sys_clk_n )
|
.IB (sys_clk_n )
|
||||||
);
|
|
||||||
|
|
||||||
(* IODELAY_GROUP = "rgmii_idelay_group" *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL
|
|
||||||
|
|
||||||
IDELAYCTRL IDELAYCTRL_inst (
|
|
||||||
.RDY(), // 1-bit output: Ready output
|
|
||||||
.REFCLK(sys_clk), // 1-bit input: Reference clock input
|
|
||||||
.RST(1'b0) // 1-bit input: Active high reset input
|
|
||||||
);
|
|
||||||
/*************************************************************************
|
|
||||||
GMII and RGMII data conversion
|
|
||||||
****************************************************************************/
|
|
||||||
util_gmii_to_rgmii util_gmii_to_rgmii_m0
|
|
||||||
(
|
|
||||||
.reset (1'b0 ),
|
|
||||||
.rgmii_td (rgmii_txd ),
|
|
||||||
.rgmii_tx_ctl (rgmii_txctl ),
|
|
||||||
.rgmii_txc (rgmii_txc ),
|
|
||||||
.rgmii_rd (rgmii_rxd ),
|
|
||||||
.rgmii_rx_ctl (rgmii_rxctl ),
|
|
||||||
.gmii_rx_clk (gmii_rx_clk ),
|
|
||||||
.gmii_txd (e_txd ),
|
|
||||||
.gmii_tx_en (e_tx_en ),
|
|
||||||
.gmii_tx_er (1'b0 ),
|
|
||||||
.gmii_tx_clk (gmii_tx_clk ),
|
|
||||||
.gmii_crs (gmii_crs ),
|
|
||||||
.gmii_col (gmii_col ),
|
|
||||||
.gmii_rxd (gmii_rxd ),
|
|
||||||
.rgmii_rxc (rgmii_rxc ),//add
|
|
||||||
.gmii_rx_dv (gmii_rx_dv ),
|
|
||||||
.gmii_rx_er (gmii_rx_er ),
|
|
||||||
.speed_selection (2'b10 ),
|
|
||||||
.duplex_mode (duplex_mode )
|
|
||||||
);
|
|
||||||
/*************************************************************************
|
|
||||||
Different conversion of GMII data according to different network speeds
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
gmii_arbi arbi_inst
|
|
||||||
(
|
|
||||||
.clk (gmii_tx_clk ),
|
|
||||||
.rst_n (rst_n ),
|
|
||||||
.speed (2'b10 ),
|
|
||||||
.link (1'b1 ),
|
|
||||||
.pack_total_len (pack_total_len ),
|
|
||||||
.e_rst_n (e_rst_n ),
|
|
||||||
.gmii_rx_dv (gmii_rx_dv ),
|
|
||||||
.gmii_rxd (gmii_rxd ),
|
|
||||||
.gmii_tx_en (gmii_tx_en ),
|
|
||||||
.gmii_txd (gmii_txd ),
|
|
||||||
.e_rx_dv (e_rx_dv ),
|
|
||||||
.e_rxd (e_rxd ),
|
|
||||||
.e_tx_en (e_tx_en ),
|
|
||||||
.e_txd (e_txd )
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Mac layer protocol test
|
||||||
/*************************************************************************
|
|
||||||
Mac layer protocol test
|
|
||||||
****************************************************************************/
|
|
||||||
mac_test mac_test0
|
mac_test mac_test0
|
||||||
(
|
(
|
||||||
.gmii_tx_clk (gmii_tx_clk ),
|
.gmii_tx_clk (e_gtxc ),
|
||||||
.gmii_rx_clk (gmii_rx_clk ) ,
|
.gmii_rx_clk (e_rxc ) ,
|
||||||
.rst_n (e_rst_n ),
|
.rst_n (e_rst_n ),
|
||||||
.pack_total_len (pack_total_len ),
|
.pack_total_len (pack_total_len ),
|
||||||
.gmii_rx_dv (e_rx_dv ),
|
.gmii_rx_dv (erxdv ),
|
||||||
.gmii_rxd (e_rxd ),
|
.gmii_rxd (erxd ),
|
||||||
.gmii_tx_en (gmii_tx_en ),
|
.gmii_tx_en (e_tx_en ),
|
||||||
.gmii_txd (gmii_txd )
|
.gmii_txd (etxd )
|
||||||
);
|
);
|
||||||
/*************************************************************************
|
|
||||||
Generate PHY reset signal
|
// Different conversion of GMII data according to different network speeds
|
||||||
****************************************************************************/
|
gmii_arbi arbi_inst
|
||||||
reset reset_m0
|
|
||||||
(
|
(
|
||||||
.clk (sys_clk ),
|
.clk (e_gtxc ),
|
||||||
.key1 (rst_n ),
|
.rst_n (rst_n ),
|
||||||
.rst_n (e_reset )
|
.speed (2'b10 ),
|
||||||
|
.link (1'b1 ),
|
||||||
|
.pack_total_len (pack_total_len ),
|
||||||
|
.e_rst_n (e_rst_n ),
|
||||||
|
.gmii_rx_dv (e_rxdv ),
|
||||||
|
.gmii_rxd (e_rxd ),
|
||||||
|
.gmii_tx_en (e_tx_en ),
|
||||||
|
.gmii_txd (etxd ),
|
||||||
|
.e_rx_dv (erxdv ),
|
||||||
|
.e_rxd (erxd ),
|
||||||
|
.e_tx_en (e_txen ),
|
||||||
|
.e_txd (e_txd )
|
||||||
);
|
);
|
||||||
endmodule
|
endmodule
|
||||||
|
|||||||
91
rtl/generator/README.md
Normal file
91
rtl/generator/README.md
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
# Генератор
|
||||||
|
|
||||||
|
Модуль выполняет задачу формирования последовательности импульсов заданной амплитуды, длительности и периода.
|
||||||
|
Дополнительно реализован механизм синхронизации с модулем сэмплера через сигналы `request` и `done`, позволяющий запускать сбор данных для каждого импульса и ожидать подтверждения завершения выборки перед переходом к следующему импульсу.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Список параметров
|
||||||
|
|
||||||
|
### DATA_WIDTH
|
||||||
|
Ширина выходных данных генератора.
|
||||||
|
|
||||||
|
### ZERO_LEVEL
|
||||||
|
Уровень сигнала в состоянии отсутствия импульса (базовый уровень сигнала).
|
||||||
|
|
||||||
|
Типовые значения:
|
||||||
|
|
||||||
|
- `8192` — середина диапазона ЦАП
|
||||||
|
- `0` — нулевой уровень
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Список входных портов
|
||||||
|
|
||||||
|
### clk_dac
|
||||||
|
Сигнал тактирования модуля.
|
||||||
|
|
||||||
|
### rst
|
||||||
|
Сброс модуля и остановка генерации.
|
||||||
|
|
||||||
|
### start
|
||||||
|
Сигнал запуска последовательности импульсов.
|
||||||
|
|
||||||
|
При его активации модуль фиксирует все входные параметры и начинает генерацию.
|
||||||
|
|
||||||
|
Повторный запуск во время активной генерации блокируется с помощью внутреннего сигнала `enable`.
|
||||||
|
|
||||||
|
### [31:0] pulse_width
|
||||||
|
Длительность активной части импульса (в тактах).
|
||||||
|
|
||||||
|
### [31:0] pulse_period
|
||||||
|
Полный период импульса (в тактах).
|
||||||
|
|
||||||
|
### [DATA_WIDTH-1:0] pulse_height
|
||||||
|
Амплитуда импульса.
|
||||||
|
|
||||||
|
### [15:0] pulse_num
|
||||||
|
Количество импульсов, которое необходимо сгенерировать.
|
||||||
|
|
||||||
|
### request
|
||||||
|
Сигнал запроса на синхронизацию от сэмплера для текущего импульса.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Список выходных портов
|
||||||
|
|
||||||
|
### dac_wrt
|
||||||
|
Выходной сигнал разрешения записи сигнала
|
||||||
|
|
||||||
|
### [DATA_WIDTH-1:0] dac_out
|
||||||
|
Выходное значение амплитуды сигнала.
|
||||||
|
|
||||||
|
Во время активной части импульса равно `pulse_height`, вне импульса — `ZERO_LEVEL`.
|
||||||
|
|
||||||
|
### done
|
||||||
|
Сигнал запроса на запуск синхронизации с сэмплером для текущего импульса.
|
||||||
|
|
||||||
|
Поднимается в начале каждого нового импульса и снимается после получения `request`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Логика работы
|
||||||
|
|
||||||
|
После прихода сигнала `start` модуль:
|
||||||
|
|
||||||
|
- фиксирует входные параметры генерации
|
||||||
|
- поднимает `enable = 1`
|
||||||
|
- выполняет `pulse_num` циклов работы
|
||||||
|
- - типичный цикл состоит в ожидании синхронизации (`synced`), после чего запуск генерации импульса
|
||||||
|
|
||||||
|
Синхронизация представляет из себя простое рукопожатие с внешним модулем, имеющим сигналы `request`/`done` работающими в соответствии с этими сигналами генератора. Один из модулей, входит в ожидание и ставит на свой done активный уровень, после чего ждет, пока второй, запаздывающий модуль не войдет в свой режим ожидания, и не выставит для своего done активный уровень. Для каждого из модулей, на следующий такт после выставления активного уровня, производится проверка своего request. Так, при получении активного request (иными словами активного done от внешнего модуля), модуль незамедлительно опускает уровень своего done и начинает работать. Done подымается до активного уровня хотя-бы на один такт работы соответствующего модуля.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Симуляция
|
||||||
|
Тесты запускаются автоматически через make.
|
||||||
|
```
|
||||||
|
cd tests
|
||||||
|
make sim
|
||||||
|
```
|
||||||
|
При успешном завершении теста высвечивается "ALL PASSED".
|
||||||
@ -0,0 +1,87 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module generator
|
||||||
|
#(
|
||||||
|
parameter DATA_WIDTH = 14,
|
||||||
|
parameter ZERO_LEVEL = 8192 // 8192 or 0
|
||||||
|
)
|
||||||
|
(
|
||||||
|
input clk_dac,
|
||||||
|
input rst,
|
||||||
|
input start,
|
||||||
|
input [31:0] pulse_width,
|
||||||
|
input [31:0] pulse_period,
|
||||||
|
input [DATA_WIDTH-1:0] pulse_height,
|
||||||
|
input [15:0] pulse_num,
|
||||||
|
input request,
|
||||||
|
|
||||||
|
output logic [DATA_WIDTH-1:0] dac_out,
|
||||||
|
output logic done
|
||||||
|
);
|
||||||
|
logic [DATA_WIDTH-1:0] pulse_height_reg;
|
||||||
|
logic [31:0] pulse_width_reg, pulse_period_reg;
|
||||||
|
logic [15:0] pulse_num_reg;
|
||||||
|
|
||||||
|
logic [15:0] cnt_pulse_num;
|
||||||
|
logic [31:0] cnt_pulse_period;
|
||||||
|
|
||||||
|
logic enable, synced;
|
||||||
|
|
||||||
|
always @(posedge clk_dac) begin
|
||||||
|
if (rst) begin
|
||||||
|
pulse_height_reg <= ZERO_LEVEL;
|
||||||
|
pulse_width_reg <= 0;
|
||||||
|
pulse_period_reg <= 0;
|
||||||
|
pulse_num_reg <= 0;
|
||||||
|
cnt_pulse_num <= 0;
|
||||||
|
cnt_pulse_period <= 0;
|
||||||
|
dac_out <= ZERO_LEVEL;
|
||||||
|
done <= 0;
|
||||||
|
enable <= 0;
|
||||||
|
synced <= 0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
// wait start for updating registers
|
||||||
|
if (start & !enable) begin
|
||||||
|
enable <= 1;
|
||||||
|
pulse_width_reg <= pulse_width;
|
||||||
|
pulse_period_reg <= pulse_period;
|
||||||
|
pulse_num_reg <= pulse_num;
|
||||||
|
pulse_height_reg <= pulse_height;
|
||||||
|
end
|
||||||
|
// main work cycle
|
||||||
|
if (enable) begin
|
||||||
|
if (cnt_pulse_num != pulse_num_reg) begin
|
||||||
|
// wait for synchronization with sampler
|
||||||
|
if (!synced) begin
|
||||||
|
if (request & done) begin
|
||||||
|
synced <= 1;
|
||||||
|
done <= 0;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
done <= 1;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if (cnt_pulse_period != pulse_period_reg) begin
|
||||||
|
if (cnt_pulse_period < pulse_width_reg)
|
||||||
|
dac_out <= pulse_height_reg;
|
||||||
|
else
|
||||||
|
dac_out <= ZERO_LEVEL;
|
||||||
|
cnt_pulse_period++;
|
||||||
|
end
|
||||||
|
else if (cnt_pulse_period == pulse_period_reg) begin
|
||||||
|
cnt_pulse_num++;
|
||||||
|
cnt_pulse_period <= 0;
|
||||||
|
synced <= 0;
|
||||||
|
dac_out <= ZERO_LEVEL;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else if (cnt_pulse_num == pulse_num_reg) begin
|
||||||
|
cnt_pulse_num <= 0;
|
||||||
|
enable <= 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endmodule
|
||||||
|
|||||||
360
rtl/generator/tests/generator_tb.sv
Normal file
360
rtl/generator/tests/generator_tb.sv
Normal file
@ -0,0 +1,360 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module generator_tb;
|
||||||
|
// === Параметры ===
|
||||||
|
localparam DATA_WIDTH = 14;
|
||||||
|
localparam LOGIC_ZERO_LEVEL = 0; // DAC -5V for logic zero
|
||||||
|
localparam VOLTAGE_ZERO_LEVEL = 2**(DATA_WIDTH-1); // DAC 0V for logic zero
|
||||||
|
localparam CLK_PERIOD = 8;
|
||||||
|
parameter string ZERO_LEVEL = "logic"; // "logic" VS "true"
|
||||||
|
|
||||||
|
// === Сигналы ===
|
||||||
|
// Системные сигналы
|
||||||
|
logic clk;
|
||||||
|
logic rst;
|
||||||
|
logic start;
|
||||||
|
// Входные сигналы
|
||||||
|
logic [31:0] pulse_width; // config reg
|
||||||
|
logic [31:0] pulse_period; // config reg
|
||||||
|
logic [DATA_WIDTH-1:0] pulse_height; // config reg
|
||||||
|
logic [15:0] pulse_num; // config reg
|
||||||
|
logic sampler_done; // sampler request for synchronization
|
||||||
|
// Выходные сигналы
|
||||||
|
wire [DATA_WIDTH-1:0] dac_out; // DAC input logic signal
|
||||||
|
wire generator_done; // generator request for synchronization
|
||||||
|
|
||||||
|
// === Переменные ===
|
||||||
|
int current_zero_level;
|
||||||
|
initial begin
|
||||||
|
if (ZERO_LEVEL == "true")
|
||||||
|
current_zero_level = VOLTAGE_ZERO_LEVEL;
|
||||||
|
else
|
||||||
|
current_zero_level = LOGIC_ZERO_LEVEL;
|
||||||
|
end
|
||||||
|
|
||||||
|
// DUT
|
||||||
|
generate
|
||||||
|
if (ZERO_LEVEL == "true") begin : gen_dut_true
|
||||||
|
generator #(
|
||||||
|
.DATA_WIDTH(DATA_WIDTH),
|
||||||
|
.ZERO_LEVEL(VOLTAGE_ZERO_LEVEL)
|
||||||
|
) dut (
|
||||||
|
.clk_dac(clk),
|
||||||
|
.rst(rst),
|
||||||
|
.start(start),
|
||||||
|
.pulse_width(pulse_width),
|
||||||
|
.pulse_period(pulse_period),
|
||||||
|
.pulse_height(pulse_height),
|
||||||
|
.pulse_num(pulse_num),
|
||||||
|
.dac_out(dac_out),
|
||||||
|
.done(generator_done),
|
||||||
|
.request(sampler_done)
|
||||||
|
);
|
||||||
|
initial $display("[TB] Generator compiled. ZERO_LEVEL: TRUE");
|
||||||
|
end
|
||||||
|
else if (ZERO_LEVEL == "logic") begin : gen_dut_logic
|
||||||
|
generator #(
|
||||||
|
.DATA_WIDTH(DATA_WIDTH),
|
||||||
|
.ZERO_LEVEL(LOGIC_ZERO_LEVEL)
|
||||||
|
) dut (
|
||||||
|
.clk_dac(clk),
|
||||||
|
.rst(rst),
|
||||||
|
.start(start),
|
||||||
|
.pulse_width(pulse_width),
|
||||||
|
.pulse_period(pulse_period),
|
||||||
|
.pulse_height(pulse_height),
|
||||||
|
.pulse_num(pulse_num),
|
||||||
|
.dac_out(dac_out),
|
||||||
|
.done(generator_done),
|
||||||
|
.request(sampler_done)
|
||||||
|
);
|
||||||
|
initial $display("[TB] Generator compiled. ZERO_LEVEL: LOGIC");
|
||||||
|
end
|
||||||
|
else begin : gen_dut_error
|
||||||
|
// Защита от дурака
|
||||||
|
initial begin
|
||||||
|
$display("[ERROR] Unknown value ZERO_LEVEL: %s", ZERO_LEVEL);
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
// Тактовые сигналы
|
||||||
|
initial begin
|
||||||
|
clk = 0;
|
||||||
|
forever #(CLK_PERIOD/2) clk = ~clk;
|
||||||
|
end
|
||||||
|
|
||||||
|
// === Таски для тестипрования ===
|
||||||
|
// Таска синхронизации, одно рукопожатие
|
||||||
|
task automatic synchronize(
|
||||||
|
input bit sampler_first, // 1 - выставить sampler_done ДО генератора, 0 - ПОСЛЕ
|
||||||
|
input int delay_before_ack, // Если sampler_first=0: задержка ПОСЛЕ gen_done. Если 1: задержка от НАЧАЛА цикла.
|
||||||
|
input int ack_duration // сколько тактов удерживать sampler_done после встречи сигналов
|
||||||
|
);
|
||||||
|
if (sampler_first) begin
|
||||||
|
// --- сэмплер готов до генератора ---
|
||||||
|
repeat(delay_before_ack) @(posedge clk);
|
||||||
|
sampler_done <= 1;
|
||||||
|
wait(generator_done == 1);
|
||||||
|
repeat(ack_duration) @(posedge clk);
|
||||||
|
sampler_done <= 0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
// --- генератора готов до сэмплер ---
|
||||||
|
wait(generator_done == 1);
|
||||||
|
repeat(delay_before_ack) @(posedge clk);
|
||||||
|
sampler_done <= 1;
|
||||||
|
repeat(ack_duration) @(posedge clk);
|
||||||
|
sampler_done <= 0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Таска сброса DUT
|
||||||
|
task automatic reset_dut(
|
||||||
|
input int rst_duration // сколько тактов держать сброс
|
||||||
|
);
|
||||||
|
rst <= 1;
|
||||||
|
repeat(rst_duration) @(posedge clk);
|
||||||
|
rst <= 0;
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Таска запуска DUT
|
||||||
|
task automatic start_dut(
|
||||||
|
input int start_duration // сколько тактов держать импульс
|
||||||
|
);
|
||||||
|
start <= 1;
|
||||||
|
repeat(start_duration) @(posedge clk);
|
||||||
|
start <= 0;
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Таска конфигурации DUT
|
||||||
|
task automatic set_config(
|
||||||
|
input logic [31:0] w, // ширина импульса
|
||||||
|
input logic [31:0] p, // период импульса
|
||||||
|
input logic [15:0] n, // количество импульсов
|
||||||
|
input logic [DATA_WIDTH-1:0] h // высота импульса
|
||||||
|
);
|
||||||
|
// Задаем конфигурационные регистры
|
||||||
|
@(posedge clk);
|
||||||
|
pulse_width <= w;
|
||||||
|
pulse_period <= p;
|
||||||
|
pulse_num <= n;
|
||||||
|
pulse_height <= h;
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// Таска проверки устойчивости к долгим управляющим импульсам
|
||||||
|
task automatic check_impulses;
|
||||||
|
// Локальные переменные для хранения случайных параметров
|
||||||
|
int rand_start_duration;
|
||||||
|
int rand_delay;
|
||||||
|
int rand_ack;
|
||||||
|
bit rand_first;
|
||||||
|
int total_impulse_cycles = 0;
|
||||||
|
|
||||||
|
int pulse_w = 11;
|
||||||
|
int pulse_p = 31;
|
||||||
|
int pulse_n = 5;
|
||||||
|
int pulse_h = 1024;
|
||||||
|
|
||||||
|
$display("[TB] -check_impulses- Check system stability under random latencies");
|
||||||
|
|
||||||
|
// Установка конфигурации
|
||||||
|
set_config(
|
||||||
|
.w(pulse_w),
|
||||||
|
.p(pulse_p),
|
||||||
|
.n(pulse_n),
|
||||||
|
.h(pulse_h)
|
||||||
|
);
|
||||||
|
|
||||||
|
reset_dut(5);
|
||||||
|
repeat(2) @(posedge clk);
|
||||||
|
|
||||||
|
// Старт норме 1 такт. Сделаем случайным от 5 до 25 тактов.
|
||||||
|
rand_start_duration = $urandom_range(5, 25);
|
||||||
|
$display("[TB] Long start: %0d clocks", rand_start_duration);
|
||||||
|
|
||||||
|
// Фоновый процесс подсчета тактов импульса
|
||||||
|
fork
|
||||||
|
begin : counter_proc
|
||||||
|
forever begin
|
||||||
|
@(negedge clk); // 180 deg. phase shift for "DAC strobing signal"
|
||||||
|
if (dac_out == pulse_h) begin
|
||||||
|
total_impulse_cycles++;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
join_none
|
||||||
|
|
||||||
|
// Параллельный запуск длинного старта и обработки синхронизации
|
||||||
|
fork
|
||||||
|
// Поток 1: Удерживаем старт аномально долго
|
||||||
|
begin
|
||||||
|
start_dut(rand_start_duration);
|
||||||
|
end
|
||||||
|
// Поток 2: Обслуживаем n=4 циклов синхронизации со случайными задержками
|
||||||
|
begin
|
||||||
|
repeat(pulse_n) begin
|
||||||
|
// Рандомизируем параметры для каждого из 4-х рукопожатий
|
||||||
|
rand_first = $urandom; // Случайно: Самплер первый (1) или Генератор первый (0)
|
||||||
|
rand_delay = $urandom_range(1, 8); // Случайная задержка ожидания (1..8 тактов)
|
||||||
|
rand_ack = $urandom_range(5, 10); // Аномально долгий удерживаемый импульс sampler_done (10..30 тактов)
|
||||||
|
|
||||||
|
synchronize(
|
||||||
|
.sampler_first(rand_first),
|
||||||
|
.delay_before_ack(rand_delay),
|
||||||
|
.ack_duration(rand_ack)
|
||||||
|
);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
join
|
||||||
|
repeat(pulse_p+5) @(posedge clk);
|
||||||
|
disable counter_proc;
|
||||||
|
// Ожидание завершения переходных процессов
|
||||||
|
repeat(10) @(posedge clk);
|
||||||
|
if (total_impulse_cycles == pulse_w*pulse_n)
|
||||||
|
$display("[TB] -check_impulses- Pulse generation CORRECT");
|
||||||
|
else begin
|
||||||
|
$display("[ERROR] -check_impulses- Pulse generation INCORRECT. Total number of pulses: %d, must be: %d", total_impulse_cycles, pulse_w*pulse_n);
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
$display("[TB] -check_impulses- Done");
|
||||||
|
endtask
|
||||||
|
|
||||||
|
task automatic run_test_case(
|
||||||
|
input int pulse_w,
|
||||||
|
input int pulse_p,
|
||||||
|
input int pulse_n,
|
||||||
|
input int pulse_h,
|
||||||
|
input bit skip_reset, // skip reset sequence on demand
|
||||||
|
input bit count_level // count ticks of amplitude == pulse_h or amplitude != pulse_h
|
||||||
|
);
|
||||||
|
int total_impulse_cycles = 0;
|
||||||
|
|
||||||
|
if (!skip_reset) begin
|
||||||
|
reset_dut(1);
|
||||||
|
@(posedge clk);
|
||||||
|
end
|
||||||
|
|
||||||
|
set_config(
|
||||||
|
.w(pulse_w),
|
||||||
|
.p(pulse_p),
|
||||||
|
.n(pulse_n),
|
||||||
|
.h(pulse_h)
|
||||||
|
);
|
||||||
|
@(posedge clk);
|
||||||
|
|
||||||
|
start_dut(1);
|
||||||
|
|
||||||
|
// Фоновый процесс подсчета тактов импульса
|
||||||
|
fork
|
||||||
|
begin : counter_proc
|
||||||
|
forever begin
|
||||||
|
@(negedge clk); // 180 deg. phase shift for "DAC strobing signal"
|
||||||
|
if (count_level) begin
|
||||||
|
if (dac_out == pulse_h) begin
|
||||||
|
total_impulse_cycles++;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if (dac_out != current_zero_level) begin
|
||||||
|
total_impulse_cycles++;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
join_none
|
||||||
|
|
||||||
|
repeat(pulse_n) begin
|
||||||
|
synchronize(
|
||||||
|
.sampler_first(0),
|
||||||
|
.delay_before_ack(1),
|
||||||
|
.ack_duration(2)
|
||||||
|
);
|
||||||
|
end
|
||||||
|
repeat(pulse_p+5) @(posedge clk);
|
||||||
|
disable counter_proc;
|
||||||
|
repeat(10) @(posedge clk);
|
||||||
|
|
||||||
|
if (count_level) begin
|
||||||
|
if (total_impulse_cycles == pulse_w*pulse_n)
|
||||||
|
$display("[TB] -run_test_case- Pulse generation CORRECT");
|
||||||
|
else begin
|
||||||
|
$display("[ERROR] -run_test_case- Pulse generation INCORRECT. Total number of pulses: %d, must be: %d", total_impulse_cycles, pulse_w*pulse_n);
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
if (total_impulse_cycles == 0)
|
||||||
|
$display("[TB] -run_test_case- Pulse generation CORRECT");
|
||||||
|
else begin
|
||||||
|
$display("[ERROR] -run_test_case- Pulse generation INCORRECT. Total number of pulses: %d, must be: %d", total_impulse_cycles, 0);
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// --- ОСНОВНОЙ ПРОЦЕСС ТЕСТИРОВАНИЯ ---
|
||||||
|
initial begin
|
||||||
|
$display("[TB] Tests start");
|
||||||
|
|
||||||
|
// Инициализация
|
||||||
|
rst = 1;
|
||||||
|
start = 0;
|
||||||
|
pulse_width = 0;
|
||||||
|
pulse_period = 0;
|
||||||
|
pulse_height = 0;
|
||||||
|
pulse_num = 0;
|
||||||
|
sampler_done = 0;
|
||||||
|
|
||||||
|
$display("[TB] Test 1. Random latency for control signals");
|
||||||
|
check_impulses();
|
||||||
|
$display("[TB] Test 1 complete");
|
||||||
|
|
||||||
|
$display("[TB] Test 2. Random configs");
|
||||||
|
for (int i = 0; i < 25; i++) begin
|
||||||
|
int r_w, r_p, r_n, r_h;
|
||||||
|
bit r_skip;
|
||||||
|
|
||||||
|
// Генерируем параметры
|
||||||
|
r_p = $urandom_range(5, 50); // Период от 5 до 50
|
||||||
|
r_w = $urandom_range(0, r_p); // Ширина не больше периода
|
||||||
|
r_n = $urandom_range(1, 10); // Количество импульсов
|
||||||
|
r_h = $urandom_range(1, 2**DATA_WIDTH-1); // Высота (для 14 бит)
|
||||||
|
r_skip = $urandom_range(0, 1); // Случайный сброс (0 - сброс, 1 - пропуск)
|
||||||
|
|
||||||
|
// Защита от "нулевого" импульса. Невозможно проверить длительность.
|
||||||
|
if (r_h == current_zero_level) begin
|
||||||
|
r_h += $urandom_range(1, 10);
|
||||||
|
end
|
||||||
|
|
||||||
|
$display("[TB] --- Test #%0d (Config: W=%0d, P=%0d, N=%0d, H=%0d, SkipReset=%0b) ---",
|
||||||
|
i+1, r_w, r_p, r_n, r_h, r_skip);
|
||||||
|
|
||||||
|
run_test_case(
|
||||||
|
.pulse_w(r_w),
|
||||||
|
.pulse_p(r_p),
|
||||||
|
.pulse_n(r_n),
|
||||||
|
.pulse_h(r_h),
|
||||||
|
.skip_reset(r_skip),
|
||||||
|
.count_level(1)
|
||||||
|
);
|
||||||
|
end
|
||||||
|
$display("[TB] Test 2 complete");
|
||||||
|
|
||||||
|
$display("[TB] Test 3. Zero level of pulse height");
|
||||||
|
run_test_case(
|
||||||
|
.pulse_w(77),
|
||||||
|
.pulse_p(131),
|
||||||
|
.pulse_n(13),
|
||||||
|
.pulse_h(current_zero_level),
|
||||||
|
.skip_reset(0),
|
||||||
|
.count_level(0)
|
||||||
|
);
|
||||||
|
$display("[TB] Test 3 complete");
|
||||||
|
|
||||||
|
$display("[TB] ALL PASSED");
|
||||||
|
$finish;
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
144
rtl/sampler/README.md
Normal file
144
rtl/sampler/README.md
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
# Сэмплер
|
||||||
|
|
||||||
|
Модуль выполняет задачу сбора данных с выхода АЦП, их обработки, упаковки и передачи дальше с помощью AXI Stream интерфейса.
|
||||||
|
Дополнительно реализован механизм синхронизации с внешним генератором через сигналы `request` и `done`, позволяющий запускать сбор строго по запросу и подтверждать завершение выборки.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Список параметров
|
||||||
|
|
||||||
|
DATA_WIDTH
|
||||||
|
Ширина входных данных, получаемых с АЦП.
|
||||||
|
|
||||||
|
PACK_FACTOR
|
||||||
|
Количество отсчетов, собираемых в один выходной пакет.
|
||||||
|
|
||||||
|
PROCESS_MODE
|
||||||
|
Режим интерпретации входного кода:
|
||||||
|
|
||||||
|
- `0` — прямой код
|
||||||
|
- `1` — дополнительный код
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Список входных портов
|
||||||
|
|
||||||
|
clk_in
|
||||||
|
Сигнал тактирования выходного интерфейса.
|
||||||
|
|
||||||
|
rst
|
||||||
|
Сброс модуля и остановка работы.
|
||||||
|
|
||||||
|
[DATA_WIDTH-1:0] data_in
|
||||||
|
Входной сигнал с АЦП.
|
||||||
|
|
||||||
|
out_of_range
|
||||||
|
Флаг выхода значений данных за допустимый диапазон:
|
||||||
|
|
||||||
|
- `0` — данные валидны
|
||||||
|
- `1` — данные невалидны и игнорируются
|
||||||
|
|
||||||
|
[31:0] smp_num
|
||||||
|
Количество валидных отсчетов, которое необходимо собрать после получения запроса на выборку.
|
||||||
|
|
||||||
|
request
|
||||||
|
Сигнал запроса на синхронизацию от генератора для текущего импульса.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Список выходных портов
|
||||||
|
|
||||||
|
[DATA_WIDTH*PACK_FACTOR-1:0] m_axis_tdata
|
||||||
|
Урезанный AXI Stream формат, выходные данные.
|
||||||
|
Ширина шины определяется как произведение битности данных и фактора упаковки.
|
||||||
|
|
||||||
|
m_axis_tvalid
|
||||||
|
Урезанный AXI Stream формат, сигнал валидности выходных данных.
|
||||||
|
Формируется при готовности очередного пакета.
|
||||||
|
|
||||||
|
done
|
||||||
|
Сигнал запроса на запуск синхронизации с генератором для текущего импульса.
|
||||||
|
|
||||||
|
Поднимается в начале каждого нового импульса и снимается после получения `request`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Логика работы
|
||||||
|
|
||||||
|
На каждом такте принимаются:
|
||||||
|
|
||||||
|
- `data_in` — значение АЦП
|
||||||
|
- `out_of_range` — флаг допустимости значения
|
||||||
|
|
||||||
|
Если `out_of_range = 1`, данные считаются невалидными, игнорируются и не попадают во внутренний буфер.
|
||||||
|
|
||||||
|
Если `out_of_range = 0`, данные считаются корректными и используются для дальнейшей обработки.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Преобразование данных
|
||||||
|
|
||||||
|
Если `PROCESS_MODE = 1`, входные данные интерпретируются как дополнительный код и преобразуются перед упаковкой.
|
||||||
|
|
||||||
|
Если `PROCESS_MODE = 0`, данные передаются без преобразования (прямой код).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Запуск выборки
|
||||||
|
|
||||||
|
Сбор данных начинается только после прихода сигнала `request`.
|
||||||
|
|
||||||
|
При этом:
|
||||||
|
|
||||||
|
- фиксируется значение `smp_num`
|
||||||
|
- внутренний счетчик собранных отсчетов обнуляется
|
||||||
|
- модуль переходит в активное состояние (`enable = 1`)
|
||||||
|
|
||||||
|
Пока `enable = 1`, модуль принимает только валидные отсчеты.
|
||||||
|
|
||||||
|
Синхронизация представляет из себя простое рукопожатие с внешним модулем, имеющим сигналы `request`/`done` работающими в соответствии с этими сигналами сэмплера. Один из модулей, входит в ожидание и ставит на свой done активный уровень, после чего ждет, пока второй, запаздывающий модуль не войдет в свой режим ожидания, и не выставит для своего done активный уровень. Для каждого из модулей, на следующий такт после выставления активного уровня, производится проверка своего request. Так, при получении активного request (иными словами активного done от внешнего модуля), модуль незамедлительно опускает уровень своего done и начинает работать. Done подымается до активного уровня хотя-бы на один такт работы соответствующего модуля.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Упаковка данных
|
||||||
|
|
||||||
|
Внутренний буфер заполняется до количества данных, равного `PACK_FACTOR`.
|
||||||
|
|
||||||
|
#### Если `PACK_FACTOR = 1`
|
||||||
|
|
||||||
|
Каждый валидный отсчет сразу формирует выходной пакет:
|
||||||
|
|
||||||
|
- данные передаются в `m_axis_tdata`
|
||||||
|
- формируется импульс `m_axis_tvalid`
|
||||||
|
|
||||||
|
#### Если `PACK_FACTOR > 1`
|
||||||
|
|
||||||
|
Данные последовательно накапливаются во внутреннем сдвиговом буфере.
|
||||||
|
|
||||||
|
Когда буфер полностью заполнен:
|
||||||
|
|
||||||
|
- формируется пакет упакованных данных
|
||||||
|
- поднимается `m_axis_tvalid`
|
||||||
|
|
||||||
|
После этого начинается сбор следующего пакета.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Завершение выборки
|
||||||
|
|
||||||
|
Когда количество собранных валидных отсчетов достигает значения `smp_num`:
|
||||||
|
|
||||||
|
- внутренние счетчики сбрасываются
|
||||||
|
- буфер очищается
|
||||||
|
- `enable` сбрасывается в `0`
|
||||||
|
|
||||||
|
Это означает полное завершение текущего цикла выборки.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Симуляция
|
||||||
|
Тесты запускаются автоматически через make.
|
||||||
|
```
|
||||||
|
cd tests
|
||||||
|
make sim
|
||||||
|
```
|
||||||
@ -0,0 +1,152 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module sampler
|
||||||
|
#(
|
||||||
|
parameter DATA_WIDTH = 12,
|
||||||
|
parameter PACK_FACTOR = 1,
|
||||||
|
parameter PROCESS_MODE = 0
|
||||||
|
)
|
||||||
|
(
|
||||||
|
input clk_in,
|
||||||
|
input rst,
|
||||||
|
input [DATA_WIDTH-1:0] data_in,
|
||||||
|
input out_of_range,
|
||||||
|
input [31:0] smp_num,
|
||||||
|
input done,
|
||||||
|
|
||||||
|
output logic [DATA_WIDTH*PACK_FACTOR-1:0] m_axis_tdata,
|
||||||
|
output logic m_axis_tvalid,
|
||||||
|
output logic request
|
||||||
|
);
|
||||||
|
(* MARK_DEBUG="true" *) logic [DATA_WIDTH-1:0] data_converted;
|
||||||
|
(* MARK_DEBUG="true" *) logic out_of_range_reg;
|
||||||
|
(* MARK_DEBUG="true" *) logic [31:0] smp_num_reg, cnt_smp_num;
|
||||||
|
(* MARK_DEBUG="true" *) logic enable, enable_d;
|
||||||
|
|
||||||
|
generate
|
||||||
|
if (PROCESS_MODE) begin
|
||||||
|
|
||||||
|
always @(posedge clk_in) begin
|
||||||
|
if (rst) begin
|
||||||
|
data_converted <= '0;
|
||||||
|
out_of_range_reg <= 0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
out_of_range_reg <= out_of_range;
|
||||||
|
if (data_in == {1'b1, {(DATA_WIDTH-1){1'b0}}})
|
||||||
|
data_converted <= data_in;
|
||||||
|
else
|
||||||
|
data_converted <= data_in[DATA_WIDTH-1] ?{1'b1, (~data_in[DATA_WIDTH-2:0] + 1'b1)}:data_in;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else begin
|
||||||
|
always @(posedge clk_in) begin
|
||||||
|
if (rst) begin
|
||||||
|
data_converted <= '0;
|
||||||
|
out_of_range_reg <= 0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
out_of_range_reg <= out_of_range;
|
||||||
|
data_converted <= data_in;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
(* MARK_DEBUG="true" *) logic [DATA_WIDTH*PACK_FACTOR-1:0] buffer;
|
||||||
|
(* MARK_DEBUG="true" *) logic buffer_ready;
|
||||||
|
|
||||||
|
logic [$clog2(PACK_FACTOR):0] cnt;
|
||||||
|
|
||||||
|
generate
|
||||||
|
if (PACK_FACTOR == 1) begin
|
||||||
|
always @(posedge clk_in) begin
|
||||||
|
if (rst) begin
|
||||||
|
buffer <= '0;
|
||||||
|
buffer_ready <= 0;
|
||||||
|
cnt_smp_num <= '0;
|
||||||
|
smp_num_reg <= '0;
|
||||||
|
enable <= 0;
|
||||||
|
request <= 0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
buffer_ready <= 0;
|
||||||
|
if (!enable) begin
|
||||||
|
if (request && done) begin
|
||||||
|
enable <= 1;
|
||||||
|
request <= 0;
|
||||||
|
cnt_smp_num <= 0;
|
||||||
|
smp_num_reg <= smp_num;
|
||||||
|
end else begin
|
||||||
|
request <= 1;
|
||||||
|
end
|
||||||
|
end else begin
|
||||||
|
if (cnt_smp_num != smp_num_reg) begin
|
||||||
|
cnt_smp_num <= cnt_smp_num +1;
|
||||||
|
buffer_ready <= 1;
|
||||||
|
if (!out_of_range_reg) begin
|
||||||
|
buffer <= data_converted;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cnt_smp_num <= '0;
|
||||||
|
buffer_ready <= 0;
|
||||||
|
enable <= 0;
|
||||||
|
buffer <= '0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end else begin
|
||||||
|
always @(posedge clk_in) begin
|
||||||
|
if (rst) begin
|
||||||
|
buffer <= '0;
|
||||||
|
cnt <= '0; //
|
||||||
|
buffer_ready <= 0;
|
||||||
|
cnt_smp_num <= '0;
|
||||||
|
smp_num_reg <= '0;
|
||||||
|
enable <= 0;
|
||||||
|
request <= 0;
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
buffer_ready <= 0;
|
||||||
|
if (!enable) begin
|
||||||
|
if (request && done) begin
|
||||||
|
enable <= 1;
|
||||||
|
request <= 0;
|
||||||
|
cnt_smp_num <= 0;
|
||||||
|
smp_num_reg <= smp_num;
|
||||||
|
end else begin
|
||||||
|
request <= 1;
|
||||||
|
end
|
||||||
|
end else begin
|
||||||
|
if (cnt_smp_num != smp_num_reg) begin
|
||||||
|
cnt_smp_num <= cnt_smp_num +1;
|
||||||
|
buffer_ready <= 1;
|
||||||
|
if (!out_of_range_reg) begin
|
||||||
|
buffer <= {buffer[DATA_WIDTH*(PACK_FACTOR-1)-1:0], data_converted};
|
||||||
|
if (cnt == PACK_FACTOR-1) begin
|
||||||
|
cnt <= 0;
|
||||||
|
buffer <= {buffer[DATA_WIDTH*(PACK_FACTOR-1)-1:0], data_converted};
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cnt <= cnt + 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else begin
|
||||||
|
cnt_smp_num <= '0;
|
||||||
|
buffer_ready <= 0;
|
||||||
|
enable <= 0;
|
||||||
|
cnt <= 0;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endgenerate
|
||||||
|
|
||||||
|
assign m_axis_tdata = buffer;
|
||||||
|
assign m_axis_tvalid = buffer_ready;
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|||||||
194
rtl/sampler/tests/sampler_tb.sv
Normal file
194
rtl/sampler/tests/sampler_tb.sv
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
`timescale 1ns / 1ps
|
||||||
|
|
||||||
|
module sampler_tb;
|
||||||
|
|
||||||
|
localparam DATA_WIDTH = 12;
|
||||||
|
localparam PACK_FACTOR = 1;
|
||||||
|
localparam PROCESS_MODE = 0;
|
||||||
|
localparam CLK_PERIOD = 15.3846;
|
||||||
|
|
||||||
|
logic clk;
|
||||||
|
logic rst;
|
||||||
|
|
||||||
|
logic [DATA_WIDTH-1:0] data_in;
|
||||||
|
logic out_of_range;
|
||||||
|
|
||||||
|
logic [31:0] smp_num;
|
||||||
|
|
||||||
|
logic done;
|
||||||
|
logic request;
|
||||||
|
|
||||||
|
logic [DATA_WIDTH*PACK_FACTOR-1:0] m_axis_tdata;
|
||||||
|
logic m_axis_tvalid;
|
||||||
|
|
||||||
|
int received_count;
|
||||||
|
|
||||||
|
sampler #(
|
||||||
|
.DATA_WIDTH (DATA_WIDTH),
|
||||||
|
.PACK_FACTOR (PACK_FACTOR),
|
||||||
|
.PROCESS_MODE(PROCESS_MODE)
|
||||||
|
) dut (
|
||||||
|
.clk_in (clk),
|
||||||
|
.rst (rst),
|
||||||
|
|
||||||
|
.data_in (data_in),
|
||||||
|
.out_of_range (out_of_range),
|
||||||
|
|
||||||
|
.smp_num (smp_num),
|
||||||
|
.done (done),
|
||||||
|
|
||||||
|
.m_axis_tdata (m_axis_tdata),
|
||||||
|
.m_axis_tvalid(m_axis_tvalid),
|
||||||
|
|
||||||
|
.request (request)
|
||||||
|
);
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// CLOCK
|
||||||
|
// =====================================================
|
||||||
|
initial begin
|
||||||
|
clk = 0;
|
||||||
|
forever #(CLK_PERIOD/2) clk = ~clk;
|
||||||
|
end
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// RESET
|
||||||
|
// =====================================================
|
||||||
|
initial begin
|
||||||
|
rst = 1;
|
||||||
|
data_in = 0;
|
||||||
|
out_of_range = 0;
|
||||||
|
done = 0;
|
||||||
|
smp_num = 0;
|
||||||
|
|
||||||
|
repeat(5) @(posedge clk);
|
||||||
|
rst = 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// OUTPUT COUNTER
|
||||||
|
// =====================================================
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (m_axis_tvalid)
|
||||||
|
received_count++;
|
||||||
|
end
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// FEED DATA
|
||||||
|
// =====================================================
|
||||||
|
task automatic feed_data_stream(
|
||||||
|
input int num_words,
|
||||||
|
input bit random_data,
|
||||||
|
input bit random_out_of_range
|
||||||
|
);
|
||||||
|
logic [DATA_WIDTH-1:0] value;
|
||||||
|
bit oor;
|
||||||
|
begin
|
||||||
|
value = 1;
|
||||||
|
|
||||||
|
for (int i = 0; i < num_words; i++) begin
|
||||||
|
|
||||||
|
if (random_data)
|
||||||
|
value = $urandom_range(1, (1<<DATA_WIDTH)-1);
|
||||||
|
else
|
||||||
|
value = value + 1;
|
||||||
|
|
||||||
|
if (random_out_of_range)
|
||||||
|
oor = ($urandom_range(0,3) == 0);
|
||||||
|
else
|
||||||
|
oor = 0;
|
||||||
|
|
||||||
|
data_in = value;
|
||||||
|
out_of_range = oor;
|
||||||
|
|
||||||
|
@(posedge clk);
|
||||||
|
end
|
||||||
|
|
||||||
|
out_of_range = 0;
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// TEST CASE
|
||||||
|
// =====================================================
|
||||||
|
task automatic run_test_case(
|
||||||
|
input int n,
|
||||||
|
input bit random_data,
|
||||||
|
input bit random_out_of_range
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
received_count = 0;
|
||||||
|
|
||||||
|
data_in = 0;
|
||||||
|
out_of_range = 0;
|
||||||
|
done = 0;
|
||||||
|
|
||||||
|
smp_num = n;
|
||||||
|
|
||||||
|
// handshake
|
||||||
|
@(posedge clk);
|
||||||
|
done <= 1'b1;
|
||||||
|
wait(request == 1'b1);
|
||||||
|
@(posedge clk);
|
||||||
|
done <= 1'b0;
|
||||||
|
|
||||||
|
// wait enable
|
||||||
|
wait(dut.enable == 1'b1);
|
||||||
|
|
||||||
|
// feed data
|
||||||
|
feed_data_stream(n + 10, random_data, random_out_of_range);
|
||||||
|
|
||||||
|
// wait completion
|
||||||
|
wait(dut.enable == 1'b0);
|
||||||
|
|
||||||
|
$display("Expected smp_num=%0d Received=%0d", smp_num, received_count);
|
||||||
|
|
||||||
|
if (received_count == smp_num)
|
||||||
|
$display("[OK]");
|
||||||
|
else
|
||||||
|
$display("[ERROR]");
|
||||||
|
|
||||||
|
repeat(10) @(posedge clk);
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// RANDOM TESTS
|
||||||
|
// =====================================================
|
||||||
|
task automatic random_stress_test;
|
||||||
|
int n;
|
||||||
|
begin
|
||||||
|
for (int i = 0; i < 20; i++) begin
|
||||||
|
n = $urandom_range(5,20);
|
||||||
|
|
||||||
|
$display("\n--- TEST %0d --- n=%0d", i, n);
|
||||||
|
|
||||||
|
run_test_case(
|
||||||
|
n,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
|
// =====================================================
|
||||||
|
// MAIN
|
||||||
|
// =====================================================
|
||||||
|
initial begin
|
||||||
|
|
||||||
|
$display("\n=== BASIC TEST ===");
|
||||||
|
run_test_case(10, 0, 0);
|
||||||
|
|
||||||
|
$display("\n=== OUT_OF_RANGE TEST ===");
|
||||||
|
run_test_case(20, 1, 1);
|
||||||
|
|
||||||
|
$display("\n=== RANDOM STRESS TEST ===");
|
||||||
|
random_stress_test();
|
||||||
|
|
||||||
|
$display("\n=== TEST FINISHED ===");
|
||||||
|
$finish;
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
endmodule
|
||||||
@ -1 +0,0 @@
|
|||||||
# mock
|
|
||||||
@ -109,7 +109,34 @@ create_project.tcl: Makefile $(XCI_FILES) $(IP_TCL_FILES)
|
|||||||
echo "add_files -fileset constrs_1 $(XDC_FILES)" >> $@
|
echo "add_files -fileset constrs_1 $(XDC_FILES)" >> $@
|
||||||
for x in $(XCI_FILES); do echo "import_ip $$x" >> $@; done
|
for x in $(XCI_FILES); do echo "import_ip $$x" >> $@; done
|
||||||
for x in $(IP_TCL_FILES); do echo "source $$x" >> $@; done
|
for x in $(IP_TCL_FILES); do echo "source $$x" >> $@; done
|
||||||
|
|
||||||
|
echo 'set ips [get_ips -quiet *]' >> $@
|
||||||
|
echo 'if {[llength $$ips] > 0} {' >> $@
|
||||||
|
echo ' puts "INFO: Checking IP status..."' >> $@
|
||||||
|
echo ' report_ip_status -file ip_status_before_upgrade.rpt' >> $@
|
||||||
|
echo ' set locked_ips [get_ips -quiet -filter {IS_LOCKED == 1}]' >> $@
|
||||||
|
echo ' if {[llength $$locked_ips] > 0} {' >> $@
|
||||||
|
echo ' puts "INFO: Upgrading locked IP cores: $$locked_ips"' >> $@
|
||||||
|
echo ' upgrade_ip $$locked_ips' >> $@
|
||||||
|
echo ' }' >> $@
|
||||||
|
echo ' set ip_files [get_files -quiet *.xci]' >> $@
|
||||||
|
echo ' if {[llength $$ip_files] > 0} {' >> $@
|
||||||
|
echo ' puts "INFO: Generating IP output products..."' >> $@
|
||||||
|
echo ' generate_target all $$ip_files' >> $@
|
||||||
|
echo ' export_ip_user_files -of_objects $$ip_files -no_script -sync -force -quiet' >> $@
|
||||||
|
echo ' }' >> $@
|
||||||
|
echo ' report_ip_status -file ip_status_after_upgrade.rpt' >> $@
|
||||||
|
echo '}' >> $@
|
||||||
|
|
||||||
for x in $(CONFIG_TCL_FILES); do echo "source $$x" >> $@; done
|
for x in $(CONFIG_TCL_FILES); do echo "source $$x" >> $@; done
|
||||||
|
|
||||||
|
if [ -n "$(TB_FILES)" ]; then \
|
||||||
|
echo "add_files -fileset sim_1 defines.v $(TB_FILES)" >> $@; \
|
||||||
|
echo "set_property top $(SIM_TOP) [get_filesets sim_1]" >> $@; \
|
||||||
|
echo "set_property top_lib xil_defaultlib [get_filesets sim_1]" >> $@; \
|
||||||
|
fi
|
||||||
|
echo "update_compile_order -fileset sources_1" >> $@
|
||||||
|
echo "update_compile_order -fileset sim_1" >> $@
|
||||||
|
|
||||||
# source config TCL scripts if any source file has changed
|
# source config TCL scripts if any source file has changed
|
||||||
update_config.tcl: $(CONFIG_TCL_FILES) $(SYN_FILES) $(INC_FILES) $(XDC_FILES)
|
update_config.tcl: $(CONFIG_TCL_FILES) $(SYN_FILES) $(INC_FILES) $(XDC_FILES)
|
||||||
@ -170,12 +197,11 @@ gen_ip:
|
|||||||
|
|
||||||
sim: $(PROJECT).xpr gen_ip
|
sim: $(PROJECT).xpr gen_ip
|
||||||
echo "open_project $(PROJECT).xpr" > run_sim.tcl
|
echo "open_project $(PROJECT).xpr" > run_sim.tcl
|
||||||
echo "add_files -fileset sim_1 $(TB_FILES)" >> run_sim.tcl
|
|
||||||
echo "set_property top $(SIM_TOP) [get_filesets sim_1]" >> run_sim.tcl
|
|
||||||
echo "update_compile_order -fileset sources_1" >> run_sim.tcl
|
echo "update_compile_order -fileset sources_1" >> run_sim.tcl
|
||||||
echo "update_compile_order -fileset sim_1" >> run_sim.tcl
|
echo "update_compile_order -fileset sim_1" >> run_sim.tcl
|
||||||
echo "launch_simulation" >> run_sim.tcl
|
echo "launch_simulation" >> run_sim.tcl
|
||||||
echo "run all" >> run_sim.tcl
|
echo "run 10000 us" >> run_sim.tcl
|
||||||
|
echo "quit" >> run_sim.tcl
|
||||||
vivado -mode batch -source run_sim.tcl
|
vivado -mode batch -source run_sim.tcl
|
||||||
|
|
||||||
simclean:
|
simclean:
|
||||||
|
|||||||
20
software/README.md
Normal file
20
software/README.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Software
|
||||||
|
|
||||||
|
Просто скрипт на питоне, для отправки команд через ethernet и для приема и простой визуализации данных.
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
Справка:
|
||||||
|
|
||||||
|
```python3 --help```
|
||||||
|
|
||||||
|
Положительный импульс:
|
||||||
|
|
||||||
|
```python3 console.py --pulse_width 3500 --pulse_period 20000 --pulse_height 15000 --pulse_num 550 --dac-bits 14```
|
||||||
|
|
||||||
|
Отрицательный импульс:
|
||||||
|
|
||||||
|
```python3 console.py --pulse_width 15000 --pulse_period 20000 --pulse_height 1500 --pulse_num 550 --dac-bits 14```
|
||||||
|
|
||||||
|
## Ограничения
|
||||||
|
Максимальный pulse_period считается как аппаратный N_MAX * WINDOW_SIZE * adc_dac_ratio, в базовой конфигурации это 512000. Максимальный pulse_num зависит от подаваемых значений и от битности аккумулятора (по умолчанию - 32), с учетом усреднений по WINDOW_SIZE это получается что-то около 2^14 накоплений.
|
||||||
|
|
||||||
191
software/console.py
Normal file
191
software/console.py
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
import argparse
|
||||||
|
import socket
|
||||||
|
import math
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
adc_dac_ratio = 0.52
|
||||||
|
|
||||||
|
|
||||||
|
def run_debug(args, sock):
|
||||||
|
"""Debug run: send fixed values to test eth+ctrl on fpga."""
|
||||||
|
print(f"DEBUG MODE: ip={args.ip} send_port={args.send_port}")
|
||||||
|
|
||||||
|
dest = (args.ip, args.send_port)
|
||||||
|
|
||||||
|
# reset
|
||||||
|
sock.sendto(0x0f00.to_bytes(2), dest)
|
||||||
|
print("Sent soft_reset!")
|
||||||
|
|
||||||
|
# config data
|
||||||
|
sock.sendto(format_ctrl_data(0x12345678, 0x9abcdef0,
|
||||||
|
0x0bea, 0xdead, dac_bits=args.dac_bits), dest)
|
||||||
|
print("Config data sent!")
|
||||||
|
|
||||||
|
sock.sendto(0xf000.to_bytes(2), dest)
|
||||||
|
print("Sent start!")
|
||||||
|
|
||||||
|
|
||||||
|
def format_ctrl_data(pulse_width: int, pulse_period: int,
|
||||||
|
pulse_height: int, pulse_num: int, args, dac_bits: int = 16) -> bytes:
|
||||||
|
"""Format data packet for set_data command."""
|
||||||
|
output = bytearray()
|
||||||
|
|
||||||
|
output += 0b10001000.to_bytes(1, 'little')
|
||||||
|
|
||||||
|
pulse_period_adc = (int(pulse_period * adc_dac_ratio) //
|
||||||
|
args.window_size) * args.window_size
|
||||||
|
print(pulse_period_adc)
|
||||||
|
|
||||||
|
# no negative please
|
||||||
|
assert pulse_width > 0, "pulse_width should be positive"
|
||||||
|
assert pulse_period > 0, "pulse_period should be positive"
|
||||||
|
assert pulse_num > 0, "pulse_num should be positive"
|
||||||
|
assert pulse_height > 0, "pulse_height should be positive"
|
||||||
|
|
||||||
|
# overflow check
|
||||||
|
assert pulse_width < 2**32-1, "pulse_width too high"
|
||||||
|
assert pulse_period < 2**32-1, "pulse_period too high"
|
||||||
|
assert pulse_num < 2**16-1, "pulse_num too high"
|
||||||
|
assert pulse_height < 2**dac_bits-1, "pulse_height too high"
|
||||||
|
|
||||||
|
output += pulse_width.to_bytes(4, 'little')
|
||||||
|
output += pulse_period.to_bytes(4, 'little')
|
||||||
|
output += pulse_num.to_bytes(2, 'little')
|
||||||
|
output += pulse_height.to_bytes(2, 'little')
|
||||||
|
output += pulse_period_adc.to_bytes(4, 'little')
|
||||||
|
|
||||||
|
assert len(output) == 17, "Config data should be 128 bits + 8 bit header"
|
||||||
|
return output
|
||||||
|
|
||||||
|
|
||||||
|
def verify_args(args):
|
||||||
|
"""check args are non zero and in bound, request from user if needed"""
|
||||||
|
if args.pulse_width == 0:
|
||||||
|
args.pulse_width = int(input("pulse_width: "))
|
||||||
|
|
||||||
|
if args.pulse_period == 0:
|
||||||
|
args.pulse_period = int(input("pulse_period: "))
|
||||||
|
|
||||||
|
if args.pulse_num == 0:
|
||||||
|
args.pulse_num = int(input("pulse_num: "))
|
||||||
|
|
||||||
|
if args.pulse_height == 0:
|
||||||
|
args.pulse_height = int(input("pulse_height: "))
|
||||||
|
|
||||||
|
|
||||||
|
def recv_data(args, sock) -> list:
|
||||||
|
# calculate count & size
|
||||||
|
packet_count = math.ceil(
|
||||||
|
((adc_dac_ratio * args.pulse_period) / args.window_size * args.data_width) / args.packet_size)
|
||||||
|
print(packet_count)
|
||||||
|
|
||||||
|
recv_buf = []
|
||||||
|
|
||||||
|
try:
|
||||||
|
for pkt_cnt in range(packet_count):
|
||||||
|
try:
|
||||||
|
data, address = sock.recvfrom(65536)
|
||||||
|
|
||||||
|
if len(data) % args.data_width != 0:
|
||||||
|
print("invalid packet size!")
|
||||||
|
|
||||||
|
for i in range(0, len(data), args.data_width):
|
||||||
|
sample = int.from_bytes(
|
||||||
|
data[i:i+args.data_width], "little")
|
||||||
|
recv_buf.append(sample)
|
||||||
|
except socket.timeout:
|
||||||
|
print("socket timeout")
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print(f"recv: {pkt_cnt}")
|
||||||
|
break
|
||||||
|
except Exception as e:
|
||||||
|
print(f"err: {e}")
|
||||||
|
|
||||||
|
expected_length = math.ceil(
|
||||||
|
adc_dac_ratio * args.pulse_period / args.window_size)
|
||||||
|
if len(recv_buf) < expected_length:
|
||||||
|
print("data underflow")
|
||||||
|
return []
|
||||||
|
|
||||||
|
recv_buf = recv_buf[:expected_length-1]
|
||||||
|
print(f"collected {len(recv_buf)} samples")
|
||||||
|
# print(recv_buf)
|
||||||
|
return recv_buf
|
||||||
|
|
||||||
|
|
||||||
|
def run(args, sock):
|
||||||
|
dest = (args.ip, args.send_port)
|
||||||
|
|
||||||
|
if args.pulse_period % args.window_size != 0:
|
||||||
|
print("Invalid pulse period (should be divisable by WINDOW_SIZE)")
|
||||||
|
return
|
||||||
|
|
||||||
|
# reset
|
||||||
|
sock.sendto(0x0f00.to_bytes(2), dest)
|
||||||
|
|
||||||
|
# config data
|
||||||
|
sock.sendto(format_ctrl_data(args.pulse_width,
|
||||||
|
args.pulse_period,
|
||||||
|
args.pulse_height,
|
||||||
|
args.pulse_num, args,
|
||||||
|
dac_bits=args.dac_bits), dest)
|
||||||
|
|
||||||
|
sock.sendto(0xf000.to_bytes(2), dest)
|
||||||
|
print("Sent start!")
|
||||||
|
data = recv_data(args, sock)
|
||||||
|
print(min(data), max(data))
|
||||||
|
plt.plot(data)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
description="Консоль для рефлектометра"
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument("--debug", action='store_true',
|
||||||
|
help="отладочная отправка пакета soft_reset, пакета с данными и пакета start")
|
||||||
|
|
||||||
|
parser.add_argument("--ip", type=str, default="192.168.0.2",
|
||||||
|
help="IP рефлектометра, по умолчанию 192.168.0.2")
|
||||||
|
|
||||||
|
parser.add_argument("--send-port", type=int, default=8080,
|
||||||
|
help="Порт для отправки команд")
|
||||||
|
|
||||||
|
parser.add_argument("--recv-port", type=int,
|
||||||
|
default=8080, help="Порт для приема данных")
|
||||||
|
|
||||||
|
parser.add_argument("--dac-bits", type=int, default=12,
|
||||||
|
help="Битность ЦАП (влияет на максимальный pulse_height)")
|
||||||
|
|
||||||
|
parser.add_argument("--data-width", type=int,
|
||||||
|
default=4, help="Байтность получаемых данных, по умолчанию 4 (AKA int32)")
|
||||||
|
|
||||||
|
parser.add_argument("--window-size", type=int,
|
||||||
|
default=65, help="Размер окна для первого усреднения.")
|
||||||
|
|
||||||
|
parser.add_argument("--packet-size", type=int,
|
||||||
|
default=1024, help="Размер отправляемых пакетов.")
|
||||||
|
|
||||||
|
# передача параметров через аргументы
|
||||||
|
for arg in ("pulse_width", "pulse_period", "pulse_num", "pulse_height"):
|
||||||
|
parser.add_argument(f"--{arg}", type=int,
|
||||||
|
default=0, help=f"Задать {arg}")
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||||
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||||
|
sock.bind(("0.0.0.0", args.recv_port))
|
||||||
|
|
||||||
|
if args.debug:
|
||||||
|
run_debug(args, sock)
|
||||||
|
else:
|
||||||
|
verify_args(args)
|
||||||
|
run(args, sock)
|
||||||
|
|
||||||
|
sock.close()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user