pixelflut/pixelflut.v

126 lines
2.3 KiB
Verilog

module pixelflut (
input sys_clk,
output led0_r,
output led0_g,
output led0_b,
output [11:0] dvi_d,
output dvi_ck,
output dvi_de,
output dvi_hs,
output dvi_vs,
output eth_mdc,
inout eth_mdio,
output eth_ref_clk,
output eth_rstn,
input eth_rx_clk,
input eth_rx_dv,
input [3:0] eth_rxd,
input eth_rxerr,
input eth_tx_clk,
output eth_tx_en,
output [3:0] eth_txd,
);
reg [31:0] ctr;
reg [2:0] led0_state;
assign led0_r = led0_state[0];
assign led0_g = led0_state[1];
assign led0_b = led0_state[2];
initial begin
led0_state <= 3'b0;
end
always @(posedge sys_clk) begin
if (ctr == 32'd50_000_000) begin
ctr <= 32'b0;
led0_state <= led0_state + 1'b1;
end else begin
ctr <= ctr + 1'b1;
end
end
reg dvi_bus_clk;
always @(posedge sys_clk) begin
dvi_bus_clk <= ~dvi_bus_clk;
end
wire [15:0] dvi_bus_data;
wire [23:0] dvi_bus_addr;
dvi display (
.bus_clk (dvi_bus_clk),
.bus_data(dvi_bus_data),
.bus_addr(dvi_bus_addr),
.reset (1'b0),
.d (dvi_d),
.ck (dvi_ck),
.de (dvi_de),
.hs (dvi_hs),
.vs (dvi_vs),
);
reg [1:0] eth_clk_div;
assign eth_ref_clk = eth_clk_div[1];
initial begin
eth_clk_div <= 2'b0;
end
always @(posedge sys_clk) begin
eth_clk_div <= eth_clk_div + 1;
end
assign eth_rstn = 1;
assign eth_tx_en = 0;
assign eth_txd = 4'b0;
wire eth_mdio_i, eth_mdio_o, eth_mdio_en;
IOBUF eth_mdio_buf (
.I (eth_mdio_o),
.IO(eth_mdio),
.O (eth_mdio_i),
.T (eth_mdio_en),
);
ethernet_smi smi (
.clk (sys_clk),
.mdio_i (eth_mdio_i),
.mdio_o (eth_mdio_o),
.mdio_en(eth_mdio_en),
.mdc (eth_mdc),
);
wire eth_bus_clk;
wire [15:0] eth_bus_data;
wire [23:0] eth_bus_addr;
wire [1:0] eth_bus_sel;
pingxelflut eth (
.rx_clk (eth_rx_clk),
.rxd (eth_rxd),
.rx_dv (eth_rx_dv),
.rx_er (eth_rxerr),
.bus_clk (eth_bus_clk),
.bus_data(eth_bus_data),
.bus_addr(eth_bus_addr),
.bus_sel (eth_bus_sel),
);
xc7_bram ram (
.out_clk (dvi_bus_clk),
.out_data(dvi_bus_data),
.out_addr(dvi_bus_addr),
.in_clk (eth_bus_clk),
.in_data (eth_bus_data),
.in_addr (eth_bus_addr),
.in_wren (eth_bus_sel),
);
endmodule