C shell 学习

目录

#!/bin/csh -f

双引号“”

set命令​​:

$#argv​​

${SIM_DEFINE}

=~                    

shift​​

if ....endif 

while

echo

awk '{split($0,a,"." )

反引号 `

ln -s创建符号链接​​

vhdlan -full64  -f xxa.g -l xxb.log

VHDL 和verilog


#!/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的核心作用​​

​​场景​​

​​shift的效果​​

​​参数变化示例​​

​​处理选项参数​​

移除选项标识(如 -c_opts),保留选项值

-c_opts "-O2"→ 取 "-O2"

​​遍历所有参数​​

配合循环逐个处理参数

while ($#argv > 0)shift

​​忽略已处理参数​​

避免重复处理同一参数

处理完 $1后移除以聚焦下一个参数

if ....endif 

    if ........then
        语句;

        else if .....then
        语句;
        endif       

    if("x$1" =~ x-nodump) then
        set nodump = 1;
    endif 

if ("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 文件,生成仿真或综合所需的中间文件。​

​参数​

​作用​

​示例值/说明​

-full64

启用 64 位模式编译(兼容 64 位系统)

必需参数,避免 32/64 位兼容问题

-f gpu_vhd.g

指定文件列表路径(-f表示从文件读取源码列表)

文件内容示例:
file1.vhd
file2.vhd

-l ./vhdlan.log

将编译日志输出到指定文件(-l表示日志重定向)

日志包含错误、警告和编译状态

VHDL 和verilog

1. 核心定位​​

两者均为 ​​硬件描述语言(HDL)​​,用于数字电路的设计、仿真和综合,是芯片开发(FPGA/ASIC)的行业标准工具。

​​差异定位​​:

​特性​

​VHDL​

​Verilog​

​设计哲学​

强类型、严谨(适合高可靠性系统)

灵活、简洁(适合快速迭代)

​语法风格​

类似Ada/Pascal(冗长但明确)

类似C语言(紧凑但易混淆)

​应用领域​

欧洲军工/航天/医疗主流

美国商业电子/AI芯片主流

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

search7

请为我点赞!

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

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

打赏作者

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

抵扣说明:

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

余额充值