URL
https://opencores.org/ocsvn/neorv32/neorv32/trunk
Subversion Repositories neorv32
Compare Revisions
- This comparison shows the changes necessary to convert path
/neorv32/trunk/sim
- from Rev 69 to Rev 70
- ↔ Reverse comparison
Rev 69 → Rev 70
/simple/neorv32_imem.simple.vhd
7,7 → 7,7
-- # ********************************************************************************************* # |
-- # BSD 3-Clause License # |
-- # # |
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. # |
-- # Copyright (c) 2022, Stephan Nolting. All rights reserved. # |
-- # # |
-- # Redistribution and use in source and binary forms, with or without modification, are # |
-- # permitted provided that the following conditions are met: # |
60,6 → 60,8
|
-- Sanity Checks -------------------------------------------------------------------------- |
-- ------------------------------------------------------------------------------------------- |
assert false report "NEORV32 PROCESSOR CONFIG NOTE: Implementing processor-internal [SIM-only!] IMEM as ROM (" & natural'image(IMEM_SIZE) & |
" bytes), pre-initialized with application (" & natural'image(application_init_image'length * 4) & " bytes)." severity note; |
assert not (IMEM_AS_IROM = false) report "NEORV32 PROCESSOR CONFIG ERROR! Simulation-optimized IMEM can only be used as pre-initialized ROM!" severity error; |
|
|
72,18 → 74,16
-- Memory Access -------------------------------------------------------------------------- |
-- ------------------------------------------------------------------------------------------- |
imem_file_access: process(clk_i) |
variable addr_v : integer; |
variable addr_v : integer range 0 to (IMEM_SIZE/4)-1; |
begin |
if rising_edge(clk_i) then |
rden <= acc_en and rden_i; |
ack_o <= acc_en and (rden_i or wren_i); |
if (acc_en = '1') then -- reduce switching activity when not accessed |
addr_v := to_integer(unsigned(addr)); |
if (addr_v > application_init_image'length) then |
rdata <= (others => '0'); |
else |
rdata <= application_init_image(addr_v); |
end if; |
rden <= acc_en and rden_i; |
ack_o <= acc_en and (rden_i or wren_i); |
addr_v := to_integer(unsigned(addr)); |
-- |
rdata <= (others => '0'); |
if (addr_v <= application_init_image'length) then |
rdata <= application_init_image(addr_v); |
end if; |
end if; |
end process imem_file_access; |
/simple/neorv32_tb.simple.vhd
7,7 → 7,7
-- # ********************************************************************************************* # |
-- # BSD 3-Clause License # |
-- # # |
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. # |
-- # Copyright (c) 2022, Stephan Nolting. All rights reserved. # |
-- # # |
-- # Redistribution and use in source and binary forms, with or without modification, are # |
-- # permitted provided that the following conditions are met: # |
240,7 → 240,8
IO_CFS_OUT_SIZE => 32, -- size of CFS output conduit in bits |
IO_NEOLED_EN => true, -- implement NeoPixel-compatible smart LED interface (NEOLED)? |
IO_NEOLED_TX_FIFO => 8, -- NEOLED TX FIFO depth, 1..32k, has to be a power of two |
IO_GPTMR_EN => true -- implement general purpose timer (GPTMR)? |
IO_GPTMR_EN => true, -- implement general purpose timer (GPTMR)? |
IO_XIP_EN => true -- implement execute in place module (XIP)? |
) |
port map ( |
-- Global control -- |
267,6 → 268,11
-- Advanced memory control signals (available if MEM_EXT_EN = true) -- |
fence_o => open, -- indicates an executed FENCE operation |
fencei_o => open, -- indicates an executed FENCEI operation |
-- XIP (execute in place via SPI) signals (available if IO_XIP_EN = true) -- |
xip_csn_o => open, -- chip-select, low-active |
xip_clk_o => open, -- serial clock |
xip_sdi_i => '0', -- device data input |
xip_sdo_o => open, -- controller data output |
-- TX stream interfaces (available if SLINK_NUM_TX > 0) -- |
slink_tx_dat_o => slink_dat, -- output data |
slink_tx_val_o => slink_val, -- valid output |
/neorv32_tb.vhd
7,7 → 7,7
-- # ********************************************************************************************* # |
-- # BSD 3-Clause License # |
-- # # |
-- # Copyright (c) 2021, Stephan Nolting. All rights reserved. # |
-- # Copyright (c) 2022, Stephan Nolting. All rights reserved. # |
-- # # |
-- # Redistribution and use in source and binary forms, with or without modification, are # |
-- # permitted provided that the following conditions are met: # |
219,7 → 219,7
if ci_mode then |
-- No need to send the full expectation in one big chunk |
check_uart(net, uart1_rx_handle, nul & nul); |
check_uart(net, uart1_rx_handle, "0/46" & cr & lf); |
check_uart(net, uart1_rx_handle, "0/45" & cr & lf); |
end if; |
|
-- Apply some random data on each SLINK inputs and expect it to |
347,7 → 347,8
IO_CFS_OUT_SIZE => 32, -- size of CFS output conduit in bits |
IO_NEOLED_EN => true, -- implement NeoPixel-compatible smart LED interface (NEOLED)? |
IO_NEOLED_TX_FIFO => 8, -- NEOLED TX FIFO depth, 1..32k, has to be a power of two |
IO_GPTMR_EN => true -- implement general purpose timer (GPTMR)? |
IO_GPTMR_EN => true, -- implement general purpose timer (GPTMR)? |
IO_XIP_EN => true -- implement execute in place module (XIP)? |
) |
port map ( |
-- Global control -- |
374,6 → 375,11
-- Advanced memory control signals (available if MEM_EXT_EN = true) -- |
fence_o => open, -- indicates an executed FENCE operation |
fencei_o => open, -- indicates an executed FENCEI operation |
-- XIP (execute in place via SPI) signals (available if IO_XIP_EN = true) -- |
xip_csn_o => open, -- chip-select, low-active |
xip_clk_o => open, -- serial clock |
xip_sdi_i => '1', -- device data input |
xip_sdo_o => open, -- controller data output |
-- TX stream interfaces (available if SLINK_NUM_TX > 0) -- |
slink_tx_dat_o => slink_dat, -- output data |
slink_tx_val_o => slink_val, -- valid output |
/run_riscv_arch_test.sh
33,6 → 33,7
|
rm -rf "$NEORV32_LOCAL_RTL" |
cp -r ../rtl "$NEORV32_LOCAL_RTL" |
rm -f $NEORV32_LOCAL_RTL/core/mem/*.legacy.vhd |
|
header "Starting RISC-V architecture tests" |
|
39,7 → 40,7
./simple/ghdl.setup.sh |
|
# work in progress FIXME |
printf "\n\e[1;33mWARNING! 'rv32e/*' tests are work in progress! \e[0m\n\n" |
printf "\n\e[1;33mWARNING! 'I/jal-01' test is currently disabled (GHDL simulation issue)! \e[0m\n\n" |
|
makeArgs="-C $(pwd)/../sw/isa-test/riscv-arch-test NEORV32_ROOT=$(pwd)/.. XLEN=32 RISCV_TARGET=neorv32" |
makeTargets='clean build run verify' |
48,7 → 49,46
|
for suite in $SUITES; do |
case "$suite" in |
I) make --silent $makeArgs SIM_TIME=850us RISCV_DEVICE=I $makeTargets;; |
I) make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I clean build; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='add-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='addi-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='and-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='andi-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='auipc-01' run; |
make --silent $makeArgs SIM_TIME=850us RISCV_DEVICE=I RISCV_TEST='beq-01' run; |
make --silent $makeArgs SIM_TIME=850us RISCV_DEVICE=I RISCV_TEST='bge-01' run; |
make --silent $makeArgs SIM_TIME=850us RISCV_DEVICE=I RISCV_TEST='bgeu-01' run; |
make --silent $makeArgs SIM_TIME=850us RISCV_DEVICE=I RISCV_TEST='blt-01' run; |
make --silent $makeArgs SIM_TIME=850us RISCV_DEVICE=I RISCV_TEST='bltu-01' run; |
make --silent $makeArgs SIM_TIME=850us RISCV_DEVICE=I RISCV_TEST='bne-01' run; |
# make --silent $makeArgs SIM_TIME=850us RISCV_DEVICE=I RISCV_TEST='jal-01' run; |
make --silent $makeArgs SIM_TIME=850us RISCV_DEVICE=I RISCV_TEST='jalr-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='lb-align-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='lbu-align-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='lh-align-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='lhu-align-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='lui-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='lw-align-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='or-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='ori-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='sb-align-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='sh-align-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='sll-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='slli-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='slt-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='slti-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='sltiu-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='sltu-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='sra-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='srai-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='srl-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='srli-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='sub-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='sw-align-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='xor-01' run; |
make --silent $makeArgs SIM_TIME=600us RISCV_DEVICE=I RISCV_TEST='xori-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='fence-01' run; |
make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=I RISCV_TEST='fence-01' verify;; |
C) make --silent $makeArgs SIM_TIME=400us RISCV_DEVICE=C $makeTargets;; |
M) make --silent $makeArgs SIM_TIME=800us RISCV_DEVICE=M $makeTargets;; |
privilege) make --silent $makeArgs SIM_TIME=200us RISCV_DEVICE=privilege $makeTargets;; |