目录
vhdlan -full64 -f xxa.g -l xxb.log
#!/bin/csh -f
#!(Shebang):指定脚本解释器的路径,系统根据该行决定用哪个程序执行脚本。/bin/csh:C Shell(csh)的解释器路径,常见于Unix/Linux系统。-f参数:快速启动模式,跳过读取用户配置文件(如~/.cshrc)。
set build = 0;
set c_testname = "fc_example";
#set ct_comp = 0;
双引号“”
允许变量扩展(${testname} 会被替换为实际值),同时保留空格和特殊字符。
举例:set run_dir = "${RUN_DIR_HOME}/${testname}.${test_dir}.${c_testname}"
set命令:
用于定义或修改变量。 字符串用“”
# 注释符号,
set testname = $argv[1];
$argv 是 C Shell 中的 特殊数组变量,用于存储 脚本或函数的所有命令行参数。
$argv[1],命令行第一个参数(索引从1开始)
while ($#argv > 0)
if("x$1" =~ x-build) ## 检查当前参数是否为 "-build"
then
set build = 1; # 如果是,设置标志位 build=1
endif
$#argv
$#argv 是 C Shell (csh/tcsh) 中的特殊变量,表示 命令行参数的数量(类似 Bash 中的 $#)。while ($#argv > 0) 表示“只要还有未处理的参数,就继续循环”。
./script.csh -build -debug # 此时 $#argv = 2
"x$1", $1 是 命令行参数的引用,表示传递给脚本或函数的 第一个参数。$1 为 -build
x$1 是将当前参数 $1前缀拼接字母 x(防变量为空导致语法错误)
${SIM_DEFINE}
$:变量引用的起始符号(表示“取变量的值”)。{}:明确变量名的边界。
if ($comp_en == "0") then
set SIM_DEFINE = "${SIM_DEFINE}+NO_CLUSTER";
endif
举例:
set SIM_DEFINE = "DEBUG"
echo "$SIM_DEFINE_123" # 尝试读取不存在的变量 `SIM_DEFINE_123`
echo "${SIM_DEFINE}_123" # 正确输出 "DEBUG_123" ,用{} 划定边界
=~
=~ 正则表达式匹配操作符。
if.....then...... 固定搭配
if ($build_only == "1") then
set c_comp = 0;
set build = 1;
set clean = 0;
set sim = 0;
endif
检查 build_only是否为字符串 "1"
shift
shift 是 Shell 脚本中的 参数位移命令,用于移除参数列表 ($argv或 $*) 中的 第一个参数(即 $1),并将后续参数依次前移。
假设命令行输入:./script.csh -c_opts "-O2 -g" -build
if ("x$1" =~ x-c_opts) then ## 如果当前参数是 "-c_opts"
shift# 移除 "-c_opts",此时原来的 $2 变成新的 $1
set c_opts = "${c_opts} $1";# 将新的 $1(原$2的值)追加到 c_opts
endif
执行前:•$1= "-c_opts" $2= "-O2 -g" $3= "-build
执行后:•shift移除 -c_opts,原 $2变为新 $1,c_opts被赋值为 " -O2 -g"(保留历史值并追加新值)
shift的核心作用
| 场景 | | 参数变化示例 |
|---|---|---|
| 处理选项参数 | 移除选项标识(如 |
|
| 遍历所有参数 | 配合循环逐个处理参数 |
|
| 忽略已处理参数 | 避免重复处理同一参数 | 处理完 |
if ....endif
if ........then
语句;
else if .....then
语句;
endif
if("x$1" =~ x-nodump) then
set nodump = 1;
endifif ("x$1" =~ x-debug) then
set uvm_verbosity = "UVM_MEDIUM";
else if ("x$1" =~ x-debug_high) then
set uvm_verbosity = "UVM_HIGH";
else if ("x$1" =~ x-debug_full) then
set uvm_verbosity = "UVM_FULL";
else if ("x$1" =~ x-debug_none) then
set uvm_verbosity = "UVM_NONE";
else if ("x$1" =~ x-debug_debug) then
set uvm_verbosity = "UVM_DEBUG";
endif
while
while ($#argv > 0)
# 处理当前参数 $argv[1]
shift # 移除已处理的参数
end
echo
echo是 Shell 脚本中最常用的 文本输出命令,用于:
。打印字符串到终端或文件
。显示变量值 #echo "$output_dir"
。调试时输出中间结果
C shell : printf "Line1\nLine2\n" # 推荐用 printf
awk '{split($0,a,"." )
反引号 `
举例:set c_testname = `echo $c_testname_pre | awk '{split($0,a,"." ); print a[2]}'`
作用:代码通过 awk 分割字符串,从变量 $c_testname_pre中提取部分信息。
反引号 `,执行命令并将输出赋值给变量。
split($0, a, "."):以 .为分隔符,将输入字符串拆分放在数组 a中,下标从1开始.
示例:"qspi_test.fc_example"→ a[1]="qspi_test", a[2]="fc_example"
print a[2]:输出数组第二个元素(后缀)。
若 $c_testname_pre = "qspi_test.fc_example",则: $c_testname = "fc_example"
ln -s创建符号链接
ln -s ${TSME_TSPE_TB_TEST}/loadfile_dat/$loadfile_dir/dat/* $run_dir/dat/
作用:将源目录(${TSME_TSPE_TB_TEST}/.../dat/)下的所有文件,软链接到目标目录($run_dir/dat/)中。
vhdlan -full64 -f xxa.g -l xxb.log
该命令用于调用 VHDL 编译器(如 Synopsys 的 vhdlan)编译指定的 VHDL 文件,生成仿真或综合所需的中间文件。
| 参数 | 作用 | 示例值/说明 |
|---|---|---|
|
| 启用 64 位模式编译(兼容 64 位系统) | 必需参数,避免 32/64 位兼容问题 |
|
| 指定文件列表路径( | 文件内容示例: |
|
| 将编译日志输出到指定文件( | 日志包含错误、警告和编译状态 |

VHDL 和verilog
1. 核心定位
两者均为 硬件描述语言(HDL),用于数字电路的设计、仿真和综合,是芯片开发(FPGA/ASIC)的行业标准工具。
差异定位:
| 特性 | VHDL | Verilog |
|---|---|---|
| 设计哲学 | 强类型、严谨(适合高可靠性系统) | 灵活、简洁(适合快速迭代) |
| 语法风格 | 类似Ada/Pascal(冗长但明确) | 类似C语言(紧凑但易混淆) |
| 应用领域 | 欧洲军工/航天/医疗主流 | 美国商业电子/AI芯片主流 |

967

被折叠的 条评论
为什么被折叠?



