mirror of https://github.com/YosysHQ/icestorm.git
add RGB_DRV/LED_DRV_CUR for u4k
This commit is contained in:
parent
0f5feeaae9
commit
56978cde58
|
|
@ -5801,6 +5801,38 @@ extra_cells_db = {
|
|||
("SMCCLK", (25, 3, 0)) : {
|
||||
"CLK": (25, 3, "slf_op_5")
|
||||
},
|
||||
("LED_DRV_CUR", (25, 21, 2)) : {
|
||||
"LED_DRV_CUR_EN": (25, 19, "CBIT_5"),
|
||||
"EN": (25, 19, "lutff_6/in_3"),
|
||||
},
|
||||
("RGB_DRV", (0, 21, 3)) : {
|
||||
"RGB_DRV_EN": (0, 18, "CBIT_5"),
|
||||
"RGB0_CURRENT_0": (0, 18, "CBIT_6"),
|
||||
"RGB0_CURRENT_1": (0, 18, "CBIT_7"),
|
||||
"RGB0_CURRENT_2": (0, 19, "CBIT_0"),
|
||||
"RGB0_CURRENT_3": (0, 19, "CBIT_1"),
|
||||
"RGB0_CURRENT_4": (0, 19, "CBIT_2"),
|
||||
"RGB0_CURRENT_5": (0, 19, "CBIT_3"),
|
||||
"RGB1_CURRENT_0": (0, 19, "CBIT_4"),
|
||||
"RGB1_CURRENT_1": (0, 19, "CBIT_5"),
|
||||
"RGB1_CURRENT_2": (0, 19, "CBIT_6"),
|
||||
"RGB1_CURRENT_3": (0, 19, "CBIT_7"),
|
||||
"RGB1_CURRENT_4": (0, 20, "CBIT_0"),
|
||||
"RGB1_CURRENT_5": (0, 20, "CBIT_1"),
|
||||
"RGB2_CURRENT_0": (0, 20, "CBIT_2"),
|
||||
"RGB2_CURRENT_1": (0, 20, "CBIT_3"),
|
||||
"RGB2_CURRENT_2": (0, 20, "CBIT_4"),
|
||||
"RGB2_CURRENT_3": (0, 20, "CBIT_5"),
|
||||
"RGB2_CURRENT_4": (0, 20, "CBIT_6"),
|
||||
"RGB2_CURRENT_5": (0, 20, "CBIT_7"),
|
||||
"RGBLEDEN": (0, 20, "lutff_1/in_1"),
|
||||
"RGB0PWM": (0, 20, "lutff_2/in_1"),
|
||||
"RGB1PWM": (0, 20, "lutff_3/in_1"),
|
||||
"RGB2PWM": (0, 20, "lutff_4/in_1"),
|
||||
"RGB0": (13, 21, 0),
|
||||
"RGB1": (12, 21, 0),
|
||||
"RGB2": (8, 21, 0)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ for filename in sys.argv[1:]:
|
|||
cur_text_db = text_db.setdefault("ipcon_5k", set())
|
||||
ignore = False
|
||||
elif device_class == "u4k" and line.startswith("IpCon"):
|
||||
cur_text_db = text_db.setdefault("ipcon_u4k", set())
|
||||
cur_text_db = text_db.setdefault("ipcon_5k", set())
|
||||
ignore = False
|
||||
elif device_class == "5k" and line.startswith("DSP"):
|
||||
match = re.match(r"DSP_Tile_\d+_(\d+)", line)
|
||||
|
|
@ -71,7 +71,7 @@ for filename in sys.argv[1:]:
|
|||
if ypos in [8, 16]:
|
||||
dsp_idx = 3
|
||||
assert dsp_idx != None
|
||||
cur_text_db = text_db.setdefault("dsp%d_u4k" % dsp_idx, set())
|
||||
cur_text_db = text_db.setdefault("dsp%d_5k" % dsp_idx, set())
|
||||
ignore = False
|
||||
elif not ignore:
|
||||
print("'" + line + "'")
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ for idx in range(num):
|
|||
module top (
|
||||
input [%d:0] glb_pins,
|
||||
input [%d:0] in_pins,
|
||||
output [15:0] out_pins,
|
||||
input [2:0] led_data,
|
||||
output [%d:0] led_pins
|
||||
);
|
||||
wire [%d:0] glb, glb_pins;
|
||||
|
|
@ -92,39 +92,39 @@ for idx in range(num):
|
|||
# bits.append("pwm_out[1]")
|
||||
# bits.append("pwm_out[2]")
|
||||
|
||||
# current_choices = ["0b000000", "0b000001", "0b000011", "0b000111", "0b001111", "0b011111", "0b111111"]
|
||||
current_choices = ["0b000000", "0b000001", "0b000011", "0b000111", "0b001111", "0b011111", "0b111111"]
|
||||
|
||||
# currents = [np.random.choice(current_choices) for i in range(3)]
|
||||
currents = [np.random.choice(current_choices) for i in range(3)]
|
||||
|
||||
# bit_curren = np.random.choice(bits)
|
||||
# bit_rgbleden = np.random.choice(bits)
|
||||
# bits_pwm = [np.random.choice([np.random.choice(bits), "pwm_out[%d]" % i]) for i in range(3)]
|
||||
bit_curren = np.random.choice(bits)
|
||||
bit_rgbleden = np.random.choice(bits)
|
||||
bits_pwm = [np.random.choice([np.random.choice(bits), "led_data[%d]" % i]) for i in range(3)]
|
||||
|
||||
# print("""
|
||||
# wire rgbpu;
|
||||
# SB_LED_DRV_CUR led_drv_cur (
|
||||
# .EN(%s),
|
||||
# .LEDPU(rgbpu)
|
||||
# );
|
||||
print("""
|
||||
wire rgbpu;
|
||||
SB_LED_DRV_CUR led_drv_cur (
|
||||
.EN(%s),
|
||||
.LEDPU(rgbpu)
|
||||
);
|
||||
|
||||
# SB_RGB_DRV #(
|
||||
# .RGB0_CURRENT(\"%s\"),
|
||||
# .RGB1_CURRENT(\"%s\"),
|
||||
# .RGB2_CURRENT(\"%s\")
|
||||
# ) rgb_drv (
|
||||
# .RGBLEDEN(%s),
|
||||
# .RGBPU(rgbpu),
|
||||
# .RGB0PWM(%s),
|
||||
# .RGB1PWM(%s),
|
||||
# .RGB2PWM(%s),
|
||||
# .RGB0(led_pins[0]),
|
||||
# .RGB1(led_pins[1]),
|
||||
# .RGB2(led_pins[2])
|
||||
# );
|
||||
# """ % (
|
||||
# bit_curren, currents[0], currents[1], currents[2],
|
||||
# bit_rgbleden, bits_pwm[0], bits_pwm[1], bits_pwm[2]
|
||||
# ), file = f)
|
||||
SB_RGB_DRV #(
|
||||
.RGB0_CURRENT(\"%s\"),
|
||||
.RGB1_CURRENT(\"%s\"),
|
||||
.RGB2_CURRENT(\"%s\")
|
||||
) rgb_drv (
|
||||
.RGBLEDEN(%s),
|
||||
.RGBPU(rgbpu),
|
||||
.RGB0PWM(%s),
|
||||
.RGB1PWM(%s),
|
||||
.RGB2PWM(%s),
|
||||
.RGB0(led_pins[0]),
|
||||
.RGB1(led_pins[1]),
|
||||
.RGB2(led_pins[2])
|
||||
);
|
||||
""" % (
|
||||
bit_curren, currents[0], currents[1], currents[2],
|
||||
bit_rgbleden, bits_pwm[0], bits_pwm[1], bits_pwm[2]
|
||||
), file = f)
|
||||
|
||||
# TODO: I2C and SPI
|
||||
|
||||
|
|
@ -133,9 +133,7 @@ for idx in range(num):
|
|||
p = list(np.random.permutation(pins))
|
||||
for i in range(len(pins) - len(glbs) - 16):
|
||||
print("set_io in_pins[%d] %s" % (i, p.pop()), file=f)
|
||||
for i in range(16):
|
||||
print("set_io out_pins[%d] %s" % (i, p.pop()), file=f)
|
||||
# for i in range(len(led_pins)):
|
||||
# print("set_io led_pins[%d] %s" % (i, led_pins[i]), file=f)
|
||||
for i in range(len(led_pins)):
|
||||
print("set_io led_pins[%d] %s" % (i, led_pins[i]), file=f)
|
||||
|
||||
output_makefile(working_dir, "uip")
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
work_rgb_drv/
|
||||
|
|
@ -0,0 +1,181 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import os, sys
|
||||
# SB_RGB_DRV automatic fuzzing script
|
||||
|
||||
device = "u4k"
|
||||
|
||||
# SB_RGB_DRV config bits to be fuzzed
|
||||
# These must be in an order such that a config with bit i set doesn't set any other undiscovered bits yet
|
||||
|
||||
|
||||
fuzz_bits = [
|
||||
"RGB0_CURRENT_0",
|
||||
"RGB0_CURRENT_1",
|
||||
"RGB0_CURRENT_2",
|
||||
"RGB0_CURRENT_3",
|
||||
"RGB0_CURRENT_4",
|
||||
"RGB0_CURRENT_5",
|
||||
|
||||
"RGB1_CURRENT_0",
|
||||
"RGB1_CURRENT_1",
|
||||
"RGB1_CURRENT_2",
|
||||
"RGB1_CURRENT_3",
|
||||
"RGB1_CURRENT_4",
|
||||
"RGB1_CURRENT_5",
|
||||
|
||||
"RGB2_CURRENT_0",
|
||||
"RGB2_CURRENT_1",
|
||||
"RGB2_CURRENT_2",
|
||||
"RGB2_CURRENT_3",
|
||||
"RGB2_CURRENT_4",
|
||||
"RGB2_CURRENT_5"
|
||||
]
|
||||
|
||||
|
||||
# Boilerplate code based on the icefuzz script
|
||||
code_prefix = """
|
||||
module top(
|
||||
input curren,
|
||||
input rgbleden,
|
||||
input r_in,
|
||||
input g_in,
|
||||
input b_in,
|
||||
output r_led,
|
||||
output g_led,
|
||||
output b_led);
|
||||
"""
|
||||
|
||||
def get_param_value(param_name, param_size, fuzz_bit):
|
||||
param = "\"0b";
|
||||
#In the RGB driver, once bit i of a current parameter is set i-1..0 must also be set
|
||||
is_high = False
|
||||
for i in range(param_size - 1, -1, -1):
|
||||
if fuzz_bit == param_name + "_" + str(i) or is_high:
|
||||
param += '1'
|
||||
is_high = True
|
||||
else:
|
||||
param += '0'
|
||||
param += "\""
|
||||
return param
|
||||
def inst_rgb(fuzz_bit):
|
||||
v = ""
|
||||
v += """wire ledpu;
|
||||
SB_LED_DRV_CUR led_cur_inst (
|
||||
.EN(curren),
|
||||
.LEDPU(ledpu));
|
||||
"""
|
||||
v += """SB_RGB_DRV rgb_inst (
|
||||
.RGBPU(ledpu),
|
||||
.RGBLEDEN(rgbleden),
|
||||
.RGB0PWM(r_in),
|
||||
.RGB1PWM(g_in),
|
||||
.RGB2PWM(b_in),
|
||||
.RGB0(r_led),
|
||||
.RGB1(g_led),
|
||||
.RGB2(b_led)
|
||||
);
|
||||
"""
|
||||
|
||||
v += "defparam rgb_inst.RGB0_CURRENT = " + get_param_value("RGB0_CURRENT", 6, fuzz_bit) + ";\n"
|
||||
v += "defparam rgb_inst.RGB1_CURRENT = " + get_param_value("RGB1_CURRENT", 6, fuzz_bit) + ";\n"
|
||||
v += "defparam rgb_inst.RGB2_CURRENT = " + get_param_value("RGB2_CURRENT", 6, fuzz_bit) + ";\n"
|
||||
|
||||
return v;
|
||||
|
||||
def make_vlog(fuzz_bit):
|
||||
vlog = code_prefix
|
||||
vlog += inst_rgb(fuzz_bit)
|
||||
vlog += "endmodule"
|
||||
return vlog
|
||||
|
||||
known_bits = []
|
||||
|
||||
# Set to true to continue even if multiple bits are changed (needed because
|
||||
# of the issue discusssed below)
|
||||
show_all_bits = False #TODO: make this an argument
|
||||
|
||||
#HACK: icecube doesn't let you set all of the config bits to 0,
|
||||
#which makes fuzzing early on annoying as there is never a case
|
||||
#with just 1 bit set. So a tiny bit of semi-manual work is needed
|
||||
#first to discover this (basically run this script with show_all_bits=True
|
||||
#and look for the stuck bit)
|
||||
#TODO: clever code could get rid of this
|
||||
rgb_drv_en_bit = {
|
||||
"u4k" : (0, 18, 5)
|
||||
}
|
||||
|
||||
led_drv_cur_en_bit = {
|
||||
"u4k" : (25, 19, 5)
|
||||
}
|
||||
|
||||
#Return a list of RGB_DRIVER config bits in the format (x, y, bit)
|
||||
def parse_exp(expfile):
|
||||
current_x = 0
|
||||
current_y = 0
|
||||
bits = []
|
||||
with open(expfile, 'r') as f:
|
||||
for line in f:
|
||||
splitline = line.split(' ')
|
||||
if splitline[0].endswith("_tile"):
|
||||
current_x = int(splitline[1])
|
||||
current_y = int(splitline[2])
|
||||
elif splitline[0] == "IpConfig":
|
||||
if splitline[1][:5] == "CBIT_":
|
||||
bitidx = int(splitline[1][5:])
|
||||
bits.append((current_x, current_y, bitidx))
|
||||
return bits
|
||||
|
||||
#Convert a bit tuple as returned from the above to a nice string
|
||||
def bit_to_str(bit):
|
||||
return "(%d, %d, \"CBIT_%d\")" % bit
|
||||
|
||||
#The main fuzzing function
|
||||
def do_fuzz():
|
||||
if not os.path.exists("./work_rgb_drv"):
|
||||
os.mkdir("./work_rgb_drv")
|
||||
known_bits.append(rgb_drv_en_bit[device])
|
||||
known_bits.append(led_drv_cur_en_bit[device])
|
||||
with open("rgb_drv_data_" + device + ".txt", 'w') as dat:
|
||||
for fuzz_bit in fuzz_bits:
|
||||
vlog = make_vlog(fuzz_bit)
|
||||
with open("./work_rgb_drv/rgb_drv.v", 'w') as f:
|
||||
f.write(vlog)
|
||||
with open("./work_rgb_drv/rgb_drv.pcf", 'w') as f:
|
||||
f.write("""
|
||||
set_io r_led 39
|
||||
set_io g_led 40
|
||||
set_io b_led 41
|
||||
""")
|
||||
retval = os.system("bash ../../icecube.sh -" + device + " ./work_rgb_drv/rgb_drv.v > ./work_rgb_drv/icecube.log 2>&1")
|
||||
if retval != 0:
|
||||
sys.stderr.write('ERROR: icecube returned non-zero error code\n')
|
||||
sys.exit(1)
|
||||
retval = os.system("../../../icebox/icebox_explain.py ./work_rgb_drv/rgb_drv.asc > ./work_rgb_drv/rgb_drv.exp")
|
||||
if retval != 0:
|
||||
sys.stderr.write('ERROR: icebox_explain returned non-zero error code\n')
|
||||
sys.exit(1)
|
||||
rgb_bits = parse_exp("./work_rgb_drv/rgb_drv.exp")
|
||||
new_bits = []
|
||||
for set_bit in rgb_bits:
|
||||
if not (set_bit in known_bits):
|
||||
new_bits.append(set_bit)
|
||||
if len(new_bits) == 0:
|
||||
sys.stderr.write('ERROR: no new bits set when setting config bit ' + fuzz_bit + '\n')
|
||||
sys.exit(1)
|
||||
if len(new_bits) > 1:
|
||||
sys.stderr.write('ERROR: multiple new bits set when setting config bit ' + fuzz_bit + '\n')
|
||||
for bit in new_bits:
|
||||
sys.stderr.write('\t' + bit_to_str(bit) + '\n')
|
||||
if not show_all_bits:
|
||||
sys.exit(1)
|
||||
if len(new_bits) == 1:
|
||||
known_bits.append(new_bits[0])
|
||||
if fuzz_bit == "RGB0_CURRENT_0":
|
||||
print(("\"RGB_DRV_EN\":").ljust(24) + bit_to_str(rgb_drv_en_bit[device]) + ",")
|
||||
dat.write(("\"RGB_DRV_EN\":").ljust(24) + bit_to_str(rgb_drv_en_bit[device]) + ",\n")
|
||||
print(("\"LED_DRV_CUR_EN\":").ljust(24) + bit_to_str(led_drv_cur_en_bit[device]) + ",")
|
||||
dat.write(("\"LED_DRV_CUR_EN\":").ljust(24) + bit_to_str(led_drv_cur_en_bit[device]) + ",\n")
|
||||
print(("\"" + fuzz_bit + "\":").ljust(24) + bit_to_str(new_bits[0]) + ",")
|
||||
dat.write(("\"" + fuzz_bit + "\":").ljust(24) + bit_to_str(new_bits[0]) + ",\n")
|
||||
do_fuzz()
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
"RGB_DRV_EN": (0, 18, "CBIT_5"),
|
||||
"LED_DRV_CUR_EN": (25, 19, "CBIT_5"),
|
||||
"RGB0_CURRENT_0": (0, 18, "CBIT_6"),
|
||||
"RGB0_CURRENT_1": (0, 18, "CBIT_7"),
|
||||
"RGB0_CURRENT_2": (0, 19, "CBIT_0"),
|
||||
"RGB0_CURRENT_3": (0, 19, "CBIT_1"),
|
||||
"RGB0_CURRENT_4": (0, 19, "CBIT_2"),
|
||||
"RGB0_CURRENT_5": (0, 19, "CBIT_3"),
|
||||
"RGB1_CURRENT_0": (0, 19, "CBIT_4"),
|
||||
"RGB1_CURRENT_1": (0, 19, "CBIT_5"),
|
||||
"RGB1_CURRENT_2": (0, 19, "CBIT_6"),
|
||||
"RGB1_CURRENT_3": (0, 19, "CBIT_7"),
|
||||
"RGB1_CURRENT_4": (0, 20, "CBIT_0"),
|
||||
"RGB1_CURRENT_5": (0, 20, "CBIT_1"),
|
||||
"RGB2_CURRENT_0": (0, 20, "CBIT_2"),
|
||||
"RGB2_CURRENT_1": (0, 20, "CBIT_3"),
|
||||
"RGB2_CURRENT_2": (0, 20, "CBIT_4"),
|
||||
"RGB2_CURRENT_3": (0, 20, "CBIT_5"),
|
||||
"RGB2_CURRENT_4": (0, 20, "CBIT_6"),
|
||||
"RGB2_CURRENT_5": (0, 20, "CBIT_7"),
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
set_io r_led 39
|
||||
set_io g_led 40
|
||||
set_io b_led 41
|
||||
set_io r_in 25
|
||||
set_io g_in 26
|
||||
set_io b_in 27
|
||||
set_io en 28
|
||||
set_io rgbleden 31
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
module top
|
||||
(
|
||||
input en,
|
||||
input rgbleden,
|
||||
input r_in,
|
||||
input g_in,
|
||||
input b_in,
|
||||
output r_led,
|
||||
output g_led,
|
||||
output b_led);
|
||||
|
||||
wire ledpu;
|
||||
|
||||
SB_LED_DRV_CUR
|
||||
LED_DRV_CUR(.EN(en),
|
||||
.LEDPU(ledpu));
|
||||
|
||||
wire rgbpu;
|
||||
|
||||
SB_RGB_DRV
|
||||
RGB_DRV(.RGBLEDEN(rgbleden),
|
||||
.RGBPU(rgbpu),
|
||||
.RGB0PWM(r_in),
|
||||
.RGB1PWM(g_in),
|
||||
.RGB2PWM(b_in),
|
||||
.RGB0(r_led),
|
||||
.RGB1(g_led),
|
||||
.RGB2(b_led));
|
||||
|
||||
defparam RGB_DRV.RGB0_CURRENT = "0b000011";
|
||||
defparam RGB_DRV.RGB1_CURRENT = "0b001111";
|
||||
defparam RGB_DRV.RGB2_CURRENT = "0b111111";
|
||||
|
||||
assign rgbpu = ledpu;
|
||||
|
||||
endmodule
|
||||
|
|
@ -177,6 +177,9 @@ IOPATH posedge:OUTPUTCLK PADOUT 524.617:917.247:1413.19 566.409
|
|||
CELL PRE_IO_GBUF
|
||||
IOPATH PADSIGNALTOGLOBALBUFFER GLOBALBUFFEROUTPUT 1622.53:2836.85:4370.7 1106.27:1934.21:2980.02
|
||||
|
||||
CELL SB_LED_DRV_CUR
|
||||
IOPATH EN LEDPU 1.72086e+07:3.00878e+07:4.63559e+07 1.72086e+07:3.00878e+07:4.63559e+07
|
||||
|
||||
CELL SB_MAC16_ACC_U_16P16_ALL_PIPELINE
|
||||
HOLD negedge:A[0] posedge:CLK 110.748:193.633:298.328
|
||||
HOLD negedge:A[1] posedge:CLK 109.024:190.62:293.686
|
||||
|
|
@ -4198,6 +4201,11 @@ IOPATH posedge:RCLK RDATA[13] 437.591:765.089:1178.76 437.591:765.08
|
|||
IOPATH posedge:RCLK RDATA[14] 437.591:765.089:1178.76 437.591:765.089:1178.76
|
||||
IOPATH posedge:RCLK RDATA[15] 437.591:765.089:1178.76 437.591:765.089:1178.76
|
||||
|
||||
CELL SB_RGB_DRV
|
||||
IOPATH RGB0PWM RGB0 17208.6:30087.8:46355.9 118002:206316:317869
|
||||
IOPATH RGB1PWM RGB1 17208.6:30087.8:46355.9 118002:206316:317869
|
||||
IOPATH RGB2PWM RGB2 17208.6:30087.8:46355.9 118002:206316:317869
|
||||
|
||||
CELL Sp12to4
|
||||
IOPATH I O 221.254:386.843:596.004 314.672:550.176:847.65
|
||||
|
||||
|
|
|
|||
|
|
@ -172,6 +172,7 @@ InMux.O LogicCell40.in1
|
|||
InMux.O LogicCell40.in3
|
||||
InMux.O SB_HFOSC.CLKHFEN
|
||||
InMux.O SB_HFOSC.CLKHFPU
|
||||
InMux.O SB_LED_DRV_CUR.EN
|
||||
InMux.O SB_LFOSC.CLKLFEN
|
||||
InMux.O SB_LFOSC.CLKLFPU
|
||||
InMux.O SB_MAC16_ACC_U_16P16_ALL_PIPELINE.ADDSUBBOT
|
||||
|
|
@ -2311,6 +2312,10 @@ InMux.O SB_RGBA_DRV.RGB0PWM
|
|||
InMux.O SB_RGBA_DRV.RGB1PWM
|
||||
InMux.O SB_RGBA_DRV.RGB2PWM
|
||||
InMux.O SB_RGBA_DRV.RGBLEDEN
|
||||
InMux.O SB_RGB_DRV.RGB0PWM
|
||||
InMux.O SB_RGB_DRV.RGB1PWM
|
||||
InMux.O SB_RGB_DRV.RGB2PWM
|
||||
InMux.O SB_RGB_DRV.RGBLEDEN
|
||||
InMux.O SB_SPRAM256KA.ADDRESS[0]
|
||||
InMux.O SB_SPRAM256KA.ADDRESS[10]
|
||||
InMux.O SB_SPRAM256KA.ADDRESS[11]
|
||||
|
|
@ -2532,6 +2537,7 @@ SB_HFOSC.CLKHF Odrv4.I
|
|||
SB_LEDDA_IP.PWMOUT0 DummyBuf.I
|
||||
SB_LEDDA_IP.PWMOUT1 DummyBuf.I
|
||||
SB_LEDDA_IP.PWMOUT2 DummyBuf.I
|
||||
SB_LED_DRV_CUR.LEDPU SB_RGB_DRV.RGBPU
|
||||
SB_LFOSC.CLKLF GlobalMux.I
|
||||
SB_LFOSC.CLKLF Odrv12.I
|
||||
SB_MAC16_ACC_U_16P16_ALL_PIPELINE.ACCUMCO SB_MAC16_ACC_U_16P16_ALL_PIPELINE.ACCUMCI
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ hierarchy -generate SB_MAC16 i:CLK i:CE i:C i:A i:B i:D i:AHOLD i:BHOLD i:CHOLD
|
|||
hierarchy -generate SB_SPRAM256KA i:ADDRESS i:DATAIN i:MASKWREN i:WREN i:CHIPSELECT i:CLOCK i:STANDBY i:SLEEP \
|
||||
i:POWEROFF i:DATAOUT
|
||||
hierarchy -generate SB_RGBA_DRV i:CURREN i:RGBLEDEN i:RGB*PWM o:RGB*
|
||||
hierarchy -generate SB_LED_DRV_CUR i:EN o:LEDPU
|
||||
hierarchy -generate SB_RGB_DRV i:RGBPU i:RGBLEDEN i:RGB*PWM o:RGB*
|
||||
hierarchy -generate SB_LFOSC i:CLKLFPU i:CLKLFEN o:CLKLF
|
||||
hierarchy -generate SB_HFOSC i:CLKHFPU i:CLKHFEN o:CLKHF
|
||||
hierarchy -generate SB_LEDDA_IP i:LEDDCS i:LEDDCLK i:LEDDDAT* i:LEDDADDR* i:LEDDDEN i:LEDDEXE i:LEDDRST o:PWMOUT* o:LEDDON
|
||||
|
|
|
|||
Loading…
Reference in New Issue