RTL Project Directory

介绍实际RTL设计中,如何对工程目录进行组织。以UART工程为例

RTL Design Flow


这里给出一个典型的工程目录结构,以使层次更加分明

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目录下执行对应的命令即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starry丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值