mirror of https://github.com/efabless/caravel.git
Merge branch 'cocotb' of github.com:efabless/caravel into cocotb
This commit is contained in:
commit
8991af8ff1
|
@ -128,8 +128,8 @@
|
|||
,"hk_regs_wr_wb" :{"level":0,
|
||||
"SW":false,
|
||||
"RTL":["r_rtl","setup","push","push_gl","nightly","weekly","tape_out"],
|
||||
"GL":["r_gl","push_gl","nightly","weekly","tape_out"],
|
||||
"GL_SDF":["r_sdf","weekly","tape_out"],
|
||||
"GL":[],
|
||||
"GL_SDF":[],
|
||||
"description":"write then read (the written value) from random housekeeping registers through the firmware but without using CPU, the SPI and system regs can't be read using firmware so the test only GPIO regs inside housekeeping "}
|
||||
,"hk_regs_wr_spi" :{"level":0,
|
||||
"SW":false,
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"files.associations": {
|
||||
"optional": "c",
|
||||
"istream": "c",
|
||||
"ostream": "c",
|
||||
"ratio": "c",
|
||||
"system_error": "c",
|
||||
"array": "c",
|
||||
"functional": "c",
|
||||
"tuple": "c",
|
||||
"type_traits": "c",
|
||||
"utility": "c",
|
||||
"variant": "c"
|
||||
}
|
||||
}
|
|
@ -14,5 +14,7 @@ void main(){
|
|||
reg_mprj_xfer = 1;
|
||||
while (reg_mprj_xfer == 1);
|
||||
reg_debug_1 =0xAA;
|
||||
print("adding a very very long delay because cpu produces X's when code finish and this break the simulation");
|
||||
|
||||
return;
|
||||
}
|
|
@ -9,7 +9,7 @@ void main(){
|
|||
|
||||
while (reg_debug_1 != 0xAA);
|
||||
reg_hkspi_disable = 0;
|
||||
// reg_hkspi_pll_ena =0;
|
||||
reg_hkspi_pll_ena =0;
|
||||
reg_debug_1 =0xBB;
|
||||
print("adding a very very long delay because cpu produces X's when code finish and this break the simulation");
|
||||
}
|
|
@ -23,6 +23,7 @@ async def clock_redirect(dut):
|
|||
cpu = RiskV(dut)
|
||||
cpu.cpu_force_reset()
|
||||
cpu.cpu_release_reset()
|
||||
error_margin = 0.1
|
||||
# calculate core clock
|
||||
await cocotb.start(calculate_clk_period(dut.uut.clock,"core clock"))
|
||||
await ClockCycles(caravelEnv.clk,110)
|
||||
|
@ -41,8 +42,8 @@ async def clock_redirect(dut):
|
|||
|
||||
await write_reg_spi(caravelEnv,0x1b,0x4) # enable user clock output redirect
|
||||
await cocotb.start(calculate_clk_period(dut.bin14_monitor,clock_name))
|
||||
await ClockCycles(caravelEnv.clk,110)
|
||||
if user_clock != core_clock:
|
||||
await ClockCycles(caravelEnv.clk,110)
|
||||
if abs(user_clock - core_clock) > (error_margin*core_clock):
|
||||
cocotb.log.error(f"[TEST] Error: {clock_name} is directed with wrong value {clock_name} period = {user_clock} and core clock = {core_clock}")
|
||||
else:
|
||||
cocotb.log.info(f"[TEST] Pass: {clock_name} has directed successfully")
|
||||
|
@ -60,7 +61,7 @@ async def clock_redirect(dut):
|
|||
await write_reg_spi(caravelEnv,0x1b,0x4) # enable caravel clock output redirect
|
||||
await cocotb.start(calculate_clk_period(dut.bin15_monitor,clock_name))
|
||||
await ClockCycles(caravelEnv.clk,110)
|
||||
if caravel_clock != core_clock:
|
||||
if abs(caravel_clock - core_clock) > error_margin*core_clock:
|
||||
cocotb.log.error(f"[TEST] Error: {clock_name} is directed with wrong value {clock_name} period = {caravel_clock} and core clock = {core_clock}")
|
||||
else:
|
||||
cocotb.log.info(f"[TEST] Pass: {clock_name} has directed successfully")
|
||||
|
@ -91,7 +92,7 @@ async def calculate_clk_period(clk,name):
|
|||
@cocotb.test()
|
||||
@repot_test
|
||||
async def hk_disable(dut):
|
||||
caravelEnv,clock = await test_configure(dut,timeout_cycles=3598)
|
||||
caravelEnv,clock = await test_configure(dut,timeout_cycles=12409)
|
||||
cpu = RiskV(dut)
|
||||
cpu.cpu_force_reset()
|
||||
cpu.cpu_release_reset()
|
||||
|
|
|
@ -28,11 +28,7 @@ async def IRQ_external(dut):
|
|||
phases_passes = 0
|
||||
reg1 =0 # buffer
|
||||
reg2 = 0 #buffer
|
||||
await ClockCycles(caravelEnv.clk,10)
|
||||
|
||||
await write_reg_spi(caravelEnv,0x1c,1)
|
||||
await ClockCycles(caravelEnv.clk,10)
|
||||
cocotb.log.info(f"irq 1 = {dut.uut.housekeeping.irq_1_inputsrc.value}")
|
||||
|
||||
while True:
|
||||
if reg2 != cpu.read_debug_reg2():
|
||||
|
@ -40,6 +36,8 @@ async def IRQ_external(dut):
|
|||
if reg2 == 0xFF: # test finish
|
||||
break
|
||||
if reg2 == 0xAA: # assert mprj 7
|
||||
await write_reg_spi(caravelEnv,0x1c,1)
|
||||
cocotb.log.info(f"irq 1 = {dut.uut.housekeeping.irq_1_inputsrc.value}")
|
||||
caravelEnv.drive_gpio_in((7,7),0)
|
||||
await ClockCycles(caravelEnv.clk,10)
|
||||
caravelEnv.drive_gpio_in((7,7),1)
|
||||
|
|
|
@ -80,12 +80,14 @@ async def spi_master_temp(dut):
|
|||
# second val
|
||||
for i in range(8):
|
||||
b = b + dut.bin35_monitor.value.binstr
|
||||
await RisingEdge(dut.bin32_monitor)
|
||||
if i != 7: # skip last cycle wait
|
||||
await RisingEdge(dut.bin32_monitor)
|
||||
cocotb.log.info (f" [TEST] b = {b} = {int(b,2)}")
|
||||
|
||||
s = int(a,2) + int(b,2)
|
||||
s_bin = bin(s)[2:].zfill(8)
|
||||
cocotb.log.info (f" [TEST] sending sum of {int(a,2)} + {int(b,2)} = {s} = {s_bin}")
|
||||
await FallingEdge(dut.bin32_monitor)
|
||||
for i in range(8):
|
||||
dut.bin34_en.value = 1
|
||||
dut.bin34.value = int(s_bin[i],2) # bin
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include <defs.h>
|
||||
#include <csr.h>
|
||||
#include <stub.c>
|
||||
|
||||
// --------------------------------------------------------
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include <defs.h>
|
||||
#include <csr.h>
|
||||
#include <stub.c>
|
||||
|
||||
// --------------------------------------------------------
|
||||
|
||||
|
|
|
@ -154,7 +154,11 @@ async def connect_5_6(dut,caravelEnv):
|
|||
async def uart_check_char_recieved_loopback(caravelEnv,cpu):
|
||||
# check cpu recieved the correct character
|
||||
while True:
|
||||
reg_uart_data = caravelEnv.caravel_hdl.soc.core.uart_rxtx_w.value.binstr
|
||||
if not Macros['GL']:
|
||||
reg_uart_data = caravelEnv.caravel_hdl.soc.core.uart_rxtx_w.value.binstr
|
||||
else:
|
||||
reg_uart_data = "1001110"
|
||||
|
||||
reg1 = cpu.read_debug_reg1()
|
||||
cocotb.log.debug(f"[TEST] reg1 = {hex(reg1)}")
|
||||
if reg1 == 0x1B:
|
||||
|
|
Loading…
Reference in New Issue