zynq-sandbox

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit f36bd94cb922823b9ae840fa08d1f66800729d8a
parent c4229e71d0034c104deb67700a2fdc6b4b3cec15
Author: Brian Swetland <swetland@frotz.net>
Date:   Sun, 27 Jul 2014 23:36:27 -0700

zybo-eth-capture: pass traffic between phy0 and phy1, capture both streams

phy0 -> phy1 4MB capture ring at 0x10000000
phy1 -> phy0 4MB capture ring at 0x10400000

Diffstat:
MMakefile | 4++--
Mhdl/zybo_eth_capture.sv | 79++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------
Ahdl/zybo_eth_capture.xdc | 103+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 167 insertions(+), 19 deletions(-)

diff --git a/Makefile b/Makefile @@ -79,7 +79,7 @@ include build/vivado-xsim.mk MODULE_NAME := zybo-eth-capture MODULE_PART := xc7z010clg400-1 MODULE_SRCS := hdl/zybo_eth_capture.sv -MODULE_SRCS += hdl/zynq_ps_1m_1s.sv +MODULE_SRCS += hdl/zynq_ps_1m_2s.sv MODULE_SRCS += hdl/mmcm_1in_3out.sv MODULE_SRCS += hdl/eth_capture.sv MODULE_SRCS += hdl/eth_rmii_rx.sv @@ -89,7 +89,7 @@ MODULE_SRCS += hdl/sync_oneway.sv MODULE_SRCS += hdl/axi_ifc.sv MODULE_SRCS += hdl/axi_dma_writer.sv MODULE_SRCS += hdl/axi_registers.sv -MODULE_SRCS += hdl/zybo_eth.xdc +MODULE_SRCS += hdl/zybo_eth_capture.xdc include build/vivado-bitfile.mk MODULE_NAME := zybo-eth diff --git a/hdl/zybo_eth_capture.sv b/hdl/zybo_eth_capture.sv @@ -19,12 +19,18 @@ module top( output [3:0]led, output phy0_mdc, - //output phy0_mdio, output phy0_clk, output phy0_txen, output [1:0]phy0_tx, input phy0_crs, - input [1:0]phy0_rx + input [1:0]phy0_rx, + + output phy1_mdc, + output phy1_clk, + output phy1_txen, + output [1:0]phy1_tx, + input phy1_crs, + input [1:0]phy1_rx ); assign led = 0; @@ -47,53 +53,92 @@ mmcm_1in_3out #( assign phy0_clk = clk50; assign phy0_mdc = 1; +assign phy1_clk = clk50; +assign phy1_mdc = 1; -wire [7:0]rxdata; -wire rxvalid; -wire rxeop; -wire rxsop; +wire [7:0]rx0data; +wire rx0valid; +wire rx0eop; +wire rx0sop; (* keep_hierarchy = "yes" *) eth_rmii_rx phy0rx( .clk50(clk50), .rx(phy0_rx), .crs_dv(phy0_crs), - .data(rxdata), - .valid(rxvalid), - .eop(rxeop), - .sop(rxsop), - .out_tx(), - .out_txen() + .data(rx0data), + .valid(rx0valid), + .eop(rx0eop), + .sop(rx0sop), + .out_tx(phy1_tx), + .out_txen(phy1_txen) + ); + +wire [7:0]rx1data; +wire rx1valid; +wire rx1eop; +wire rx1sop; + +(* keep_hierarchy = "yes" *) +eth_rmii_rx phy1rx( + .clk50(clk50), + .rx(phy1_rx), + .crs_dv(phy1_crs), + .data(rx1data), + .valid(rx1valid), + .eop(rx1eop), + .sop(rx1sop), + .out_tx(phy0_tx), + .out_txen(phy0_txen) ); axi_ifc #(.IWIDTH(12),.AXI3(1)) axi_ctl(); axi_ifc #(.IWIDTH(6),.AXI3(1)) axi_dma0(); +axi_ifc #(.IWIDTH(6),.AXI3(1)) axi_dma1(); zynq_ps7 zynq( .fclk0(), .m_axi_gp0_clk(clk), .m_axi_gp0(axi_ctl), .s_axi_gp0_clk(clk), - .s_axi_gp0(axi_dma0) + .s_axi_gp0(axi_dma0), + .s_axi_gp1_clk(clk), + .s_axi_gp1(axi_dma1) ); reg cap_enable = 0; reg cap_reset = 0; +(* keep_hierarchy = "yes" *) eth_capture #( .BASE_ADDR(32'h10000000) ) cap0 ( .clk50(clk50), - .rxsop(rxsop), - .rxeop(rxeop), - .rxdata(rxdata), - .rxvalid(rxvalid), + .rxsop(rx0sop), + .rxeop(rx0eop), + .rxdata(rx0data), + .rxvalid(rx0valid), .clk(clk), .reset(cap_reset), .enable(cap_enable), .axi_dma(axi_dma0) ); +(* keep_hierarchy = "yes" *) +eth_capture #( + .BASE_ADDR(32'h10400000) + ) cap1 ( + .clk50(clk50), + .rxsop(rx1sop), + .rxeop(rx1eop), + .rxdata(rx1data), + .rxvalid(rx1valid), + .clk(clk), + .reset(cap_reset), + .enable(cap_enable), + .axi_dma(axi_dma1) + ); + wire wr; wire [31:0]wdata; diff --git a/hdl/zybo_eth_capture.xdc b/hdl/zybo_eth_capture.xdc @@ -0,0 +1,103 @@ + +##Clock signal +##IO_L11P_T1_SRCC_35 +set_property PACKAGE_PIN L16 [get_ports clk] +set_property IOSTANDARD LVCMOS33 [get_ports clk] +create_clock -add -name sys_clk_pin -period 8.00 -waveform {0 4} [get_ports clk] + +# 30 MHz JTAG TCK +#create_clock -period 33.333 -name jtag_tck [get_pins log0/port0/bscan/TCK] + +# human readable generated clock name +create_generated_clock -name clk50 [get_pins mmcm0/mmcm_adv_inst/CLKOUT0] + +#set_clock_groups -asynchronous -group [get_clocks -include_generated_clocks sys_clk_pin] -group jtag_tck + +##LEDs +##IO_L23P_T3_35 +set_property PACKAGE_PIN M14 [get_ports {led[0]}] +set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}] + +##IO_L23N_T3_35 +set_property PACKAGE_PIN M15 [get_ports {led[1]}] +set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}] + +##IO_0_35 +set_property PACKAGE_PIN G14 [get_ports {led[2]}] +set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}] + +##IO_L3N_T0_DQS_AD1N_35 +set_property PACKAGE_PIN D18 [get_ports {led[3]}] +set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}] + +##Pmod Header JB +##IO_L15N_T2_DQS_34 +set_property PACKAGE_PIN U20 [get_ports {phy0_rx[1]}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy0_rx[1]}] + +##IO_L15P_T2_DQS_34 +set_property PACKAGE_PIN T20 [get_ports {phy0_tx[0]}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy0_tx[0]}] +set_property SLEW FAST [get_ports {phy0_tx[0]}] + +##IO_L16N_T2_34 +set_property PACKAGE_PIN W20 [get_ports {phy0_mdc}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy0_mdc}] + +##IO_L16P_T2_34 +set_property PACKAGE_PIN V20 [get_ports {phy0_crs}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy0_crs}] + +##IO_L17N_T2_34 +set_property PACKAGE_PIN Y19 [get_ports {phy0_rx[0]}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy0_rx[0]}] + +##IO_L17P_T2_34 +set_property PACKAGE_PIN Y18 [get_ports {phy0_txen}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy0_txen}] +set_property SLEW FAST [get_ports {phy0_txen}] + +##IO_L22N_T3_34 +set_property PACKAGE_PIN W19 [get_ports {phy0_tx[1]}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy0_tx[1]}] +set_property SLEW FAST [get_ports {phy0_tx[1]}] + +##IO_L22P_T3_34 +set_property PACKAGE_PIN W18 [get_ports {phy0_clk}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy0_clk}] +set_property SLEW FAST [get_ports {phy0_clk}] +set_property DRIVE 8 [get_ports {phy0_clk}] + +##Pmod Header JD +##IO_L5N_T0_34 +set_property PACKAGE_PIN T15 [get_ports {phy1_rx[1]}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy1_rx[1]}] + +##IO_L5P_T0_34 +set_property PACKAGE_PIN T14 [get_ports {phy1_tx[0]}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy1_tx[0]}] + +##IO_L6N_T0_VREF_34 +set_property PACKAGE_PIN R14 [get_ports {phy1_mdc}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy1_mdc}] + +##IO_L6P_T0_34 +set_property PACKAGE_PIN P14 [get_ports {phy1_crs}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy1_crs}] + +##IO_L11N_T1_SRCC_34 +set_property PACKAGE_PIN U15 [get_ports {phy1_rx[0]}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy1_rx[0]}] + +##IO_L11P_T1_SRCC_34 +set_property PACKAGE_PIN U14 [get_ports {phy1_txen}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy1_txen}] + +##IO_L21N_T3_DQS_34 +set_property PACKAGE_PIN V18 [get_ports {phy1_tx[1]}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy1_tx[1]}] + +##IO_L21P_T3_DQS_34 +set_property PACKAGE_PIN V17 [get_ports {phy1_clk}] +set_property IOSTANDARD LVCMOS33 [get_ports {phy1_clk}] +