Merge branch 'dev' of github.com:VLSIDA/PrivateRAM into dev

This commit is contained in:
mrg 2020-09-28 15:51:35 -07:00
commit 159c04a25d
9 changed files with 20 additions and 11 deletions

View File

@ -6,6 +6,7 @@
# All rights reserved. # All rights reserved.
# #
import debug import debug
import math
class verilog: class verilog:
""" """
@ -53,7 +54,7 @@ class verilog:
self.vf.write("\n );\n\n") self.vf.write("\n );\n\n")
if self.write_size: if self.write_size:
self.num_wmasks = int(self.word_size/self.write_size) self.num_wmasks = int(math.ceil(self.word_size / self.write_size))
self.vf.write(" parameter NUM_WMASKS = {0} ;\n".format(self.num_wmasks)) self.vf.write(" parameter NUM_WMASKS = {0} ;\n".format(self.num_wmasks))
self.vf.write(" parameter DATA_WIDTH = {0} ;\n".format(self.word_size)) self.vf.write(" parameter DATA_WIDTH = {0} ;\n".format(self.word_size))
self.vf.write(" parameter ADDR_WIDTH = {0} ;\n".format(self.addr_size)) self.vf.write(" parameter ADDR_WIDTH = {0} ;\n".format(self.addr_size))
@ -189,9 +190,13 @@ class verilog:
self.vf.write(" if (!csb{0}_reg)\n".format(port)) self.vf.write(" if (!csb{0}_reg)\n".format(port))
if self.write_size: if self.write_size:
remainder_bits = self.word_size % self.write_size
for mask in range(0,self.num_wmasks): for mask in range(0,self.num_wmasks):
lower = mask * self.write_size lower = mask * self.write_size
upper = lower + self.write_size-1 if (remainder_bits and mask == self.num_wmasks - 1):
upper = lower + remainder_bits - 1
else:
upper = lower + self.write_size - 1
self.vf.write(" if (wmask{0}_reg[{1}])\n".format(port,mask)) self.vf.write(" if (wmask{0}_reg[{1}])\n".format(port,mask))
self.vf.write(" mem[addr{0}_reg][{1}:{2}] = din{0}_reg[{1}:{2}];\n".format(port,upper,lower)) self.vf.write(" mem[addr{0}_reg][{1}:{2}] = din{0}_reg[{1}:{2}];\n".format(port,upper,lower))
self.vf.write(" end\n") self.vf.write(" end\n")

View File

@ -47,7 +47,7 @@ class delay(simulation):
self.targ_write_ports = [] self.targ_write_ports = []
self.period = 0 self.period = 0
if self.write_size: if self.write_size:
self.num_wmasks = int(self.word_size / self.write_size) self.num_wmasks = int(math.ceil(self.word_size / self.write_size))
else: else:
self.num_wmasks = 0 self.num_wmasks = 0
self.set_load_slew(0,0) self.set_load_slew(0,0)

View File

@ -8,6 +8,7 @@
import collections import collections
import debug import debug
import random import random
import math
from .stimuli import * from .stimuli import *
from .charutils import * from .charutils import *
from globals import OPTS from globals import OPTS
@ -31,7 +32,7 @@ class functional(simulation):
random.seed(12345) random.seed(12345)
if self.write_size: if self.write_size:
self.num_wmasks = int(self.word_size / self.write_size) self.num_wmasks = int(math.ceil(self.word_size / self.write_size))
else: else:
self.num_wmasks = 0 self.num_wmasks = 0

View File

@ -39,7 +39,7 @@ class simulation():
self.write_ports = self.sram.write_ports self.write_ports = self.sram.write_ports
self.words_per_row = self.sram.words_per_row self.words_per_row = self.sram.words_per_row
if self.write_size: if self.write_size:
self.num_wmasks = int(self.word_size/self.write_size) self.num_wmasks = int(math.ceil(self.word_size/self.write_size))
else: else:
self.num_wmasks = 0 self.num_wmasks = 0

View File

@ -27,7 +27,7 @@ class bank(design.design):
self.sram_config = sram_config self.sram_config = sram_config
sram_config.set_local_config(self) sram_config.set_local_config(self)
if self.write_size: if self.write_size:
self.num_wmasks = int(self.word_size / self.write_size) self.num_wmasks = int(ceil(self.word_size / self.write_size))
else: else:
self.num_wmasks = 0 self.num_wmasks = 0

View File

@ -6,6 +6,7 @@
from tech import drc from tech import drc
import debug import debug
import design import design
import math
from sram_factory import factory from sram_factory import factory
from collections import namedtuple from collections import namedtuple
from vector import vector from vector import vector
@ -23,7 +24,7 @@ class port_data(design.design):
sram_config.set_local_config(self) sram_config.set_local_config(self)
self.port = port self.port = port
if self.write_size is not None: if self.write_size is not None:
self.num_wmasks = int(self.word_size / self.write_size) self.num_wmasks = int(math.ceil(self.word_size / self.write_size))
else: else:
self.num_wmasks = 0 self.num_wmasks = 0

View File

@ -7,6 +7,7 @@
# #
import design import design
import debug import debug
import math
from tech import drc from tech import drc
from sram_factory import factory from sram_factory import factory
from vector import vector from vector import vector
@ -39,7 +40,7 @@ class write_driver_array(design.design):
self.num_spare_cols = num_spare_cols self.num_spare_cols = num_spare_cols
if self.write_size: if self.write_size:
self.num_wmasks = int(self.word_size / self.write_size) self.num_wmasks = int(math.ceil(self.word_size / self.write_size))
self.create_netlist() self.create_netlist()
if not OPTS.netlist_only: if not OPTS.netlist_only:

View File

@ -7,6 +7,7 @@
# #
import design import design
import debug import debug
import math
from sram_factory import factory from sram_factory import factory
from vector import vector from vector import vector
from globals import OPTS from globals import OPTS
@ -31,7 +32,7 @@ class write_mask_and_array(design.design):
self.offsets = offsets self.offsets = offsets
self.column_offset = column_offset self.column_offset = column_offset
self.words_per_row = int(columns / word_size) self.words_per_row = int(columns / word_size)
self.num_wmasks = int(word_size / write_size) self.num_wmasks = int(math.ceil(word_size / write_size))
self.create_netlist() self.create_netlist()
if not OPTS.netlist_only: if not OPTS.netlist_only:

View File

@ -7,7 +7,7 @@
# #
import datetime import datetime
import debug import debug
from math import log from math import log, ceil
from importlib import reload from importlib import reload
from vector import vector from vector import vector
from globals import OPTS, print_time from globals import OPTS, print_time
@ -36,7 +36,7 @@ class sram_base(design, verilog, lef):
self.bank_insts = [] self.bank_insts = []
if self.write_size: if self.write_size:
self.num_wmasks = int(self.word_size / self.write_size) self.num_wmasks = int(ceil(self.word_size / self.write_size))
else: else:
self.num_wmasks = 0 self.num_wmasks = 0