mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Converted over to the blockram/sram memories. Now I just need to cleanup. But before the cleanup I wan to make sure the FPGA synthesizes with these changes and actually keeps the preload.
This commit is contained in:
parent
fc2b4453ec
commit
1993069986
@ -1,47 +0,0 @@
|
|||||||
// 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<NUM_COL;i=i+1) begin
|
|
||||||
if(weB[i]) begin
|
|
||||||
RAM[addrB][i*COL_WIDTH +: COL_WIDTH] <= dinB[i*COL_WIDTH +:COL_WIDTH];
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
endmodule // bytewrite_tdp_ram_rf
|
|
@ -39,6 +39,14 @@ module simpleram #(parameter BASE=0, RANGE = 65535) (
|
|||||||
output logic [`XLEN-1:0] rd
|
output logic [`XLEN-1:0] rd
|
||||||
);
|
);
|
||||||
|
|
||||||
|
localparam ADDR_WDITH = $clog2(RANGE/8);
|
||||||
|
localparam OFFSET = $clog2(`XLEN/8);
|
||||||
|
|
||||||
|
|
||||||
|
bram1p1rw #(`XLEN/8, 8, ADDR_WDITH)
|
||||||
|
memory(.clk, .ena(we), .we(ByteMask), .addr(a[ADDR_WDITH+OFFSET-1:OFFSET]), .dout(rd), .din(wd));
|
||||||
|
|
||||||
|
/* -----\/----- EXCLUDED -----\/-----
|
||||||
logic [`XLEN-1:0] RAM[BASE>>(1+`XLEN/32):(RANGE+BASE)>>1+(`XLEN/32)];
|
logic [`XLEN-1:0] RAM[BASE>>(1+`XLEN/32):(RANGE+BASE)>>1+(`XLEN/32)];
|
||||||
|
|
||||||
// discard bottom 2 or 3 bits of address offset within word or doubleword
|
// discard bottom 2 or 3 bits of address offset within word or doubleword
|
||||||
@ -55,5 +63,6 @@ module simpleram #(parameter BASE=0, RANGE = 65535) (
|
|||||||
if (we & ByteMask[index]) RAM[adrmsbs][8*(index+1)-1:8*index] <= #1 wd[8*(index+1)-1:8*index];
|
if (we & ByteMask[index]) RAM[adrmsbs][8*(index+1)-1:8*index] <= #1 wd[8*(index+1)-1:8*index];
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-----/\----- EXCLUDED -----/\----- */
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
@ -187,9 +187,9 @@ logic [3:0] dummy;
|
|||||||
pathname = tvpaths[0];
|
pathname = tvpaths[0];
|
||||||
else pathname = tvpaths[1]; */
|
else pathname = tvpaths[1]; */
|
||||||
memfilename = {pathname, tests[test], ".elf.memfile"};
|
memfilename = {pathname, tests[test], ".elf.memfile"};
|
||||||
if (`IMEM == `MEM_TIM) $readmemh(memfilename, dut.core.ifu.irom.irom.ram.RAM);
|
if (`IMEM == `MEM_TIM) $readmemh(memfilename, dut.core.ifu.irom.irom.ram.memory.RAM);
|
||||||
else $readmemh(memfilename, dut.uncore.ram.ram.memory.RAM);
|
else $readmemh(memfilename, dut.uncore.ram.ram.memory.RAM);
|
||||||
if (`DMEM == `MEM_TIM) $readmemh(memfilename, dut.core.lsu.dtim.dtim.ram.RAM);
|
if (`DMEM == `MEM_TIM) $readmemh(memfilename, dut.core.lsu.dtim.dtim.ram.memory.RAM);
|
||||||
|
|
||||||
ProgramAddrMapFile = {pathname, tests[test], ".elf.objdump.addr"};
|
ProgramAddrMapFile = {pathname, tests[test], ".elf.objdump.addr"};
|
||||||
ProgramLabelMapFile = {pathname, tests[test], ".elf.objdump.lab"};
|
ProgramLabelMapFile = {pathname, tests[test], ".elf.objdump.lab"};
|
||||||
@ -248,7 +248,7 @@ logic [3:0] dummy;
|
|||||||
/* verilator lint_off INFINITELOOP */
|
/* verilator lint_off INFINITELOOP */
|
||||||
while (signature[i] !== 'bx) begin
|
while (signature[i] !== 'bx) begin
|
||||||
logic [`XLEN-1:0] sig;
|
logic [`XLEN-1:0] sig;
|
||||||
if (`DMEM == `MEM_TIM) sig = dut.core.lsu.dtim.dtim.ram.RAM[testadr+i];
|
if (`DMEM == `MEM_TIM) sig = dut.core.lsu.dtim.dtim.ram.memory.RAM[testadrNoBase+i];
|
||||||
else sig = dut.uncore.ram.ram.memory.RAM[testadrNoBase+i];
|
else sig = dut.uncore.ram.ram.memory.RAM[testadrNoBase+i];
|
||||||
//$display("signature[%h] = %h sig = %h", i, signature[i], sig);
|
//$display("signature[%h] = %h sig = %h", i, signature[i], sig);
|
||||||
if (signature[i] !== sig &
|
if (signature[i] !== sig &
|
||||||
@ -286,9 +286,9 @@ logic [3:0] dummy;
|
|||||||
//pathname = tvpaths[tests[0]];
|
//pathname = tvpaths[tests[0]];
|
||||||
memfilename = {pathname, tests[test], ".elf.memfile"};
|
memfilename = {pathname, tests[test], ".elf.memfile"};
|
||||||
//$readmemh(memfilename, dut.uncore.ram.ram.memory.RAM);
|
//$readmemh(memfilename, dut.uncore.ram.ram.memory.RAM);
|
||||||
if (`IMEM == `MEM_TIM) $readmemh(memfilename, dut.core.ifu.irom.irom.ram.RAM);
|
if (`IMEM == `MEM_TIM) $readmemh(memfilename, dut.core.ifu.irom.irom.ram.memory.RAM);
|
||||||
else $readmemh(memfilename, dut.uncore.ram.ram.memory.RAM);
|
else $readmemh(memfilename, dut.uncore.ram.ram.memory.RAM);
|
||||||
if (`DMEM == `MEM_TIM) $readmemh(memfilename, dut.core.lsu.dtim.dtim.ram.RAM);
|
if (`DMEM == `MEM_TIM) $readmemh(memfilename, dut.core.lsu.dtim.dtim.ram.memory.RAM);
|
||||||
|
|
||||||
ProgramAddrMapFile = {pathname, tests[test], ".elf.objdump.addr"};
|
ProgramAddrMapFile = {pathname, tests[test], ".elf.objdump.addr"};
|
||||||
ProgramLabelMapFile = {pathname, tests[test], ".elf.objdump.lab"};
|
ProgramLabelMapFile = {pathname, tests[test], ".elf.objdump.lab"};
|
||||||
|
Loading…
Reference in New Issue
Block a user