目录
介绍实际RTL设计中,如何对工程目录进行组织。以UART工程为例
这里给出一个典型的工程目录结构,以使层次更加分明
rtl\
用于存放各种*.v文件
uart.v
uart_rx.v
uart_tx.v
ip\
用于存放通用IP
tb\
用于存放各种*.sv格式的testbench文件
uart_tb.sv
vcs\
用于只存放编译文件,必要文件如下
file.list
列出编译所需的全部rtl和tb文件,注意…表示以rtl目录的上级目录
例如
//rtl files
../rtl/uart_tx.v
../rtl/uart_rx.v
../rtl/uart.v
//tb files
../tb/uart_tb.sv
macro.list
主要包括宏定义、库文件的Verilog模型路径,文件搜索路径信息等。
//macro
+define+UART_HIGH_BPS
+define+UART_FIFO_DEPTH = 4096
//指定库文件,建议包含路径
//-v <filename>
//指定库文件,IP等Verilog模型路径
//-y <directory>
//指定要包含的文件目录
//+incdir+<directory>
run_vcs.sh
用于启动VCS编译,注意将刚才的file.list和macro.list添加进去
注意使用\换行
-top 命令后接的是tb文件的Module名字
vcs -full64 -notice -debug_all+acc -j8 \
+plusarg_save +libext+.v+.V+.sv+.svh -sverilog +memcbk \
-P ${Verdi_HOME}/share/PLI/VCS/LINUX64/novas.tab \
${Verdi_HOME}/share/PLI/VCS/LINUX64/pli.a \
-cpp /usr/bin/g++-4.4 -cc /usr/bin/gcc-4.4 \
-f ./file.list -f ./macro.list -top uart_tb \
-l ./compile.log
vsim\
此处添加仿真、波形生成命令,并开启Verdi进行调试
wave_gen.tcl
这个是打开DVE之后,要输入的UCLI命令,整理在这里然后自动调用
call {$fsdbDumpfile("dump.fsdb")}
call {$fsdbDumpvars(0, uart_tb, "+all")} //uart_tb是tb文件的module名字,不是乱起的!!!!
call {$fsdbDumpon}
run
run_sim.sh
启动仿真。由于编译后生成的simv和sim.daidir在vcs目录下,所以这里需要搞个快捷方式
ln -sf ../vcs/sim* .
simv -ucli -i ./wave_gen.tcl -l ./sim.log +fsdb+function
run_verdi.sh
启动verdi
verdi -f ../vcs/file.list -f ../vcs/macro.list -top uart_tb -ssf ./dump.fsdb -nologo &
pysim\
使用python进行仿真的工程,必要文件如下
uart_tb.py
python环境下的仿真文件
uart.py
python环境下的dut
msim\
使用matlab进行仿真的工程
qsim\
使用questasim进行仿真的工程,以及仿真所使用的TCL
run_sim.tcl
wave_gen.tcl
prj\
工程文件,例如Vivado工程
doc\
用于存放各种设计文件
uart design spec.doc
设计文件,参考RTL Design Flow编写
(submodule design spec.doc)
子模块设计文件
uart diagram.vsdx
顶层框图文件、波形文件
uart table.xlsx
包括interface, parameter, register, command
interface格式如下
parameter格式如下
寄存器描述文件,格式如下
指令描述文件,格式如下
pseudocode.sv
算法伪代码文件
Makefile
方便终端直接运行各目录下的文件,而不用在目录之间跑来跑去,所写的Makefile如下
all: clean comp run verdi
comp:
cd ./vcs && ./run_vcs.sh
run:
cd ./sim && ./run_sim.sh
verdi:
cd ./sim && ./run_verdi.sh
clean:
rm -rf ./vcs/simv.* ./vcs/simv* ./vcs/csrc ./vcs/*.log
rm -rf ./sim/*.log ./sim/*.vpd ./sim/ucli.key ./sim/*.fsdb
要注意一切文件中的一切路径,都以指令所在目录为原点
例如tb目录下的uart_tb.sv中要访问外部数据,执行
$readmemh('init_mem.hex',uart_tb.u_uart.mem);
,那么这个init_mem.hex
文件应该放在哪里?
应该放在sim目录下,因为仿真是在该目录下启动,所以就以sim为目录原点搜索init_mem.hex
clean是为了删除全部的自动生成文件
写完之后,在makefile目录下执行对应的命令即可