zynq-sandbox

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

commit 72884edd55b05f6873d690cfb9f87e44b0599ad8
parent baeeb5a8633a9861f2437c1a2e796519c1787118
Author: Brian Swetland <swetland@frotz.net>
Date:   Sun, 20 Jul 2014 04:29:18 -0700

zybo ethernet test -- infer blockram

Diffstat:
Mhdl/zybo_eth.sv | 74+++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 57 insertions(+), 17 deletions(-)

diff --git a/hdl/zybo_eth.sv b/hdl/zybo_eth.sv @@ -86,15 +86,21 @@ module packetlogger( reg [11:0]rdptr = 0; reg [11:0]rxptr = 0; -reg [8:0]rxbuffer[0:4095]; +reg [11:0]next_rdptr; +reg [11:0]next_rxptr; -always_ff @(posedge clk50) begin - if (rxvalid | rxeop) begin - rxbuffer[rxptr] <= { rxeop, rxdata }; - if (rxptr != 12'd4095) - rxptr <= rxptr + 1; - end -end +wire [8:0]rdata; +reg bufrd = 0; + +ram rxbuffer( + .clk(clk50), + .wen(rxvalid | rxeop), + .waddr(rxptr), + .wdata( { rxeop, rxdata } ), + .ren(bufrd), + .raddr(rdptr), + .rdata(rdata) + ); wire [31:0]dbg_wdata; reg [31:0]dbg_rdata; @@ -102,18 +108,30 @@ wire [2:0]dbg_addr; wire dbg_rd; wire dbg_wr; -always_ff @(posedge clk50) begin +always_comb begin + next_rxptr = rxptr; + next_rdptr = rdptr; + bufrd = 0; + if (rxvalid | rxeop) begin + next_rxptr = rxptr + 1; + end if (dbg_rd) begin - case (dbg_addr) - 0: dbg_rdata <= 32'h12345678; - 1: begin - dbg_rdata <= { 23'd0, rxbuffer[rdptr] }; - rdptr <= rdptr + 1; + if (dbg_addr == 1) begin + next_rdptr = rdptr + 1; + bufrd = 1; end - 2: dbg_rdata <= { 20'd0, rxptr }; - default: dbg_rdata <= 0; - endcase end + case (dbg_addr) + 0: dbg_rdata = 32'h12345678; + 1: dbg_rdata = { 23'd0, rdata }; + 2: dbg_rdata = { 20'd0, rxptr }; + default: dbg_rdata = 0; + endcase +end + +always_ff @(posedge clk50) begin + rxptr <= next_rxptr; + rdptr <= next_rdptr; end (* keep_hierarchy = "yes" *) @@ -127,3 +145,25 @@ jtag_debug_port port0( ); endmodule + +module ram( + input clk, + input ren, + input [11:0]raddr, + output reg [8:0]rdata, + input wen, + input [11:0]waddr, + input [8:0]wdata + ); + +reg [8:0]memory[0:4095]; + +always_ff @(posedge clk) begin + if (ren) + rdata <= memory[raddr]; + if (wen) + memory[waddr] <= wdata; +end + +endmodule +