49 lines
1.3 KiB
Smarty
49 lines
1.3 KiB
Smarty
// Copyright lowRISC contributors.
|
|
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
${gencmd}
|
|
<%
|
|
def make_blocked_sv_literal(hexstr, randwidth):
|
|
"""Chop a hex string into blocks of <= 64 digits"""
|
|
# Convert hexstr to an actual number
|
|
num = int(hexstr, 16)
|
|
assert 0 <= num < (1 << randwidth)
|
|
|
|
mask = (1 << 256) - 1
|
|
|
|
bits_left = randwidth
|
|
acc = []
|
|
while bits_left > 0:
|
|
word = num & mask
|
|
width = min(256, bits_left)
|
|
|
|
acc.append("{nbits}'h{word:0{num_nibbles}X}"
|
|
.format(word=word,
|
|
nbits=width,
|
|
num_nibbles=(width + 3) // 4))
|
|
bits_left -= width
|
|
num >>= width
|
|
|
|
acc.reverse()
|
|
return acc
|
|
%>
|
|
package top_${top["name"]}_rnd_cnst_pkg;
|
|
|
|
% for m in top["module"]:
|
|
% for p in filter(lambda p: p.get("randtype") in ["data", "perm"], m["param_list"]):
|
|
% if loop.first:
|
|
////////////////////////////////////////////
|
|
// ${m['name']}
|
|
////////////////////////////////////////////
|
|
% endif
|
|
// ${p['desc']}
|
|
parameter ${p["type"]} ${p["name_top"]} = {
|
|
% for block in make_blocked_sv_literal(p["default"], p["randwidth"]):
|
|
${block}${"" if loop.last else ","}
|
|
% endfor
|
|
};
|
|
|
|
% endfor
|
|
% endfor
|
|
endpackage : top_${top["name"]}_rnd_cnst_pkg
|