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

做网站的策划书/网站建设公司大型

做网站的策划书,网站建设公司大型,如何建设招聘网站,深圳微信小程序开发网站建设静态时序分析简明教程-浅议tcl语言 一、写在前面1.1 快速导航链接 二、Tcl基础知识三、Tcl的语言结构3.1 Tcl变量3.2 Tcl表达式与运算符3.3 Tcl的控制流语句3.3.1 列表遍历3.3.2 决策3.3.3 Tcl循环3.3.4 Tcl过程 3.4 其他Tcl命令3.4.1 open/close3.4.2 gets/puts3.4.3 catch3.4…

静态时序分析简明教程-浅议tcl语言

    • 一、写在前面
      • 1.1 快速导航链接·
    • 二、Tcl基础知识
    • 三、Tcl的语言结构
      • 3.1 Tcl变量
      • 3.2 Tcl表达式与运算符
      • 3.3 Tcl的控制流语句
        • 3.3.1 列表遍历
        • 3.3.2 决策
        • 3.3.3 Tcl循环
        • 3.3.4 Tcl过程
      • 3.4 其他Tcl命令
        • 3.4.1 open/close
        • 3.4.2 gets/puts
        • 3.4.3 catch
        • 3.4.4 info
        • 3.4.5 source
        • 3.4.6 incr
        • 3.4.7 exit
    • 四、总结

一、写在前面

一个数字芯片工程师核心竞争力是什么?不同的工程师可能给出不同的答复,有些人可能提到硬件描述语言,有些人可能会提到对于特定算法和协议的理解,有些人或许会提到对于软硬件的结合划分,作者想说,这些说法,其实对也不对,硬件描述语言,翻来覆去无非是always和assign这几个语句的反复使用,而一些基础的协议算法深究起来其实也并不复杂,于作者而言,在常规的技能以外,有两项额外的技能颇为重要,其中之一便为sdc/STA的分析能力,它的重要之处在于作为桥梁建立了前端和后端的连接,虽然对于DE工程师而言,初版交付的sdc往往不甚准确,也没有办法通过这份sdc生成一份无误的timing report,但sdc的内容体现却是完完整整的将时序约束从行为级的描述映射到了gate level这样一个真实的电路层次上面。
写此专栏,一为学习记录,二为交流分享,以犒粉丝读者。

1.1 快速导航链接·

静态时序分析简明教程(一)绪论
静态时序分析简明教程(二)基础知识:建立保持时间,违例修复,时序分析路径
静态时序分析简明教程(三)备战秋招,如何看懂一个陌生的timing report
静态时序分析简明教程(四)时钟常约束
静态时序分析简明教程(五)生成时钟
静态时序分析简明教程(六)时钟组与其他时钟特性
静态时序分析简明教程(七)端口延迟
静态时序分析简明教程(八)虚假路径
静态时序分析简明教程(九)多周期路径
静态时序分析简明教程(十)组合电路路径
静态时序分析简明教程(十一)模式分析与约束管理
静态时序分析简明教程(十二)浅议tcl语言

二、Tcl基础知识

SDC的约束基于Tcl语言。通过使SDC扩展到Tcl,基于工具的命令可以和原生Tcl的结构,如变量,表达式,语句和子程序相混合,实现更为强大的功能,因此,作为SDC约束的提供方,对Tcl命令的理解,本身也是IC技能中颇为重要的一个方面。

Tcl是由加州大学伯克利分校开发的常用脚本语言,它是一种解释语言,每条语句被以此解析并立即执行, 在Tcl脚本遇到第一个错误的时候就会立刻停止。

Tcl脚本遵循一些基本的语义,总结起来是以下四点

  1. 每条Tcl以换行符或分号结束;
  2. 如果一条语句跨越多行,然后再下一行继续执行,需要在行尾加反斜杠
  3. 双引号和大括号括住的包括多个单词的字符串被认定为单元
  4. #开头的语句是注释

给出两个简单的例子,帮助读者们快速get以上四条的含义

puts “Hello World!”; # 这是一条注释
puts {Hello, World!}

三、Tcl的语言结构

Tcl的语言结构可以区分为以下几种

  1. 变量
  2. 列表
  3. 表达式与运算符
  4. 控制流语句
  5. 过程

接下来我们将逐一讲解其含义

3.1 Tcl变量

Tcl变量是ASCII字符串,变量使用set命令来分配(Example1),如果要对变量求值,需要使用“$“符号(Example2),因为”$“的特殊含义,因此假如想要打印这个变量,需要”\$",多一个“\”符号(Example3)

Example1:
set abc “1234” #set是命令,abc是变量,1234是分配给变量的值

Example2:
puts $abc #将打印1234

Example3:
puts “I have a \$bill”

3.2 Tcl表达式与运算符

Tcl中使用expr命令来对表达式求值

set x 10
# 两条语句的返回值都为30
expr $x + 20
expr [$x + 20]

两条expr命令将返回相同的值,但是Tcl建议表达式使用大括号,这有助于程序更快地执行。
下面的表格将列出Tcl所支持的运算符

运算符描述
- + ~ !一元减,一元加,按位取反,逻辑非
+ - * /加 减 乘 除
**指数
<> <= >= == !=关系运算符:小于、大于、小于或等于、大于或等于、等于、不等于
eq,ne比较两个字符串相等(eq)或不相等(ne)
in,ni检查列表中包括(in)不包括字符串的运算符。返回1为真,0为假
&|^按位与、或、异或
&&,||逻辑与、或
<< >>左移右移

3.3 Tcl的控制流语句

Tcl的控制流语句由以下种类的结构组成
1.列表遍历
2.决策
3.循环
4.子程序

3.3.1 列表遍历

Tcl提供了foreach结构来遍历列表,案例如下

# 创建一个包含元素的列表
set my_list {apple banana orange}# 使用 foreach 命令遍历列表
foreach item $my_list {# 输出当前列表元素puts "Item: $item"
}

它会有如下的输出结果

Item: apple
Item: banana
Item: orange

3.3.2 决策

Tcl提供if-else if-else的结构来提供决策能力,举例如下:

# 假设有一个变量 age 表示年龄
set age 25# 使用 if-else if-else 结构进行决策
if {$age < 18} {puts "未成年人"
} elseif {$age >= 18 && $age < 60} {puts "成年人"
} else {puts "老年人"
}

其输出的结果如下:

成年人

3.3.3 Tcl循环

当程序想在一个条件下循环和终止时,可以使用Tcl提供的for和while语句,它还提供了两个额外的结构,break和continue,其中break用提提前结束循环,而continue用于停止执行当前代码的循环,并重新评估当前循环的代码。
for语句的循环举例如下:

# 使用 for 循环输出数字从15
for {set i 1} {$i <= 5} {incr i} {puts $i
}

运行上面的代码会产生如下的输出

1
2
3
4
5

while语句的循环举例如下:

# 使用 while 循环计算数字的阶乘
set num 5
set factorial 1
while {$num > 0} {set factorial [expr $factorial * $num]incr num -1
}
puts "5的阶乘是: $factorial"

它会产生如下的输出结果

5的阶乘是: 120

break语句的举例如下

# 使用 while 循环打印数字,直到遇到数字 4 时终止循环
set i 1
while {$i <= 10} {puts $iif {$i == 4} {break  ;# 当 i 等于 4 时终止循环}incr i
}

在这个示例中,我们使用 while 循环打印数字从 1 到 10。然而,当 i 的值等于 4 时,我们使用 break 语句提前终止了循环的执行,因此循环只会打印数字 1 到 3。以上的代码将会输出如下的结果

1
2
3
4

3.3.4 Tcl过程

在Tcl中,过程可以通过 proc 命令定义,用于封装一系列命令,形成一个可重复使用的代码块,以下是一个例子

# 定义一个计算两个数之和的过程
proc add_numbers {num1 num2} {set sum [expr $num1 + $num2]return $sum
}# 调用定义的过程来计算和
set result [add_numbers 10 20]
puts "计算结果是: $result"

在这个示例中,我们首先使用 proc 命令定义了一个名为 add_numbers 的过程,该过程接受两个参数 num1 和 num2,并计算它们的和。然后,我们在代码的后续部分调用了这个过程,传递了参数 10 和 20,并将计算结果存储在变量 result 中。

其结果输出如下:

计算结果是: 30

3.4 其他Tcl命令

以下是一些常用的Tcl命令

3.4.1 open/close

文件句柄,用来打开和关闭文件

#以写模式打开文件"file.txt"
set fhandle [open "file.txt" w] 
#关闭文件句柄
close $fhandle

3.4.2 gets/puts

获取字符串或打印字符串,举例如下:

# 提示用户输入姓名
puts "请输入您的姓名:"
# 使用 gets 命令读取用户输入的一行数据
gets stdin name# 提示用户输入年龄
puts "请输入您的年龄:"
# 使用 gets 命令读取用户输入的一行数据
gets stdin age# 使用 puts 命令输出用户输入的信息
puts "您的姓名是:$name"
puts "您的年龄是:$age"

在这个示例中,我们首先使用 puts 命令提示用户输入姓名,并使用 gets 命令从标准输入读取用户输入的姓名。然后,我们再次使用 puts 命令提示用户输入年龄,并使用 gets 命令从标准输入读取用户输入的年龄。最后,我们使用 puts 命令将用户输入的姓名和年龄输出到标准输出。
运行上述代码将会产生类似于以下的交互过程:

请输入您的姓名:
John Smith
请输入您的年龄:
28
您的姓名是:John Smith
您的年龄是:28

3.4.3 catch

在Tcl中,catch 命令用于捕获可能引发异常的代码块,并在发生异常时进行处理。以下是一个使用 catch 命令的示例

# 尝试将一个非数字字符串转换为整数
set input "abc"
catch {set number [expr $input]
} result# 检查是否捕获到异常
if {[catch "set number [expr $input]" result]} {puts "捕获到异常:$result"
} else {puts "转换结果为:$number"
}

在这个示例中,我们首先尝试将字符串 “abc” 转换为整数,这是不合法的操作,会引发异常。我们使用 catch 命令来捕获可能发生的异常,并将异常信息存储在变量 result 中。然后,我们检查是否捕获到异常,如果捕获到异常,则输出异常信息;否则,输出转换结果。
运行上述代码将会输出:

捕获到异常:expected integer but got "abc"

3.4.4 info

从Tcl解释器获取信息所使用的命令

info commands <pattern>: 返回名称与pattern格式匹配的命令列表
info exists <name>:如果name作为变量存在,则返回1,否则返回0
info procs <pattern>:返回与pattern格式匹配的Tcl过程列表

3.4.5 source

在 Tcl 编程语言中,source 命令用于在当前脚本中执行另一个 Tcl 脚本文件。通过使用 source 命令,可以将另一个脚本文件中的代码嵌入到当前脚本中执行,从而实现模块化和代码重用。

3.4.6 incr

在 Tcl 编程语言中,incr 是一个内置命令,用于增加变量的值。它可以用于增加整数变量或双精度浮点数变量的值。

# 增加整数变量的值
set count 5
incr count   ;# 将 count 增加 1
puts "增加后的值是: $count"# 增加整数变量的值,并指定增量
set value 10
incr value 2   ;# 将 value 增加 2
puts "增加后的值是: $value"# 增加双精度浮点数变量的值
set total 3.5
incr total 1.2   ;# 将 total 增加 1.2
puts "增加后的值是: $total"

上面的代码会输出如下的结果

增加后的值是: 6
增加后的值是: 12
增加后的值是: 4.7

3.4.7 exit

exit 是一个内置命令,用于终止当前脚本的执行,并退出 Tcl 解释器。您可以使用 exit 命令来在特定条件下终止脚本的执行,或在脚本执行完毕后退出解释器。

四、总结

本文中,我们总结了Tcl语句的相关使用方法,提供了大量的案例来讲解:Tcl的变量、表达式、运算符列表遍历、决策、循环、Tcl过程,其中还会涉及到额外的语句如open/close、gets/puts、catch、info、source、incr、exit。

相关文章:

[静态时序分析简明教程(十一)]浅议tcl语言

静态时序分析简明教程-浅议tcl语言 一、写在前面1.1 快速导航链接 二、Tcl基础知识三、Tcl的语言结构3.1 Tcl变量3.2 Tcl表达式与运算符3.3 Tcl的控制流语句3.3.1 列表遍历3.3.2 决策3.3.3 Tcl循环3.3.4 Tcl过程 3.4 其他Tcl命令3.4.1 open/close3.4.2 gets/puts3.4.3 catch3.4…...

大数据-玩转数据-Flink 网站UV统计

一、说明 在实际应用中&#xff0c;我们往往会关注&#xff0c;到底有多少不同的用户访问了网站&#xff0c;所以另外一个统计流量的重要指标是网站的独立访客数&#xff08;Unique Visitor&#xff0c;UV&#xff09;。 二、数据准备 package com.lyh.flink06;import lombo…...

3分钟了解下cwnd和TCP拥塞控制算法

文章首发地址 cwnd是什么&#xff1f; cwnd是TCP拥塞控制中的一个重要概念&#xff0c;全称为“congestion window”&#xff0c;也被称为拥塞窗口。它用于限制发送方向网络发送数据的速度&#xff0c;以避免网络拥塞。cwnd是一个动态的值&#xff0c;可以根据网络状况动态调…...

设计模式之状态模式(State)的C++实现

1、状态模式的提出 在组件功能开发过程中&#xff0c;某些对象的状态经常面临变化&#xff0c;不同的状态&#xff0c;其对象的操作行为不同。比如根据状态写的if else条件情况&#xff0c;且这种条件变化是经常变化的&#xff0c;这样的代码不易维护。可以使用状态模式解决这…...

无涯教程-TensorFlow - Keras

Keras易于学习的高级Python库&#xff0c;可在TensorFlow框架上运行&#xff0c;它的重点是理解深度学习技术&#xff0c;如为神经网络创建层&#xff0c;以维护形状和数学细节的概念。框架的创建可以分为以下两种类型- 顺序API功能API 无涯教程将使用Jupyter Notebook执行和…...

使用SSH隧道将Ubuntu云服务器Jupyter Notebook端口映射到本地

本文主要实现了在Ubuntu云服务器后台运行Jupyter Notebook&#xff0c;并使用SSH隧道将服务器端口映射到本地 1. 生成配置文件 运行以下命令生成Jupyter Notebook的配置文件&#xff1a; jupyter notebook --generate-config这将在用户主目录下生成一个名为.jupyter的文件夹&…...

Keepalived+LVS部署高可用集群

文章目录 KeepalivedLVS(DR)部署高可用Web集群集群环境MASTER配置BACKUP配置检查Virtual IP是否漂移IPVS检查MASTERBACKUP Real Server配置附上个人写的小脚本 测试停用Real Server某一台的Apache服务停用Master上的keepalived检测Backup是否接管资源 KeepalivedLVS(DR)部署高可…...

2023河南萌新联赛第(五)场:郑州轻工业大学

A.买爱心气球 原题链接 : 登录—专业IT笔试面试备考平台_牛客网 博弈论 : #include <iostream> using namespace std; int t,n,m; string s1 "Alice",s2 "Bob"; int main() {cin>>t;while(t--){cin>>n>>m;if (n % 3 0) {cou…...

在Orangepi5开发板3588s使用opencv获取摄像头画面

先感谢香橙派群的管理员耐心指导&#xff0c;经过不断的调试修改最后成功通过opencv调用mipi摄像头获取画面 就记录分享一下大概步骤希望大家少踩点坑&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我用的固件系统是ubuntu2022.0.4 固件是&#x…...

音视频 ffmpeg命令分类查询

命令参数内容-version显示版本 -bsfs 显示可用比特流filter-buildconf显示编译配置-formats显示可用格式(muxersdemuxers)-muxers显示可用复用器-demuxers显示可用解复用器-codecs显示可用编解码器(decodersencoders)-decoders显示可用解码器-encoders显示可用编码器-bsfs显示可…...

VSCode无法从Extensions下载工具时,把工具下载到本地并添加到VSCode编辑器

从VSCode 的 Extensions 下载 下载报错&#xff1a;Error while installing ...... extension. Please check the log for more details. 由于内网限制&#xff08;或者其他网络限制&#xff09;无法正常下载扩展工具到VSCode编辑器&#xff0c;可以把工具下载到本地再添加到V…...

WebStrom 前端项目Debug

1. 正常启动前端项目 2. 配置webStrom的JavaScript Debugger 点击Edit Configurations添加avaScript Debug填写URL 为项目启动路径配置要Debug的浏览器-remote-allow-origins* &#xff08;最重要&#xff0c;否则唤起的是一个about:blank空白页面&#xff09; 3. 启动Debug模…...

【ARM Linux 系统稳定性分析入门及渐进12 -- GDB内存查看命令 “x“(examine)】

文章目录 gdb 内存查看命令 examine 上篇文章&#xff1a;ARM Linux 系统稳定性分析入门及渐进11 – GDB( print 和 p 的使用| 和 &#xff1a;&#xff1a;的使用|ptype|{&#xff1c;type&#xff1e;} &#xff1c;addr&#xff1e; ) gdb 内存查看命令 examine examine是…...

kube-prometheus 系列1 项目介绍

Prometheus 已经成为云原生监控的事实标准。整个生态包含诸多组件&#xff0c;为了简化安装部署和配置高可用等&#xff0c;社区开发了kube-prometheus项目。接下来用一系列文章介绍一下相关配置。 项目简介&#xff1a; kube-prometheus 是一个基于 Kubernetes 部署的 Prometh…...

深度学习在组织病理学图像分析中的应用: Python实现和代码解析

引言 组织病理学是医学的一个重要分支&#xff0c;它主要研究组织和细胞的形态学改变&#xff0c;以确定疾病的性质和发展。随着深度学习技术的进步&#xff0c;其在组织病理学图像分析中的应用也变得日益重要。本文旨在介绍如何使用Python和深度学习技术来处理和分析组织病理…...

kotlin的列表

在 kotlin中&#xff0c;列表是一种常见的数据结构&#xff0c;用于存储有序的元素集合。 kotlin的标准库提供了 List 接口及其实现类 ArrayList、LinkedList 等&#xff0c;以及一些扩展函数来操作和处理列表。 1.创建列表 // 创建一个可变列表 val mutableList mutableLis…...

PCL 三维点云边界提取(C++详细过程版)

边界提取 一、概述二、代码实现三、结果展示本文由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、概述 点云边界提取在PCL里有现成的调用函数,具体算法原理和实现代码见:PCL 点云边界提取。为充分了解pcl::BoundaryEsti…...

../../ 目录遍历

在web功能设计中,很多时候我们会要将需要访问的文件定义成变量&#xff0c;从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时&#xff0c;便会将请求的这个文件的值(比如文件名称)传递到后台&#xff0c;后台再执行其对应的文件。 在这个过程中&#xff0c;如果后…...

clickhouse集群部署

一、集群部署简介 部署的详情可以看官网 先部署两个server,三个keeper[zookeeper] clickhouse之前依赖的存储是zookeeper,后来改为了keeper,官网给出了原因 所以这就决定了clickhouse有两种安装方式&#xff0c;依赖于keeper做存储或者依赖于zookeeper做存储 二、zookeeper作…...

centos8 使用phpstudy安装tomcat部署web项目

系统配置 1、安装Tomcat 2、问题 正常安装完Tomcat应该有个配置选项&#xff0c;用来配置server.xml web.xml 还有映射webapps路径选项&#xff0c;但是我用的这个版本并没有。所以只能曲线救国。 3、解决 既然没有配置项&#xff0c;那就只能按最基本的方法配置&#xff0c…...

爬虫百度返回“百度安全验证”终极解决方案

这篇文章也可以在我的博客查看 爬不了啊&#xff01;&#xff01; 最近一哥们跟我说百度爬虫爬不了 弹出&#xff1a;“百度安全验证”&#xff0c;“网络不给力&#xff0c;请稍后重试” 说到爬虫&#xff0c;这里指的是Python中最常用的requests库 我说怎么爬不了了&#x…...

visual studio 2022配置

前提&#xff1a;我linux c 开发 一直在使用vscode 更新了个版本突然代码中的查找所用引用和变量修改名称不能用了&#xff0c;尝试了重新配置clang vc都不行&#xff0c;估计是插件问题&#xff0c;一怒之下改用visual studio 2022 为了同步2个IDE之间的差别&#xff0c;目前…...

B-树和B+树的区别

B-树和B树的区别 一、B-tree数据存储 在下图中 P 代表的是指针&#xff0c;指向的是下一个磁盘块。在第一个节点中的 16、24 就是代表我们的 key 值是什么。date 就是这个 key 值对应的这一行记录是什么。 假设寻找 key 为 33 的这条记录&#xff0c;33 在 16 和 34 中间&am…...

c注册cpp回调函数

在C语言中注册回调函数&#xff0c;函数需要使用静态函数&#xff0c;可使用bind和function来转换 案例一&#xff1a; #include <iostream> #include <functional> #include <string.h> #include "http_server.h" #include "ret_err_code.…...

批量将excel中字段为“八百”替换成“九百”

要批量将Excel中字段为"八百"的内容替换为"九百"&#xff0c;您可以使用Python的openpyxl库来实现。以下是一个示例代码演示如何读取Excel文件并进行替换操作&#xff1a; from openpyxl import load_workbook # 打开Excel文件 wb load_workbook(your_ex…...

关于docker-compose up -d在文件下无法运行的原因以及解决方法

一、确认文件下有docker-compose.yml文件 二、解决方法 检查 Docker 服务是否运行&#xff1a; 使用以下命令检查 Docker 服务是否正在运行&#xff1a; systemctl status docker 如果 Docker 未运行&#xff0c;可以使用以下命令启动它&#xff1a; systemctl start docker …...

机器学习笔记 - 基于keras + 小型Xception网络进行图像分类

一、简述 Xception 是深度为 71 层的卷积神经网络,仅依赖于深度可分离的卷积层。 论文中将卷积神经网络中的 Inception 模块解释为常规卷积和深度可分离卷积运算(深度卷积后跟点卷积)之间的中间步骤。从这个角度来看,深度可分离卷积可以理解为具有最大数量塔的 Inception 模…...

【Unity每日一记】SceneManager场景资源动态加载

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…...

自动驾驶数据回传需求

1、需求分析 用户 用户需求 实时性要求 需回传数据 数据类型 采样周期 数据量 大小 数据回传通道 研发工程师 分析评估系统性能表现&#xff0c;例如智驾里程统计、接管率表现、油耗表现、AEB报警次数等 当天 车身底盘数据、自动驾驶系统状态数据等 结构化数据 10…...

使用Jmeter自带recorder代理服务器录制接口脚本

脚本录制 配置线程组 添加代理服务器 端口 和 录制脚本放置位置可根据需要设置 启动录制 点击启动后 弹出创建证书提示&#xff0c;点击OK 这个证书后续需要使用到 然后可见 一个弹窗。 Recorder . 本质是代理服务录制交易控制 可设置对应数据 方便录制脚本的查看 证书配置…...