当前位置: 首页 > news >正文

C shell 学习

目录

#!/bin/csh -f

set命令​​:

$#argv​​

${SIM_DEFINE}

=~                    

shift​​

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;

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

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芯片主流

http://www.dtcms.com/a/351232.html

相关文章:

  • AI出题人给出的Java后端面经(二十仨)(不定更)
  • 线性代数中矩阵等价与离散数学中关系的闭包之间的关联
  • dapo:开源大规模llm强化学习系统的突破与实现
  • AI提示词30天入门培训计划
  • STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---MQTT篇(三)
  • 【密集目标检测】停车场车辆(车位)识别数据集:12k+图像,yolo标注
  • 从GPT-5发布来分析LLM大模型幻觉收敛(一)
  • 广告网站与Coze智能体集成
  • 节能率的图表组件的选择
  • MT** 时间指标全景图:从可靠性到可维护性的度量体系
  • PEFT 模型解析(59)
  • Linux 详谈库制作与原理
  • python中生成器
  • 解决qt5.9.4和2015配置xilinx上位机报错问题
  • 学习游戏制作记录(保存装备物品技能树和删除存档文件)8.26
  • 【软考论文】论静态测试方法及其应用
  • 系统设计中的幂等性
  • QPSK调制解调通信仿真程序调试与分析
  • UbuntuV24.04安装mpdecimal库(libmpdec),从源码编译
  • 广告推荐模型3:域感知因子分解机(Field-aware Factorization Machine, FFM)
  • 机器人 - 无人机基础(6) - 状态估计(ing)
  • 1 线性模型
  • 支持向量机(SVM)
  • Java 大视界 -- Java 大数据机器学习模型在金融市场波动预测与资产配置动态调整中的应用
  • 网站开发用什么语言好
  • CentOS扩容非LVM分区
  • PortSwigger靶场之Blind SQL injection with out-of-band interaction通关秘籍
  • Redis--2
  • 在 TencentOS 3 上部署 OpenTenBase:从底层原理到生产级实践的深度指南
  • DBeaver下载安装使用