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

CVC输入语言

声明

位向量表达式(或项)由位向量常数、位向量变量以及下列函数构成。在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.mrgr.cn/news/34606.html

相关文章:

  • 深入探索:Scrapy深度爬取策略与实践
  • Unity音频导入设置
  • 创新培养:汽车零部件图像分割
  • Redis - 哨兵(Sentinel)
  • HTML之表单学习记录
  • 在C++上实现反射用法
  • 人工智能之计算机视觉的发展历程与相关技术内容,相应的模型介绍
  • 10个降低性能的SQL问题及改进措施
  • RK3568笔记六十二:使用V4L2读取摄像头并在LCD上显示
  • 5. 条件 Conditionals
  • 每日一练:二叉树的直径
  • matlab之数据处理:滑动平均滤波算法与五点三次平滑算法
  • 828华为云征文 | 将Vue项目部署到Flexus云服务器X实例并实现公网访问
  • 【学习笔记】Linux系统基础知识3 —— cd命令详解
  • 【我的 PWN 学习手札】House of Botcake —— tcache key 绕过
  • 2024个人简历模板免费可编辑,可能是整理最全的简历(支持Word格式下载)
  • Set 和 Map 的模拟实现
  • 【深度】为GPT-5而生的「草莓」模型!从快思考—慢思考到Self-play RL的强化学习框架
  • c++9月23日
  • 【编程底层原理】亿级数据表查询最后10条记录limit 99999990,10性能为啥特慢,而且数据库都被查宕机了
  • Java Integer 缓存机制:小镇的居民与大城市的拥堵
  • 小新 Pro13 + windows 11 家庭中文版(网络适配器及地址配置)
  • DSP学习00-F28379D学习准备(了解一个工程的构成)
  • 什么是ELK
  • 代码随想录冲冲冲 Day53 图论Part5
  • 技术小谈|反射和类加载的一个简单应用