327 lines
25 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"\n",
"import json\n",
"import requests as r\n",
"\n",
"from langchain_community.vectorstores import FAISS\n",
"from langchain_community.document_loaders import DirectoryLoader\n",
"from langchain.text_splitter import RecursiveCharacterTextSplitter\n",
"from langchain_community.embeddings import HuggingFaceEmbeddings"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/data/zhelonghuang/miniconda3/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n",
"/data/zhelonghuang/miniconda3/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n",
" warnings.warn(\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"整理得到 304 个文档\n",
"分块得到 1276 个文档\n",
"数据库已存储到 ../blog-vecdb 中\n"
]
}
],
"source": [
"embedding = HuggingFaceEmbeddings(model_name='maidalun1020/bce-embedding-base_v1')\n",
"\n",
"db_persistent_dir = '../blog-vecdb'\n",
"\n",
"if os.path.exists(db_persistent_dir):\n",
" db = FAISS.load_local(db_persistent_dir, embedding, allow_dangerous_deserialization=True)\n",
" print('成功从 {} 中提取数据'.format(db_persistent_dir))\n",
"else:\n",
" loader = DirectoryLoader('../docs', glob='**/*.md')\n",
" docs = loader.load()\n",
" print('整理得到 {} 个文档'.format(len(docs)))\n",
"\n",
" text_splitter = RecursiveCharacterTextSplitter(\n",
" chunk_size = 800,\n",
" chunk_overlap = 80,\n",
" length_function = len,\n",
" add_start_index = True\n",
" )\n",
" split_docs = text_splitter.split_documents(docs)\n",
" print('分块得到 {} 个文档'.format(len(split_docs)))\n",
" db = FAISS.from_documents(split_docs, embedding)\n",
" db.save_local(db_persistent_dir)\n",
" print('数据库已存储到 {} 中'.format(db_persistent_dir))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(Document(page_content='完整的 VCD 语法,可以参考中科大资源网站上的 IEEE 1364 标准 第 18 章的内容。\\n\\n基本信息\\n\\n一个 vcd 文件会描述波形产生的基本信息,包括,日期,版本,单位时间,注释等等。\\n\\n日期 date\\n\\n$date\\n Sat Apr 20 20:06:14 2024\\n$end\\n\\n与 verilog 类似,$end$ 是一切 scope 的结束符号,你也可以写成这样:\\n\\n$date Sat Apr 20 20:06:14 2024 $end\\n\\n版本 version\\n\\n$version\\n Icarus Verilog\\n$end\\n\\n时间单位 timescale\\n\\n$timescale\\n 1ns\\n$end\\n\\n注释 comment\\n\\n$comment\\n Show the parameter values.\\n$end\\n\\n变量申明\\n\\nvcd 中通过如下的方式申明一个 module 内的变量,,每条的格式为 $var type bitwidth id name比如\\n\\n$scope module ID_EX $end\\n$var wire 2 ! AluOp [1:0] $end\\n$var wire 1 \" AluSrc $end\\n$var wire 1 # MemRead $end\\n$upscope $end\\n\\n以上语句申明了一个模块 ID_EX 和内部的三个信号 AluOpAluSrc 和 MemRead。这三个变量在接下来的 vcd 描述中会被 !\"# 替代,这也被称为 vcd 描述中,变量的 id.\\n\\n单个 module 的变量申明通过 $upscope $end 结束。\\n\\n所有 module 的变量申明通过 $enddefinitions $end 结束。\\n\\nparameter 赋值', metadata={'source': '../docs/kirigaya.cn/224.md', 'start_index': 0}),\n",
" 0.4351002),\n",
" (Document(page_content='TODO\\n\\n找到所有 vcd item 的 type 类型可参考https://pyvcd.readthedocs.io/en/latest/vcd.common.html\\n\\nbug\\n\\n详见飞书文档https://nc-ai-lab.feishu.cn/wiki/Z4AxwU1SdilATAk7GuvcYkIDnwh\\n\\n流程\\n\\n目前需要为Digital-IDE设计一个render用于显示VCD文件。\\n\\nIEEE 1364定义VCD(value change dump)文件是含已选变量(信号)的值变化信息存储文件。\\n\\nwavedrom在GitHub上开发过vcd和hdl的wavedrom脚本格式可以用于进行DIDE的vcd可视化的二次开发目前发现为了实现vcd文件基本的仓库主要是下面这两个\\n\\nJS层与一个简单的前端https://github.com/wavedrom/vcdrom\\n\\nwasm 解析https://github.com/wavedrom/vcd\\n\\n打算基于这两个仓库二次开发一个好用的vcd渲染模块再加入DIDE中。\\n\\n开发思路\\n\\nvcd 的渲染器分为如下几步进行开发。\\n\\nmermaid\\ngraph LR\\na(读取)-->b(渲染)-->c(解析)\\n\\nVCD 读取和解析并不难,难在如何快速安全地读取,对于一些长时间的模拟和仿真而言, vcd 文件可能会非常大。因此vcd 需要分块读取,分块解析,为了避免这些不必要的麻烦,我使用了 https://github.com/wavedrom/vcdrom 这个项目的后端进行修改。\\n\\nwasm 解析器\\n\\n原项目写得过于紧凑并不适合进行修改因此需要修改一部分代码。\\n\\n整合项目在 https://github.com/Digital-EDA/digital-vcd-parser', metadata={'source': '../docs/kirigaya.cn/72.md', 'start_index': 0}),\n",
" 0.55531096),\n",
" (Document(page_content='cap.release()\\nout.release()\\ncv2.destroyAllWindows()\\n```\\n\\n其中FORMAT代表目标视频的编码格式目前我还遇到了很多bug已经确定的FORMAT和编码关系的对照表如下\\n\\n目标视频编码格式 FORMAT 取值 mp4 \"mp4v\" aiv \"MJPG\"\\n\\n参考\\n\\n[1] python opencv写视频——cv2.VideoWriter()_翟羽嚄的博客-CSDN博客_cv2.videowriter', metadata={'source': '../docs/kirigaya.cn/21.md', 'start_index': 711}),\n",
" 0.71963197)]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"db.similarity_search_with_score(\n",
" query='vcd 波形文件的基本格式是什么样子的?',\n",
" k=3\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(Document(page_content='问题标题 基础教程太少\\n除了b站的两个教程外建议多出文档以及示例工程一个刚接触FPGA但有不熟悉vivado的萌新就指望这个加快学习进度了\\n请问B站教程标题是啥我搜digital-ide啥也搜不到\\n请问B站教程标题是啥我搜digital-ide啥也搜不到\\n《Digital-IDE使用教程(一个DDS的实现)》\\n《Digital-IDE应用之FM调制解调》\\n请问B站教程标题是啥我搜digital-ide啥也搜不到\\n《Digital-IDE使用教程(一个DDS的实现)》 《Digital-IDE应用之FM调制解调》\\n好的谢谢\\n那个教程是好早之前我出的了新的版本一直不稳定今年稳定之后会出后续教程。\\nDigital IDE 的使用教程可以看\\n官方文档为 https://sterben.nitcloud.cn/zh/ 但是目前文档不是很完善。', metadata={'source': '../docs/digital-issue/issue-47/issue.md', 'start_index': 0}),\n",
" 0.63593847),\n",
" (Document(page_content='home: true\\nheroImage: /icon.png\\ndescription: Vscode 平台上的 ASIC & FPGA 开发扩展\\nactionText: 快速开始 🐳\\nactionLink: /zh/guide/introduction\\nfeatures:\\n- title: ✨ HDL 语言支持\\n details: 支持 verilog, vhdl, systemverilog, tcl 脚本等\\n- title: 🎯 项目管理\\n details: 在你的项目中查看结构化的 HDL 文件\\n- title: 🛠️ 额外的工具\\n details: FSM, Netlist, 一键仿真, 文档化,让你的编程体验更加舒坦。\\n\\n::: slot footer\\nMIT Licensed | Copyright © 2018-present Digital-EDA\\n:::', metadata={'source': '../docs/digital-document/index.md', 'start_index': 0}),\n",
" 0.7582667),\n",
" (Document(page_content='TODO\\n\\n找到所有 vcd item 的 type 类型可参考https://pyvcd.readthedocs.io/en/latest/vcd.common.html\\n\\nbug\\n\\n详见飞书文档https://nc-ai-lab.feishu.cn/wiki/Z4AxwU1SdilATAk7GuvcYkIDnwh\\n\\n流程\\n\\n目前需要为Digital-IDE设计一个render用于显示VCD文件。\\n\\nIEEE 1364定义VCD(value change dump)文件是含已选变量(信号)的值变化信息存储文件。\\n\\nwavedrom在GitHub上开发过vcd和hdl的wavedrom脚本格式可以用于进行DIDE的vcd可视化的二次开发目前发现为了实现vcd文件基本的仓库主要是下面这两个\\n\\nJS层与一个简单的前端https://github.com/wavedrom/vcdrom\\n\\nwasm 解析https://github.com/wavedrom/vcd\\n\\n打算基于这两个仓库二次开发一个好用的vcd渲染模块再加入DIDE中。\\n\\n开发思路\\n\\nvcd 的渲染器分为如下几步进行开发。\\n\\nmermaid\\ngraph LR\\na(读取)-->b(渲染)-->c(解析)\\n\\nVCD 读取和解析并不难,难在如何快速安全地读取,对于一些长时间的模拟和仿真而言, vcd 文件可能会非常大。因此vcd 需要分块读取,分块解析,为了避免这些不必要的麻烦,我使用了 https://github.com/wavedrom/vcdrom 这个项目的后端进行修改。\\n\\nwasm 解析器\\n\\n原项目写得过于紧凑并不适合进行修改因此需要修改一部分代码。\\n\\n整合项目在 https://github.com/Digital-EDA/digital-vcd-parser', metadata={'source': '../docs/kirigaya.cn/72.md', 'start_index': 0}),\n",
" 0.83628875)]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"db.similarity_search_with_score(\n",
" query='digital ide 有什么教程吗',\n",
" k=3\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import json\n",
"import requests as r\n",
"\n",
"\n",
"api_key = '9J5qFTYr6wPRxkoVoXycnoWf'\n",
"secret_key = 'Xa6eJelStx5i7Ft3qQH0NAT6AvOkqhkH'\n",
"\n",
"def get_access_key():\n",
" headers = {\n",
" 'Content-Type': 'application/json',\n",
" 'Accept': 'application/json'\n",
" }\n",
"\n",
" url = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={api_key}&client_secret={secret_key}'\n",
" payload = json.dumps(\"\")\n",
"\n",
" res = r.post(\n",
" url=url,\n",
" data=payload,\n",
" headers=headers\n",
" )\n",
"\n",
" resJson = res.json()\n",
" access_token = resJson.get('access_token')\n",
" assert isinstance(access_token, str), 'access_token 获取失败,详细信息' + str(resJson)\n",
" return access_token\n",
"\n",
"access_token = get_access_key()"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(Document(page_content='对于property.json文件中的library属性不建议用户自己配置建议使用import library命令或者下图中的图标激活命令进行配置。\\n\\nstate 属性代表是库文件是加载到本地工作区,还是作为远程进行链接。\\n- remote 代表从远程虚拟包含(不在工作区下的都被认为远程,而不是网络上的远程)。\\n - 远程库文件可以打开并更改 (注:如果更改之后下次导入就是更改之后的代码) 。\\n- local 代表将远程文件导入到该工程本地\\n 1. 放置到arch.hardware.src下的lib中此时更改不会影响远程库中的代码。\\n 2. 注当从local改回remote时lib文件夹会被删除插件会提醒请注意。\\n\\ncommon 属性代表插件自带的HDL功能库该库的代码不太成熟仅供参考。\\n目前已经经过仿真测试的lib路径如下\\n- Soc\\n- Math/Cordic.v\\n- Math/Sort3.v\\n- Math/Sqrt.v\\n- Malloc/RAM/Shift_RAM\\n- Apply/DSP/Advance/Communicate/Modulate\\n- Apply/DSP/Base/DDS\\n- Apply/Image (需要包含 Sort3, Sqrt, Shift_RAM)\\n\\n【注】当输入的是文件夹时则包含该文件夹下所有的文件。此外不建议直接更改该库中的代码更改之后再在下一次插件更新之后会被重新覆盖请慎重。\\n\\ncustom 属性代表用户自定义HDL功能库。\\n该属性的使用需要对setting下的PRJ.customer.Lib.repo.path进行配置用户自定义库的根目录并与custom属性下的配置组成文件(夹)的绝对路径。表示如下:\\nPRJ.customer.Lib.repo.path/${custom}', metadata={'source': 'docs/digital-document/guide/pm-project-building.md', 'start_index': 2533}), 0.6334237), (Document(page_content='json\\n{\\n \"version\": \"0.2.0\",\\n \"configurations\": [\\n {\\n \"name\": \"Extension Run\",\\n \"type\": \"extensionHost\",\\n \"request\": \"launch\",\\n \"runtimeExecutable\": \"${execPath}\",\\n \"args\": [\\n \"--extensionDevelopmentPath=${workspaceFolder}\"\\n ]\\n },\\n {\\n \"name\": \"Extension Tests\",\\n \"type\": \"extensionHost\",\\n \"request\": \"launch\",\\n \"args\": [\\n \"--extensionDevelopmentPath=${workspaceFolder}\",\\n \"--extensionTestsPath=${workspaceFolder}/test/suite/index\"\\n ]\\n }\\n ],\\n \"resolveSourceMapLocations\": [\\n \"${workspaceFolder}/**\",\\n \"!**/node_modules/**\"\\n ]\\n}', metadata={'source': 'docs/kirigaya.cn/33.md', 'start_index': 273}), 0.6832247), (Document(page_content='json\\n{\\n \"$schema\": \"https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json\",\\n \"blocks\": [\\n {\\n \"alignment\": \"left\",\\n \"newline\": true,\\n \"segments\": [\\n {\\n \"foreground\": \"#ffbebc\",\\n \"leading_diamond\": \"<#ff70a6> \\\\ue200 \",\\n \"properties\": {\\n \"display_host\": true\\n },\\n \"style\": \"diamond\",\\n \"template\": \"锦恢 <#ffffff>on\",\\n \"type\": \"session\"\\n },\\n {\\n \"foreground\": \"#bc93ff\",\\n \"properties\": {\\n \"time_format\": \"Monday <#ffffff>at 3:04 PM\"\\n },\\n \"style\": \"diamond\",\\n \"template\": \" {{ .CurrentDate | date .Format }} \",\\n \"type\": \"time\"\\n },', metadata={'source': 'docs/kirigaya.cn/100.md', 'start_index': 0}), 0.7037922)]\n",
"我不知道\n"
]
}
],
"source": [
"def make_prompts(docs: list[str]) -> str:\n",
" prompts = '你是一个很聪明的AI下面是你的知识库和参考内容请根据参考内容回答上述的问题\\n{}'.format('\\n'.join(docs))\n",
" return prompts\n",
"\n",
"def call_llm(query: str) -> str:\n",
" payload = json.dumps({\n",
" \"messages\": [\n",
" { \"role\": \"user\", \"content\": query }\n",
" ]\n",
" })\n",
"\n",
" headers = {\n",
" 'Content-Type': 'application/json'\n",
" }\n",
" try:\n",
" url = 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/ernie-lite-8k?access_token=' + access_token\n",
" res = r.post(url, headers=headers, data=payload)\n",
" return res.json()['result']\n",
" except Exception as e:\n",
" return '发生错误:' + e.__str__()\n",
"\n",
"def make_query(query, use_vecdb=True, threshold=0.6):\n",
" if not use_vecdb:\n",
" return call_llm(query)\n",
" \n",
" doc_scores = db.similarity_search_with_score(query, k=3)\n",
" print(doc_scores)\n",
" suggest_docs = []\n",
" for doc, score in doc_scores:\n",
" if score < threshold:\n",
" detail = '详细请参考: https://kirigaya.cn/blog/article?seq=232'\n",
" page_content = doc.page_content.strip() + '\\n' + detail.strip()\n",
" suggest_docs.append(page_content)\n",
" \n",
" if len(suggest_docs) > 0:\n",
" prompt = make_prompts(suggest_docs)\n",
" question = query + '\\n' + prompt\n",
" answer = call_llm(question)\n",
" return answer\n",
" else:\n",
" return '我不知道'\n",
"\n",
"print(make_query('property.json'))"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[(Document(page_content='我的服务器openjdk \"11.0.20\")是满足的。\\n\\n设置环境变量 JAVA_HOME\\n\\n检查你是否有环境变量JAVA_HOME\\nbash\\n$ echo $JAVA_HOME\\n/usr/lib/jvm/java-11-openjdk-amd64\\n我也是有的没有的话记得在~/.bashrc或者~/.zshrc中export一下。\\n\\nglibc 版本 > 2.17\\n\\n然后检查你的glibc版本保证glibc至少支持到2.17的版本:\\n\\nbash\\n$ strings /lib64/libc.so.6 | grep GLIBC_\\nGLIBC_2.2.5\\n...\\n...\\nGLIBC_2.30\\nGLIBC_PRIVATE\\n\\n如果不满足的话记得升级一下glibc如何升级请看这篇博客。\\n\\n因为下面要启动两个持久化服务如果你没有后台运行软件可以用用screen这个工具\\nbash\\n$ sudo apt install screen\\n\\n安装签名服务器\\n\\n在安装Mirai之前一定要先安装好签名服务器并运行否则我们将无法正常进行登录。\\n\\n下载项目 unidbg-fetch-qsign 的release\\n\\n在unidbg-fetch-qsign项目的 release 中下载最新版本,比如我用的版本是这样的:\\n\\nbash\\n$ mkdir -p ~/Package/qsign && cd ~/Package/qsign\\n$ wget https://github.com/fuqiuluo/unidbg-fetch-qsign/releases/download/1.1.9/unidbg-fetch-qsign.3.zip\\n\\n连续unzip两次得到文件夹文件夹内部一共三个文件夹bin, lib, txlib。进入txlib查看支持协议版本', metadata={'source': 'docs/kirigaya.cn/104.md', 'start_index': 654}), 0.7496957), (Document(page_content='前言\\n\\n登录失效\\n\\n最近因为要使用QQ机器人来给群友回答一些技术问题所以在尝试运行之前我自己写的QQ机器人项目。但是不愧是QQ又一次破坏了登录规则让我们之前的QQ登录程序全部失效出现了大量的45错误码。\\n\\n签名服务器 Sign Server\\n\\n通过进一步的了解目前的QQ会对发送的数据包进行验证验证不通过就会爆出45错误码次数过多甚至会直接封号。在Mirai社区诸位大佬的努力下Mirai社区出现了第三方签名插件和对应的第三方签名服务器运行程序。\\n\\n为什么使用Mirai\\n\\n我之前一直用的go-cqhttp这是一款非常优秀的QQ后端但是对于一些高并发的群消息这个启动器有时候可能会吞消息导致机器人的回复不及时。因此新版本我打算使用mirai来作为后端。这篇文章简单记录一下签名服务器时代如何正确在Linux服务器上配置和下载mirai。\\n\\n环境准备\\n\\nJDK 版本 > 11\\n\\n首先先确保你的服务器上有版本大于11的java运行时:\\n\\nbash\\n$ java -version\\nopenjdk version \"11.0.20\" 2023-07-18\\nOpenJDK Runtime Environment (build 11.0.20+8-post-Ubuntu-1ubuntu120.04)\\nOpenJDK 64-Bit Server VM (build 11.0.20+8-post-Ubuntu-1ubuntu120.04, mixed mode, sharing)\\n\\n我的服务器openjdk \"11.0.20\")是满足的。\\n\\n设置环境变量 JAVA_HOME', metadata={'source': 'docs/kirigaya.cn/104.md', 'start_index': 0}), 0.8160676), (Document(page_content='package.json\\n\\n库的信息全部在 package.json 中罗列,我这边就直接给出我的库了:\\n\\njson\\n{\\n \"name\": \"live2d-render\",\\n \"version\": \"0.0.3\",\\n \"description\": \"a easy-to-go render interface for the newest version of live2d\",\\n \"main\": \"index.js\",\\n \"scripts\": {\\n \"test\": \"echo \\\\\"Error: no test specified\\\\\" && exit 1\"\\n },\\n \"repository\": {\\n \"type\": \"git\",\\n \"url\": \"git+https://github.com/LSTM-Kirigaya/Live2dRender.git\"\\n },\\n \"keywords\": [\\n \"live2d\",\\n \"render\",\\n \"live2d-render\"\\n ],\\n \"author\": \"kirigaya\",\\n \"license\": \"Apache-2.0\",\\n \"bugs\": {\\n \"url\": \"https://github.com/LSTM-Kirigaya/Live2dRender/issues\"\\n },\\n \"homepage\": \"https://github.com/LSTM-Kirigaya/Live2dRender#readme\"\\n}', metadata={'source': 'docs/kirigaya.cn/201.md', 'start_index': 465}), 0.8170945)]\n",
"我不知道\n"
]
}
],
"source": [
"print(make_query('给我 jdk 的下载链接', threshold=0.1))"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"我不知道\n"
]
}
],
"source": [
"print(make_query('如何制作核武器?', use_vecdb=True))"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"制作核武器是一个高度敏感且极端复杂的科学问题,需要专业的知识和技术。同时,核武器是一种极具破坏性和毁灭性的武器,其制造和使用将导致不可估量的后果和灾难。因此,我无法提供任何关于如何制作核武器的信息或建议。\n",
"核武器的制造和使用是违反国际法和道德准则的,会带来严重的后果和灾难性影响。我们应该尊重国际法和道德准则,维护世界和平与稳定。如果您对核武器或其他相关问题感兴趣,建议您咨询专业人士或查阅相关文献资料,以获取更准确和全面的信息。\n"
]
}
],
"source": [
"print(make_query('如何制作核武器?', use_vecdb=False))"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"VCDVisual Coded Data波形文件是一种用于描述电子电路中信号波形的文件格式。VCD波形文件通常以文本文件的形式存储其中包含了信号的采样数据和时间信息。\n",
"\n",
"VCD波形文件的格式并没有一个严格的标准不同的软件或工具可能会采用不同的格式来存储波形数据。然而通常VCD波形文件包含以下基本元素\n",
"\n",
"1. 头信息Header这部分包含了文件的元数据如文件名、文件版本、时间单位等。\n",
"2. 信号定义Signal Definitions这部分定义了波形文件中包含的信号名称、颜色、刻度等属性。\n",
"3. 采样数据Sample Data这是波形文件的核心部分包含了信号的采样数据和时间信息。通常以二维数组的形式存储其中每个点代表一个采样点的幅度和时间。\n",
"\n",
"VCD波形文件的具体格式可能会因不同的软件或工具而有所不同但一般来说它们都是文本可读的格式可以方便地使用文本编辑器或其他工具进行查看和编辑。此外一些电子设计自动化EDA工具也支持导入和导出VCD波形文件以便于进行电路仿真和调试等操作。\n",
"\n",
"需要注意的是除了VCD格式外还有其他一些用于描述波形数据的文件格式如ASCII、CSV、HDL-TNS等。每种格式都有其特点和适用范围具体选择哪种格式取决于实际需求和使用的工具。\n"
]
}
],
"source": [
"print(make_query('vcd 波形文件的格式是什么样的?', use_vecdb=False))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}