零门槛上手的RISC-V项目:nerv(附Verilog-vs-SysVerilog)

nerv这个项目同样是编写了Makefile的verilog项目,不过它的项目显示是用SystemVerilog而不是verilog,然而又又又没有用到SystemVerilog区别于verilog的特殊语法,比如logic变量,或者interface接口声明,或者interface接口中的modport,或者结构体struct及用于多个信号打包在一起类似于struct的pack,也也也没有区别于always@*的always_xxx这种增强的语法关键词,但文件名却是.sv文件。

还是基于老旧主机上的ubuntu22以及配套的iverilog, verilator, riscv64-unknown-elf-工具,看看能否做到零门槛上手。

chipcamp@chipcamp:~/src/riscv$ cat /etc/os-release ##ubuntu22系统@十年旧机器。

PRETTY_NAME="Ubuntu 22.04 LTS"

NAME="Ubuntu"

VERSION_ID="22.04"

VERSION ="22.04 (Jammy Jellyfish)"

VERSION_CODENAME=jammy

ID=ubuntu

ID_LIKE=debian

HOME_URL="https://www.ubuntu.com/"

SUPPORT_URL="https://help.ubuntu.com/"

BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"

PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"

UBUNTU_CODENAME=jammy

chipcamp@chipcamp:~/src/riscv$ which iverilog

/usr/bin/iverilog

chipcamp@chipcamp:~/src/riscv$ which verilator

/usr/bin/ verilator

chipcamp@chipcamp:~/src/riscv$ which gtkwave

/usr/bin/gtkwave

chipcamp@chipcamp:~/src/riscv$ which riscv64-unknown-elf-gcc

/usr/bin/riscv64-unknown-elf-gcc

chipcamp@chipcamp:~/src/riscv$

chipcamp@chipcamp:~/src/riscv$ dpkg-query -S /usr/bin/iverilog /usr/bin/verilator /usr/bin/gtkwave /usr/bin/riscv64-unknown-elf-gcc

iverilog: /usr/bin/iverilog

verilator: /usr/bin/verilator

gtkwave: /usr/bin/gtkwave

gcc-riscv64-unknown-elf: /usr/bin/riscv64-unknown-elf-gcc

------以上所有的软件,都是使用apt-get install安装的,这是本文所说的"0依赖"。
------看看能不能零门槛体验,结果,在这个环境里失败了。如下所示。

chipcamp@chipcamp:~/src/riscv$ git clone https://gitcode.com/chipcamp/nerv.git

Cloning into 'nerv'...

remote: Enumerating objects: 615, done.

remote: Total 615 (delta 0), reused 0 (delta 0), pack-reused 615 (from 1)

Receiving objects: 100% (615/615), 3.85 MiB | 538.00 KiB/s, done.

Resolving deltas: 100% (387/387), done.

chipcamp@chipcamp:~/src/riscv$ cd nerv

chipcamp@chipcamp:~/src/riscv/nerv$ ls -la

total 184

drwxrwxr-x 6 chipcamp chipcamp 4096 Oct 7 12:39 .

drwxrwxr-x 5 chipcamp chipcamp 4096 Oct 7 12:39 ..

drwxrwxr-x 2 chipcamp chipcamp 4096 Oct 7 12:39 axi_cache

-rw-rw-r-- 1 chipcamp chipcamp 1849 Oct 7 12:39 cexdata.sh

-rw-rw-r-- 1 chipcamp chipcamp 2133 Oct 7 12:39 checks.cfg

-rw-rw-r-- 1 chipcamp chipcamp 853 Oct 7 12:39 COPYING

-rw-rw-r-- 1 chipcamp chipcamp 2190 Oct 7 12:39 disasm.py

drwxrwxr-x 2 chipcamp chipcamp 4096 Oct 7 12:39 docs

drwxrwxr-x 3 chipcamp chipcamp 4096 Oct 7 12:39 examples

-rw-rw-r-- 1 chipcamp chipcamp 1524 Oct 7 12:39 firmware.c

-rw-rw-r-- 1 chipcamp chipcamp 2178 Oct 7 12:39 firmware.s

drwxrwxr-x 8 chipcamp chipcamp 4096 Oct 7 12:39 .git

-rw-rw-r-- 1 chipcamp chipcamp 106 Oct 7 12:39 .gitignore

-rw-rw-r-- 1 chipcamp chipcamp 532 Oct 7 12:39 imemcheck.sby

-rw-rw-r-- 1 chipcamp chipcamp 2310 Oct 7 12:39 imemcheck.sv

-rw-rw-r-- 1 chipcamp chipcamp 1899 Oct 7 12:39 Makefile

-rw-rw-r-- 1 chipcamp chipcamp 24235 Oct 7 12:39 NERV.png

-rw-rw-r-- 1 chipcamp chipcamp 2339 Oct 7 12:39 nervsoc.sv

-rw-rw-r-- 1 chipcamp chipcamp 53665 Oct 7 12:39 nerv.sv

-rw-rw-r-- 1 chipcamp chipcamp 1173 Oct 7 12:39 README.md

-rw-rw-r-- 1 chipcamp chipcamp 2505 Oct 7 12:39 sections.lds

-rw-rw-r-- 1 chipcamp chipcamp 3269 Oct 7 12:39 testbench.gtkw

-rw-rw-r-- 1 chipcamp chipcamp 9733 Oct 7 12:39 testbench.sv

-rw-rw-r-- 1 chipcamp chipcamp 3918 Oct 7 12:39 trace.gtkw

-rw-rw-r-- 1 chipcamp chipcamp 3323 Oct 7 12:39 vectors.s

-rw-rw-r-- 1 chipcamp chipcamp 3883 Oct 7 12:39 wrapper.sv

chipcamp@chipcamp:~/src/riscv/nerv$ more Makefile

NERV -- Naive Educational RISC-V Processor

TOOLCHAIN_PREFIX?=riscv64-unknown-elf-

RISCV_ARCH?=rv32i(shell (TOOLCHAIN_PREFIX)as -march=rv32i_zicsr --dump-config 2>/dev/null && echo _zicsr)

test: firmware.hex testbench

vvp -N testbench +vcd

firmware.elf: firmware.s vectors.s firmware.c

(TOOLCHAIN_PREFIX)gcc -march=(RISCV_ARCH) -mabi=ilp32 -Os -Wall -Wextra -Wl,-Bstatic,-T,sections.lds,--strip-debug -ffreestanding -nostdlib -o @ ^

firmware.hex: firmware.elf

(TOOLCHAIN_PREFIX)objcopy -O verilog < $@

testbench: testbench.sv nerv.sv

iverilog -g2012 -o testbench -D STALL -D NERV_DBGREGS testbench.sv nerv.sv

checks:

python3 ../../checks/genchecks.py

$(MAKE) -C checks

check: checks

bash cexdata.sh

cat cexdata/warnings.txt

cat cexdata/status.txt

show:

gtkwave testbench.vcd testbench.gtkw >> gtkwave.log 2>&1 &

trace:

gtkwave cexdata/checks_$(TRACE_CHECK)_ch0.vcd trace.gtkw >> gtkwave.log 2>&1 &

clean:

rm -rf firmware.elf firmware.hex testbench testbench.vcd gtkwave.log

rm -rf disasm.o disasm.s checks/ cexdata/

chipcamp@chipcamp:~/src/riscv/nerv$ make

riscv64-unknown-elf-gcc -march=rv32i_zicsr -mabi=ilp32 -Os -Wall -Wextra -Wl,-Bstatic,-T,sections.lds,--strip-debug -ffreestanding -nostdlib -o firmware.elf firmware.s vectors.s firmware.c

cc1: error: '-march=rv32i_zicsr': unsupported ISA subset 'z'

make: *** Makefile:26: firmware.elf Error 1

chipcamp@chipcamp:~/src/riscv/nerv$ riscv64-unknown-elf-gcc --version

riscv64-unknown-elf-gcc () 10.2.0

Copyright (C) 2020 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

chipcamp@chipcamp:~/src/riscv/nerv$

换一个环境,是ubuntu24的LTS版本,则可以了。记录如下。

chipcamp@ChipCamp:~/src/temp$ git clone https://gitcode.com/chipcamp/nerv.git

Cloning into 'nerv'...

remote: Enumerating objects: 615, done.

remote: Total 615 (delta 0), reused 0 (delta 0), pack-reused 615 (from 1)

Receiving objects: 100% (615/615), 3.85 MiB | 697.00 KiB/s, done.

Resolving deltas: 100% (387/387), done.

chipcamp@ChipCamp:~/src/temp$ date

Wed Oct 7 13:13:25 CST 2026

chipcamp@ChipCamp:~/src/temp$ cd nerv

chipcamp@ChipCamp:~/src/temp/nerv$ ls -l

total 168

-rw-rw-r-- 1 chipcamp chipcamp 853 Oct 7 13:13 COPYING

-rw-rw-r-- 1 chipcamp chipcamp 1899 Oct 7 13:13 Makefile

-rw-rw-r-- 1 chipcamp chipcamp 24235 Oct 7 13:13 NERV.png

-rw-rw-r-- 1 chipcamp chipcamp 1173 Oct 7 13:13 README.md

drwxrwxr-x 2 chipcamp chipcamp 4096 Oct 7 13:13 axi_cache

-rw-rw-r-- 1 chipcamp chipcamp 1849 Oct 7 13:13 cexdata.sh

-rw-rw-r-- 1 chipcamp chipcamp 2133 Oct 7 13:13 checks.cfg

-rw-rw-r-- 1 chipcamp chipcamp 2190 Oct 7 13:13 disasm.py

drwxrwxr-x 2 chipcamp chipcamp 4096 Oct 7 13:13 docs

drwxrwxr-x 3 chipcamp chipcamp 4096 Oct 7 13:13 examples

-rw-rw-r-- 1 chipcamp chipcamp 1524 Oct 7 13:13 firmware.c

-rw-rw-r-- 1 chipcamp chipcamp 2178 Oct 7 13:13 firmware.s

-rw-rw-r-- 1 chipcamp chipcamp 532 Oct 7 13:13 imemcheck.sby

-rw-rw-r-- 1 chipcamp chipcamp 2310 Oct 7 13:13 imemcheck.sv

-rw-rw-r-- 1 chipcamp chipcamp 53665 Oct 7 13:13 nerv.sv

-rw-rw-r-- 1 chipcamp chipcamp 2339 Oct 7 13:13 nervsoc.sv

-rw-rw-r-- 1 chipcamp chipcamp 2505 Oct 7 13:13 sections.lds

-rw-rw-r-- 1 chipcamp chipcamp 3269 Oct 7 13:13 testbench.gtkw

-rw-rw-r-- 1 chipcamp chipcamp 9733 Oct 7 13:13 testbench.sv

-rw-rw-r-- 1 chipcamp chipcamp 3918 Oct 7 13:13 trace.gtkw

-rw-rw-r-- 1 chipcamp chipcamp 3323 Oct 7 13:13 vectors.s

-rw-rw-r-- 1 chipcamp chipcamp 3883 Oct 7 13:13 wrapper.sv

chipcamp@ChipCamp:~/src/temp/nerv$ make

riscv64-unknown-elf-gcc -march=rv32i_zicsr -mabi=ilp32 -Os -Wall -Wextra -Wl,-Bstatic,-T,sections.lds,--strip-debug -ffreestanding -nostdlib -o firmware.elf firmware.s vectors.s firmware.c

/usr/lib/gcc/riscv64-unknown-elf/13.2.0/../../../riscv64-unknown-elf/bin/ld: warning: firmware.elf has a LOAD segment with RWX permissions

riscv64-unknown-elf-objcopy -O verilog firmware.elf firmware.hex

iverilog -g2012 -o testbench -D STALL -D NERV_DBGREGS testbench.sv nerv.sv

nerv.sv:687: vvp.tgt sorry: Case unique/unique0 qualities are ignored.

vvp -N testbench +vcd

VCD info: dumpfile testbench.vcd opened for output.

Hello World!

Hello World again-----LUSimulated 889 cycles

testbench.sv:249: $finish called at 8900 (1s)

chipcamp@ChipCamp:~/src/temp/nerv$ /usr/bin/riscv64-unknown-elf-gcc --version

riscv64-unknown-elf-gcc (13.2.0-11ubuntu1+12) 13.2.0

Copyright (C) 2023 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

chipcamp@ChipCamp:~/src/temp/nerv$ cat /etc/os-release

PRETTY_NAME="Ubuntu 24.04.3 LTS"

NAME="Ubuntu"

VERSION_ID="24.04"

VERSION="24.04.3 LTS (Noble Numbat)"

VERSION_CODENAME=noble

ID=ubuntu

ID_LIKE=debian

HOME_URL="https://www.ubuntu.com/"

SUPPORT_URL="https://help.ubuntu.com/"

BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"

PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"

UBUNTU_CODENAME=noble

LOGO=ubuntu-logo

chipcamp@ChipCamp:~/src/temp/nerv$

----可以看出,nerv项目在Ubuntu24.04 LTS版本及配套的riscv64-unknown-elf-gcc 13.2.0下,是一键Make运行的。

----考虑到现在的时间点,Ubuntu24.04LTS不算很老,因此nerv仍然可以认为是零门槛体验的。

----顺便看一下上一个例子darkriscv的make all失败在riscv64-unknown-elf-gcc编译过程中,看看在Ubuntu24.04 LTS with riscv-gcc-13.2是否还存在。如下。

chipcamp@ChipCamp:~/src/temp/nerv$ /usr/bin/riscv64-unknown-elf-gcc --version

riscv64-unknown-elf-gcc (13.2.0-11ubuntu1+12) 13.2.0

Copyright (C) 2023 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

chipcamp@ChipCamp:~/src/temp/nerv$ cat /etc/os-release

PRETTY_NAME="Ubuntu 24.04.3 LTS"

NAME="Ubuntu"

VERSION_ID="24.04"

VERSION="24.04.3 LTS (Noble Numbat)"

VERSION_CODENAME=noble

ID=ubuntu

ID_LIKE=debian

HOME_URL="https://www.ubuntu.com/"

SUPPORT_URL="https://help.ubuntu.com/"

BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"

PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"

UBUNTU_CODENAME=noble

LOGO=ubuntu-logo

chipcamp@ChipCamp:~/src/temp/nerv cd .. chipcamp@ChipCamp:\~/src/temp git clone https://gitcode.com/chipcamp/darkriscv.git

Cloning into 'darkriscv'...

remote: Enumerating objects: 3796, done.

remote: Total 3796 (delta 0), reused 0 (delta 0), pack-reused 3796 (from 1)

Receiving objects: 100% (3796/3796), 4.96 MiB | 698.00 KiB/s, done.

Resolving deltas: 100% (2536/2536), done.

chipcamp@ChipCamp:~/src/temp$ cd darkriscv

chipcamp@ChipCamp:~/src/temp/darkriscv$ make all

make -C src all

make1: Entering directory '/home/chipcamp/src/temp/darkriscv/src'

/usr/bin/riscv64-unknown-elf-gcc -march=rv32i_zicsr -mabi=ilp32 -mlittle-endian -c -o boot.o boot.S

/usr/bin/riscv64-unknown-elf-cpp -P -DMLEN=(awk '/define MLEN/ { print 2\*\*3 }' ../rtl/config.vh) darksocv.lds darksocv.ld

make -C darkshell all

make2: Entering directory '/home/chipcamp/src/temp/darkriscv/src/darkshell'

/usr/bin/riscv64-unknown-elf-gcc -Wall -fcommon -ffreestanding -Os -fno-delete-null-pointer-checks -mlittle-endian -march=rv32i_zicsr -mabi=ilp32 -Idarklibc/include -I../darklibc/include -D__RISCV__ -DBUILD="\"Wed, 07 Oct 2026 13:36:01 +0800\"" -DARCH="\"rv32i_zicsr\"" -mno-div -mcmodel=medany -S main.c -o main.s

/usr/bin/riscv64-unknown-elf-as -march=rv32i_zicsr -mabi=ilp32 -mlittle-endian -c main.s -o main.o

/usr/bin/riscv64-unknown-elf-ar -rcs darkshell.a main.o

/usr/bin/riscv64-unknown-elf-ranlib darkshell.a

sources ok for darkshell.a.

make2: Leaving directory '/home/chipcamp/src/temp/darkriscv/src/darkshell'

make -C darklibc all

make2: Entering directory '/home/chipcamp/src/temp/darkriscv/src/darklibc'

/usr/bin/riscv64-unknown-elf-gcc -Wall -fcommon -ffreestanding -Os -fno-delete-null-pointer-checks -mlittle-endian -march=rv32i_zicsr -mabi=ilp32 -Idarklibc/include -I../darklibc/include -D__RISCV__ -DBUILD="\"Wed, 07 Oct 2026 13:36:01 +0800\"" -DARCH="\"rv32i_zicsr\"" -mno-div -mcmodel=medany -Iinclude -S stdio.c -o stdio.s

/usr/bin/riscv64-unknown-elf-gcc -Wall -fcommon -ffreestanding -Os -fno-delete-null-pointer-checks -mlittle-endian -march=rv32i_zicsr -mabi=ilp32 -Idarklibc/include -I../darklibc/include -D__RISCV__ -DBUILD="\"Wed, 07 Oct 2026 13:36:01 +0800\"" -DARCH="\"rv32i_zicsr\"" -mno-div -mcmodel=medany -Iinclude -S io.c -o io.s

/usr/bin/riscv64-unknown-elf-gcc -Wall -fcommon -ffreestanding -Os -fno-delete-null-pointer-checks -mlittle-endian -march=rv32i_zicsr -mabi=ilp32 -Idarklibc/include -I../darklibc/include -D__RISCV__ -DBUILD="\"Wed, 07 Oct 2026 13:36:01 +0800\"" -DARCH="\"rv32i_zicsr\"" -mno-div -mcmodel=medany -Iinclude -S string.c -o string.s

/usr/bin/riscv64-unknown-elf-gcc -Wall -fcommon -ffreestanding -Os -fno-delete-null-pointer-checks -mlittle-endian -march=rv32i_zicsr -mabi=ilp32 -Idarklibc/include -I../darklibc/include -D__RISCV__ -DBUILD="\"Wed, 07 Oct 2026 13:36:01 +0800\"" -DARCH="\"rv32i_zicsr\"" -mno-div -mcmodel=medany -Iinclude -S misc.c -o misc.s

/usr/bin/riscv64-unknown-elf-gcc -Wall -fcommon -ffreestanding -Os -fno-delete-null-pointer-checks -mlittle-endian -march=rv32i_zicsr -mabi=ilp32 -Idarklibc/include -I../darklibc/include -D__RISCV__ -DBUILD="\"Wed, 07 Oct 2026 13:36:01 +0800\"" -DARCH="\"rv32i_zicsr\"" -mno-div -mcmodel=medany -Iinclude -S unistd.c -o unistd.s

/usr/bin/riscv64-unknown-elf-as -march=rv32i_zicsr -mabi=ilp32 -mlittle-endian -c stdio.s -o stdio.o

/usr/bin/riscv64-unknown-elf-as -march=rv32i_zicsr -mabi=ilp32 -mlittle-endian -c io.s -o io.o

/usr/bin/riscv64-unknown-elf-as -march=rv32i_zicsr -mabi=ilp32 -mlittle-endian -c string.s -o string.o

/usr/bin/riscv64-unknown-elf-as -march=rv32i_zicsr -mabi=ilp32 -mlittle-endian -c misc.s -o misc.o

/usr/bin/riscv64-unknown-elf-as -march=rv32i_zicsr -mabi=ilp32 -mlittle-endian -c unistd.s -o unistd.o

/usr/bin/riscv64-unknown-elf-gcc -march=rv32i_zicsr -mabi=ilp32 -mlittle-endian -c -o util.o util.S

/usr/bin/riscv64-unknown-elf-ar -rcs darklibc.a stdio.o io.o string.o misc.o unistd.o util.o

/usr/bin/riscv64-unknown-elf-ranlib darklibc.a

sources ok for darklibc.a.

make2: Leaving directory '/home/chipcamp/src/temp/darkriscv/src/darklibc'

#/usr/bin/riscv64-unknown-elf-ranlib darkshell/darkshell.a darklibc/darklibc.a

/usr/bin/riscv64-unknown-elf-ld -Tdarksocv.ld -Map=darksocv.map -m elf32lriscv -static -gc-sections --entry=_start -o darksocv.o boot.o darkshell/darkshell.a darklibc/darklibc.a

/usr/bin/riscv64-unknown-elf-ld: warning: darksocv.o has a LOAD segment with RWX permissions

/usr/bin/riscv64-unknown-elf-objdump -D darksocv.o > darksocv.S

/usr/bin/riscv64-unknown-elf-objcopy -O binary darksocv.o darksocv.bin

hexdump -ve '1/4 "%08x\n"' darksocv.bin > darksocv.mem

dd if=darksocv.bin of=darksocv_uart.bin skip=512 bs=1

7440+0 records in

7440+0 records out

7440 bytes (7.4 kB, 7.3 KiB) copied, 0.00403438 s, 1.8 MB/s

rm darksocv.bin

uncomment for MIF file

#awk 'BEGIN { print "DEPTH = 1024;\nWIDTH = 32;\nADDRESS_RADIX = HEX;\nDATA_RADIX = HEX;\nCONTENT\nBEGIN" } { printf("%08x : %s\n",NR-1,); } END { print "END;" }' < darksocv.mem > darksocv.mif

wc -l darksocv.mem

1988 darksocv.mem

mem ok for little-endian.

echo build is ok for darksocv.mem

build is ok for darksocv.mem

make1: Leaving directory '/home/chipcamp/src/temp/darkriscv/src'

make -C sim all

make1: Entering directory '/home/chipcamp/src/temp/darkriscv/sim'

iverilog -Wall -I ../rtl -o darksocv darksimv.v ../rtl/darksocv.v ../rtl/darkbridge.v ../rtl/darkuart.v ../rtl/darkriscv.v ../rtl/darkpll.v ../rtl/darkram.v ../rtl/darkio.v ../rtl/darkcache.v ../rtl/darkmac.v ../rtl/lib/sdram/mt48lc16m16a2_ctrl.v

echo "VCDS=darksocv.vcd: XSIM=darksocv"

VCDS=darksocv.vcd: XSIM=darksocv

dpram: unified BRAM w/ 2048x32-bit

WARNING: ../rtl/darkram.v:88: $readmemh(../src/darksocv.mem): Not enough words in the file for the requested range 0:2047.

VCD info: dumpfile darksocv.vcd opened for output.

reset (startup)

sdram: CLK: 64 MHz

sdram: WAIT_100US: 6400 cycles

sdram: TRP: 2 cycles

sdram: TRC: 5 cycles

sdram: TRCD: 2 cycles

sdram: TCH: 1 cycles

sdram: CAS_LATENCY: 2 cycles

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

vvvvvvvvvvvvvvvvvvvvvvvvvvvv

rrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvvvv

rrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv

rrrrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv

rrrrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv

rrrrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvvvv

rrrrrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvv

rrrrrrrrrrrrr vvvvvvvvvvvvvvvvvvvvvv

rr vvvvvvvvvvvvvvvvvvvvvv

rr vvvvvvvvvvvvvvvvvvvvvvvv rr

rrrr vvvvvvvvvvvvvvvvvvvvvvvvvv rrrr

rrrrrr vvvvvvvvvvvvvvvvvvvvvv rrrrrr

rrrrrrrr vvvvvvvvvvvvvvvvvv rrrrrrrr

rrrrrrrrrr vvvvvvvvvvvvvv rrrrrrrrrr

rrrrrrrrrrrr vvvvvvvvvv rrrrrrrrrrrr

rrrrrrrrrrrrrr vvvvvv rrrrrrrrrrrrrr

rrrrrrrrrrrrrrrr vv rrrrrrrrrrrrrrrr

rrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrr

rrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrr

rrrrrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrr

INSTRUCTION SETS WANT TO BE FREE

boot0: main@0200 stack@1f7c

board: simulation only (id=0)

build: Wed, 07 Oct 2026 13:36:01 +0800 for rv32i_zicsr

core0: darkriscv@100MHz rv32i little-endian

bram0: text@0200+1418 data@1618+08f8 stack@2000

bram0: 240 bytes free

uart0: 115.2kbps (div=25603)

timr0: 1000Hz (div=99999)

csrxx: not found

stvec: not found

mtvec: not found (polling)

Welcome to DarkRISCV!

495> ^C

** VVP Stop(0) **

** Flushing output streams.

** Current simulation time is 509455000 ticks.

> finish

** Continue **

make1: *** Makefile:98: darksocv.vcd Interrupt

make: *** Makefile:47: all Interrupt

chipcamp@ChipCamp:~/src/temp/darkriscv$

----没有问题。改用Ubuntu 24.04 LTS系统,配套的riscv64-unknown-elf-gcc则是13.2版本,darkriscv项目的firmware.hex就可以正常编译了,在Ubuntu 22.04 LTS版本下gcc版本低而出现的-mlittle-endian选项不支持的问题消失了。

<<<<<<<<完END>>>>>>>>

关键词:nerv, riscv64-unknown-elf-gcc, systemverilog, interface, modport, pack, struct, always_ff。

摘要:本文记录了开源RISC-V项目nerv的make体验过程。在Ubuntu 22.04 LTS所配套的riscv-gcc-10.x版本不支持-mlittle-entian而build失败的问题,在Ubuntu 24.04 LTS所配套的riscv-gcc-13.2版本则没有问题。这个nerv项目虽然以.sv文件标示SystemVerilog语言,但实际上它没有使用SystemVerilog相对Verilog语言的任何主要语法如interface,modport,pack,struct,always_ff等。

附送:Verilog vs SystemVerilog Summary。

<<<<<<<<END of 附录>>>>>>>>

相关推荐
ChipCamp1 天前
零门槛上手的RISC-V项目:蜂鸟e203(附RTL-Hierarchy欣赏小技巧)
risc-v·verilator·iverilog·蜂鸟e203·rtl-hierarchy
国科安芯3 天前
商业立方星平台中高集成度抗辐射MCU的功耗优化与批量化应用可行性探讨
单片机·嵌入式硬件·架构·risc-v·抗辐射·as32x601
RISCV_Explorer4 天前
RISC-V RVV向量性能调优实战——LMUL与SEW参数选型、访存瓶颈判断与微基准方法
risc-v
国科安芯7 天前
星载通信载荷信号处理中抗辐射微控制器的选型与适应性分析
人工智能·嵌入式硬件·mcu·信号处理·risc-v·抗辐射·空间信息
RISCV_Explorer8 天前
RISC-V RVV向量编程模型机制解析——vsetvl配置、掩码与尾元素策略及长度无关编程
后端·risc-v
RISCV_Explorer8 天前
RISC-V电源管理与低功耗实战——WFI指令、电源域划分与唤醒路径设计
单片机·嵌入式硬件·risc-v
ChipCamp8 天前
Spike-pk在RISC-V RTL开发验证中的应用:黄金参考基准
risc-v·spike·difftest·co-simulation·spike-pk·riscv-pk
Hi202402179 天前
Vortex CUDA 生态适配:让 CUDA C、CUTLASS 与 Triton 在 RISC-V GPGPU 上运行
人工智能·risc-v·gpgpu
国科安芯9 天前
用 AS32X601 做一块关节电机驱动板:三相桥、电流采样、封波保护、FOC 代码一次讲透
risc-v·foc·bldc·关节电机·机器人关节·as32x601·三相逆变桥