From 66e9380cfbeac8bcc54f8552dbef5a78f45049c9 Mon Sep 17 00:00:00 2001 From: Ross Thompson Date: Tue, 29 Mar 2022 19:12:29 -0500 Subject: [PATCH] Partial fix to allow byte write enables with fpga and still get a preload to work. --- pipelined/src/generic/flop/bram.sv | 47 +++++++++++++ pipelined/src/uncore/ram.sv | 2 +- pipelined/src/uncore/ram3.sv | 105 +++++++++++++++++++++++++++++ pipelined/testbench/testbench.sv | 24 +++---- 4 files changed, 165 insertions(+), 13 deletions(-) create mode 100644 pipelined/src/generic/flop/bram.sv create mode 100644 pipelined/src/uncore/ram3.sv diff --git a/pipelined/src/generic/flop/bram.sv b/pipelined/src/generic/flop/bram.sv new file mode 100644 index 000000000..75fb76635 --- /dev/null +++ b/pipelined/src/generic/flop/bram.sv @@ -0,0 +1,47 @@ +// This model actually works correctly with vivado. + + +module bram2p1r1w + #( + //-------------------------------------------------------------------------- + parameter NUM_COL = 8, + parameter COL_WIDTH = 8, + parameter ADDR_WIDTH = 10, + // Addr Width in bits : 2 *ADDR_WIDTH = RAM Depth + parameter DATA_WIDTH = NUM_COL*COL_WIDTH // Data Width in bits + //---------------------------------------------------------------------- + ) ( + input logic clk, + input logic enaA, + input logic [ADDR_WIDTH-1:0] addrA, + output logic [DATA_WIDTH-1:0] doutA, + input logic enaB, + input logic [NUM_COL-1:0] weB, + input logic [ADDR_WIDTH-1:0] addrB, + input logic [DATA_WIDTH-1:0] dinB + ); + // Core Memory + logic [DATA_WIDTH-1:0] RAM [(2**ADDR_WIDTH)-1:0]; + integer i; + + initial begin + $readmemh("big64.txt", RAM); + end + + // Port-A Operation + always @ (posedge clk) begin + if(enaA) begin + doutA <= RAM[addrA]; + end + end + // Port-B Operation: + always @ (posedge clk) begin + if(enaB) begin + for(i=0;i