aboutsummaryrefslogtreecommitdiffstats
path: root/fpga/usrp3/lib/rfnoc/fosphor/f15_line_mem.v
diff options
context:
space:
mode:
Diffstat (limited to 'fpga/usrp3/lib/rfnoc/fosphor/f15_line_mem.v')
-rw-r--r--fpga/usrp3/lib/rfnoc/fosphor/f15_line_mem.v67
1 files changed, 67 insertions, 0 deletions
diff --git a/fpga/usrp3/lib/rfnoc/fosphor/f15_line_mem.v b/fpga/usrp3/lib/rfnoc/fosphor/f15_line_mem.v
new file mode 100644
index 000000000..7a98d5c6e
--- /dev/null
+++ b/fpga/usrp3/lib/rfnoc/fosphor/f15_line_mem.v
@@ -0,0 +1,67 @@
+/*
+ * f15_line_mem.v
+ *
+ * Memory for a single line to compute max-hold / average
+ * Read latency is 2 and if read is not enabled, output data is forced
+ * to zero.
+ *
+ * Copyright (C) 2015 Ettus Corporation LLC
+ * Copyright 2018 Ettus Research, a National Instruments Company
+ *
+ * SPDX-License-Identifier: LGPL-3.0-or-later
+ *
+ * vim: ts=4 sw=4
+ */
+
+`ifdef SIM
+`default_nettype none
+`endif
+
+module f15_line_mem #(
+ parameter integer AWIDTH = 12,
+ parameter integer DWIDTH = 18
+)(
+ input wire [AWIDTH-1:0] rd_addr,
+ output reg [DWIDTH-1:0] rd_data,
+ input wire rd_ena,
+
+ input wire [AWIDTH-1:0] wr_addr,
+ input wire [DWIDTH-1:0] wr_data,
+ input wire wr_ena,
+
+ input wire clk,
+ input wire rst
+);
+
+ // Signals
+ reg [DWIDTH-1:0] ram [(1<<AWIDTH)-1:0];
+ reg [DWIDTH-1:0] rd_data_r;
+ reg rd_ena_r;
+
+`ifdef SIM
+ integer i;
+ initial
+ for (i=0; i<(1<<AWIDTH); i=i+1)
+ ram[i] = 0;
+`endif
+
+ always @(posedge clk)
+ begin
+ // Read
+ rd_data_r <= ram[rd_addr];
+
+ // Write
+ if (wr_ena)
+ ram[wr_addr] <= wr_data;
+
+ // Register the enable flag
+ rd_ena_r <= rd_ena;
+
+ // Final read register
+ if (rd_ena_r)
+ rd_data <= rd_data_r;
+ else
+ rd_data <= 0;
+ end
+
+endmodule // f15_line_mem