CVC输入语言

devtools/2024/9/24 3:31:33/

声明

位向量表达式(或项)由位向量常数、位向量变量以及下列函数构成。在STP中,所有变量必须在使用前声明。声明一个长度为32的位向量变量的例子是:x : BITVECTOR(32);。声明数组的例子如下:
x_arr : ARRAY BITVECTOR(32) OF BITVECTOR(5000);

功能和术语

长度为0的位向量变量(或术语)是不允许的。位向量常数可以用二进制或十六进制格式表示。最右边的位称为最低有效位(LSB),最左边的位称为最高有效位(MSB)。LSB的索引是0,而n位常数的MSB的索引是n-1。这个约定自然地扩展到所有位向量表达式。以下是一些以二进制和十六进制表示的位向量常数的例子:

0bin0000111101010000
0hex0f50

STP中的位向量实现支持非常多的函数和谓词。这些函数分为字级函数、位级函数和算术函数。

字级函数

名称符号示例
连接@t1@t2@…@tm
提取[i:j]x[31:26]
左移<<0bin0011 << 3 = 0bi n0011000
右移>>x[24:17] >> 5, 另一个例子: 0bin1000 >> 3 = 0bin0001
符号扩展BVSX(bv,n)BVSX(0bin100, 5) = 0bin11100
数组读取[index]x_arr[t1]
数组写入WITHx_arr WITH [index] := value

注释:

  • 对于提取项,例如 t[i:j],n > i >= j > 0,其中 n 是 t 的长度。
  • 对于左移项,t << k 表示将 k 个 0 追加到 t 的右端。t << k 的长度为 n * +* k。
  • 对于右移项,t >> k 表示通过 k 个 0 跟随t[n-1,k]得到的位向量,其长度为 t >> k 为 n。

例子

  1. 连接
ASSERT x@y = 0b1101@0b11;  // 连接 x 和 y,假设 x = 1101 和 y = 11

位级函数

名称符号示例
位与&t1 & t2 & … & tm
位或|t1 | t2 | … | tm
位非~~t1
位异或BVXORBVXOR(t1, t2)
位与非BVNANDBVNAND(t1, t2)
位或非BVNORBVNOR(t1, t2)
位同或BVXNORBVXNOR(t1, t2)

注意: 所有位运算函数的参数必须具有相同的长度。

算术函数

名称符号示例
位向量加法BVPLUSBVPLUS(n, t1, t2, …, tm)
位向量乘法BVMULTBVMULT(n, t1, t2)
位向量减法BVSUBBVSUB(n, t1, t2)
位向量一元负BVUMINUSBVUMINUS(t1)
位向量除法BVDIVBVDIV(n, t1, t2)
有符号位向量除法SBDIVSBDIV(n, t1, t2)
位向量模数BVMODBVMOD(n, t1, t2)
有符号位向量模数SBVMODSBVMOD(n, t1, t2)

注释:

  • 输出位的数量必须被指定(一元负数除外)。
  • 所有输入必须具有相同的长度。
  • BVUMINUS(t)BVPLUS(n, ~t, 0bin1) 的简写,其中 n 是 t 的长度。
  • BVSUB(n, t1, t2)BVPLUS(n, t1, BVUMINUS(t2)) 的简写。

STP 还支持条件表达式,例如 IF cond THEN t1 ELSE t2 ENDIF,其中 cond 是布尔表达式,t1t2 可以是位向量表达式。这样可以模拟多路选择器。一个例子是:

x, y : BITVECTOR(1);
QUERY(x = (IF 0bin0 = x THEN y ELSE BVUMINUS(y) ENDIF));

谓词

名称符号示例
等于=t1=t2
小于BVLTBVLT(t1, t2)
大于BVGTBVGT(t1, t2)
小于或等于BVLEBVLE(t1, t2)
大于或等于BVGEBVGE(t1, t2)
有符号小于SBVLTSBVLT(t1, t2)
有符号大于SBVGTSBVGT(t1, t2)
有符号小于或等于SBVLESBVLE(t1, t2)
有符号大于或等于SBVGESBVGE(t1, t2)

注意:

  • STP 要求像 x = y 这样的原子公式中,x 和 y 必须是长度相同的表达式。
  • STP接受原子公式的布尔组合。

注释

%开头的是注释。

例子

Example1

x : BITVECTOR(5);   //声明了一个名为 x 的位向量变量,它的长度是5位。
y : BITVECTOR(4); //明了一个名为 y 的位向量变量,它的长度是4位
QUERY( 		//查询表达式,STP将尝试验证括号内的表达式是否总是为真BVPLUS(9, x@0bin0000, (0bin000@(~y)@0bin11))[8:4]=BVPLUS(5, x, 0bin000@~(y[3:2]))
);

http://www.ppmy.cn/devtools/116300.html

相关文章

文本分类实战项目:如何使用NLP构建情感分析模型

文本分类实战项目&#xff1a;如何使用NLP构建情感分析模型 一、引言 随着互联网的迅速发展&#xff0c;用户在社交媒体、产品评论、论坛等平台上产生了大量的文本数据。通过分析这些数据&#xff0c;我们可以了解用户的情绪和态度&#xff0c;而情感分析就是专门用于分析文本…

伦敦金的交易差价意味着什么?

在伦敦金投资市场上&#xff0c;点差是指交易平台的买入价&#xff08;买价&#xff09;和卖出价&#xff08;卖价&#xff09;之间的差额。对投资者来说&#xff0c;点差是交易成本的一部分&#xff0c;但它是经纪商的收入来源。点差代表伦敦金投资者在进入和退出交易时需要支…

C#基础(13)结构体

前言 随着函数的讲解完成&#xff0c;我想你已经初步有了写一些复杂逻辑功能的能力&#xff0c;但是我们会发现其实在我们大部分实际开发情况中&#xff0c;很多我们需要写的变量可能不只有一个属性。 他可能有很多变量&#xff0c;那这时候我们如果要把这些变量集中到一个东…

LabVIEW提高开发效率技巧----使用LabVIEW工具

LabVIEW为开发者提供了多种工具和功能&#xff0c;不仅提高工作效率&#xff0c;还能确保项目的质量和可维护性。以下详细介绍几种关键工具&#xff0c;并结合实际案例说明它们的应用。 1. VI Analyzer&#xff1a;自动检查代码质量 VI Analyzer 是LabVIEW提供的一款强大的工…

通过多模态关系图学习实现可解释的医学图像视觉问答|文献速递--Transformer架构在医学影像分析中的应用

Title 题目 Interpretable medical image Visual Question Answering via multi-modal relationship graph learning 通过多模态关系图学习实现可解释的医学图像视觉问答。 01 文献速递介绍 医学视觉问答&#xff08;VQA&#xff09;是医学多模态大语言模型&#xff08;LL…

comfyui中报错 Cmd(‘git‘) failed due to: exit code(128) 如何解决

&#x1f388;背景 comfyui今天在安装插件的过程中&#xff0c;发现有个插件第一次安装失败后&#xff0c;再次安装就开始报错了&#xff0c;提示&#xff1a; ComfyUI-Inpaint-CropAndStitch install failed: Bad Request 截图如下&#xff1a; 看下后台的报错&#xff1a; …

设计支持 50 万 QPS 的站内未读消息系统

引言 在现代互联网应用中&#xff0c;站内消息系统是许多平台不可或缺的功能之一&#xff0c;尤其是对于社交网络、电商、金融等需要大量用户交互的系统来说&#xff0c;消息通知功能更是关键。在高并发场景下&#xff0c;一个设计良好的消息系统不仅需要处理大量用户的未读消…

sqlite数据库的docsize, segdir, segments, stat

在 SQLite 数据库的全文搜索 (FTS) 模块中&#xff0c;有一些内部表和结构用于存储和管理全文搜索索引的数据。对于这些表项&#xff0c;docsize, segdir, segments, stat 等是重要的组成部分&#xff0c;它们之间相互配合&#xff0c;来有效地管理全文索引数据。以下是它们的作…