网站首页 > 编程文章 正文
最近在做一个通用设计,需要根据不同的需求产生网表文件供其他人使用。不同参数的组合大概有1200种,如果每中需求都做一个工程并存档,重复工作太多,也很繁琐。忽然想到这种情况很适合使用non-project模式。
面对一个新需求,只需要修改几个参数,输入一行命令,就可以得到结果。同时只保留网表文件和编译信息也非常节省硬盘空间。
以下是TCL脚本的大致结构。
其中run.tcl的内容如下。
source ./define.tcl
source ./procs.tcl
set_param general.maxThreads 8
set topName [lindex [split $TOP {.}] 0]
set topPath ${FSRC}/misc/$TOP
set xdmaBdName [lindex [split $XDMA_BD {.}] 0]
set xdmaBdPath "${FBD}/${xdmaBdName}/${XDMA_BD}"
set udwNameList {"H2C_UDW0" "C2H_UDW0" "H2C_UDW1" "C2H_UDW1"}
set uwewNameList {"H2C_UWEW0" "C2H_UWEW0" "H2C_UWEW1" "C2H_UWEW1"}
foreach udw $UDW_LIST {
set prjName "${topName}_[lindex $udw 0]_[lindex $udw 1]_[lindex $udw 2]_[lindex $udw 3]"
set nameList {}
set valueList {}
for {set i 0} {$i < 4} {incr i} {
# lappend modify a LIST directly, so do not need '#39;.
# lindex get a value from a LIST, so need '#39;.
lappend nameList [lindex $udwNameList $i]
lappend nameList [lindex $uwewNameList $i]
lappend valueList [lindex $udw $i]
set wewTemp [expr {[lindex $udw $i]/8}]
lappend valueList $wewTemp
}
changeParam "${FSRC}/header/param_def.sv" $nameList $valueList
source ./findAllFiles.tcl
readSrc $FCODE_RECORD
readSrc $FCONS_RECORD
if {[expr {$HAS_BD == "yes"}]} {
read_verilog -library xil_defaultlib ${FBD}/${xdmaBdName}/hdl/${xdmaBdName}_wrapper.v
read_bd $xdmaBdPath
generate_target all [get_files $xdmaBdPath]
}
## Do not use the full path name for '-top' option, just use the top module name
## without extension.
set status [catch {[synth_design -top $topName -part $PART -mode $SYNTH_MODE -directive $SYNTH_DIRECTIVE > ${FLOG}/${prjName}_temp.log]} msg]
if {$status} {
puts $msg
}
pureMsg ${FLOG}/${prjName}
file delete ${FLOG}/${prjName}_temp.log
write_checkpoint -force ${FDCP}/$prjName
report_timing_summary -file ${FRPT}/${prjName}.rpt
close_project
}
编译过程中总是报如下错误,提示Block design中的IP被锁定。
重新生成Block design也未能解决问题。后来在ug939中看到这么一段话。
在non-project模式下,如果不创建im-memory工程,IP将会使用默认的器件产生输出文件。当该默认器件和synth_design使用的器件不同时,就会报以上的错误。在run.tcl中创建in-memory工程或者直接使用个set_part设置器件即可解决该问题。如添加以下命令。
create_project -in_memory -ip -part $PART xdma_inf_prj ./
如果不想创建in-memory工程也可以,使用set_part命令即可,该命令的说明如下。
Sets the part on the current project. If no project is open, then a diskless project is created.
如果之前未创建工程,set_part会创建一个diskless,也就是in-memory的工程。
知乎连接:
https://zhuanlan.zhihu.com/p/601792515
猜你喜欢
- 2024-11-06 米尔电子MPSOC实现12G SDI视频采集H.265压缩SGMII万兆以太网推流
- 2024-11-06 测评|米尔基于ARM+FPGA开发板的pcie2screen测试例程
- 2024-11-06 【面试】PCIDMA主要用来做什么?(pcim是什么)
- 2024-11-06 FPGA技术学习-关于Xilinx PCIE DMA的问答
- 2024-11-06 米尔ARM+FPGA架构开发板PCIE2SCREEN示例分析与测试
- 2024-11-06 基于JESD204B和PCIe DMA多通道数据采集回放系统
- 2024-11-06 基于Camera Link和PCIe多通道视频采集和显示系统
- 2024-11-06 领卡,帮我也帮你,想要发卡(领卡助手)
- 2024-11-06 今日资料2020.03.31(今日资料修改过于频繁)
- 2024-11-06 TI AM3352/54/59 工业核心板硬件说明书
你 发表评论:
欢迎- 06-24一个老爸画了超级有爱的365幅画 | 父亲节献礼
- 06-24产品小白看魏则西事件——用产品思维审视百度推广
- 06-24某教程学习笔记(一):13、脚本木马原理
- 06-24十大常见web漏洞——命令执行漏洞
- 06-24初涉内网,提权那些事(内网渗透提权)
- 06-24黑客命令第16集:47种最常见的**网站方法2/2
- 06-24铭说 | 一句话木马的多种变形方式
- 06-24Java隐藏的10倍效率技巧!90%程序员不知道的魔法方法(附代码)
- 最近发表
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)