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

AD9361 Evaluation Software配置脚本转换工具

最近在玩一个开源的AD9361项目,AD9361采用纯逻辑配置,不需要ARM或者MicroBlaze。其中,先是用AD9361 Evaluation Software生成配置脚本,再转换成ad9361_lut.v。

在网上查了一圈,有个转换工具叫bit_converter,也有人用python写了转换脚本,但一点下载,都是要收费的。

好在皇天不负有心人,哈哈,我给《AD9361-FM-Radio-Verilog-CMOS-main》的作者发了封邮件,然后在GITHUB上留言,大佬速度回复,并提供了转换的python脚本。

extract.py代码如下:

import re# with open('default.txt', 'r') as f:
with open('my_lut.txt', 'r') as f:for line in f.readlines():scan_line = re.search('ad9361_cmd_data[\s]=[\s]{(.*)};', line)if scan_line:print(scan_line.group(1).strip().replace('\t', ' '))

main.py代码如下:

import re
from art import *lut_str = "\t\t13'd{:<4d}:\tad9361_cmd_data\t= {{1'b{}, 10'h{}, 8'h{}}};"tmp = '=' * 50 + '\n'
# tmp += text2art("SITLINV")
# tmp += '=' * 50 + '\n'
tmp += text2art("BRIANSUNE")
tmp += '=' * 50 + '\n'
tmp += 'File Name: ad9361_lut.v' + '\n'
tmp += '=' * 50 + '\n'
tmp += 'Programed By: BrianSune\n'
tmp += 'Contact: briansune@gmail.com\n'output_str = ''.join('// {}\n'.format(tps) for tps in tmp.split('\n'))
output_str += '\nfunction [18 : 0] ad9361_cmd_data;\n'
output_str += 'input [12 : 0] index;\n'
output_str += '''
begincase(index)13'd0   :\tad9361_cmd_data\t= {1'b1, 10'h000, 8'h00};
'''# print(output_str)lut_idx = 1
output_str2 = ''check_list = []
wait_list = []path = r'E:\资料\AD9361 FM RADIO\AD9361-FM-Radio-Verilog-CMOS-main\adi_tool'
# path = r'C:\Users\briansuneZ\Desktop\golden_ad9361_bist_lvds_rx'
# path = r'C:\Users\briansuneZ\Desktop\golden_ad9361_bist_loop_lvds'
path += r'\ad9361_ini'with open(path, 'r') as f:for line in f.readlines():wr_re = re.search(r'SPIWrite[\s]+([0-9A-F]+),([0-9A-F]+)[\s]*[/ ]*(.*)', line)rd_re = re.search(r'SPIRead[\s]+([0-9A-F]+)[\s]*[/ ]*(.*)', line)cal_re = re.search(r'WAIT_CALDONE[\s]+.*[/]+ (.*0x([0-9A-F]+).*)', line)if wr_re:# print(wr_re.groups())tmp_str = lut_str.format(lut_idx, 1, wr_re.group(1), wr_re.group(2))if wr_re.group(3):tmp_str += '\t// {}'.format(wr_re.group(3))tmp_str += '\n'output_str2 += tmp_strlut_idx += 1if rd_re:# print(rd_re.groups())tmp_str = lut_str.format(lut_idx, 0, rd_re.group(1), '00')if rd_re.group(2):tmp_str += '\t// {}'.format(rd_re.group(2))tmp_str += '\n'output_str2 += tmp_strcheck_list.append('{} {}'.format(lut_idx, rd_re.group(2)))lut_idx += 1if cal_re:# print(cal_re.groups())tmp_str = lut_str.format(lut_idx, 0, cal_re.group(2), '00')tmp_str += '\t// {}\n'.format(cal_re.group(1))output_str2 += tmp_strcheck_list.append('{} {}'.format(lut_idx, cal_re.group(1)))lut_idx += 1if line.strip() == 'ReadPartNumber':output_str2 += lut_str.format(lut_idx, 0, '037', '00') + '\t// ReadPartNumber\n'check_list.append('{} {}'.format(lut_idx, 'part num'))lut_idx += 1if line[0:4] == 'WAIT':wait_list.append('{} {}'.format(lut_idx - 1, line.strip()))output_str += output_str2
output_str += lut_str.format(lut_idx, 1, '014', '68')
output_str += '''endcase
end
endfunction
'''# print(output_str)
with open('ad9361_lut.v', 'w') as wf:wf.write(output_str)[print(ck) for ck in check_list]
print('\n\n')
[print(wi) for wi in wait_list]

如果运行报错,要安装一下art,命令如下:

pip install art

最后,向briansune大佬致敬,还是国际友人有开源精神!

相关文章:

AD9361 Evaluation Software配置脚本转换工具

最近在玩一个开源的AD9361项目&#xff0c;AD9361采用纯逻辑配置&#xff0c;不需要ARM或者MicroBlaze。其中&#xff0c;先是用AD9361 Evaluation Software生成配置脚本&#xff0c;再转换成ad9361_lut.v。 在网上查了一圈&#xff0c;有个转换工具叫bit_converter&#xff0…...

Centos7 配置Git

随笔记录 目录 1&#xff0c; 新建用户 2. 给用户设置密码相关操作 3. 为新用户添加sudo 权限 4. 配置Git 4.1 配置Git 4.2 查看id_ras.pub 5, 登录Git 配置SSH 秘钥 6. Centos7 登录Git 7. clone 指定branch到本地 8. 将新代码复制到指定路径 9. 上传指定代码 …...

python工具方法 44 数据仿真生成(粘贴目标切片到背景图像上,数据标签校验)

在深度学习训练中数据是一个很重要的因素,在数据不够时需要我们基于现有的数据进行增强生成新的数据。此外,在某特殊情况,如对某些目标切片数据(例如:石块分割切片)预测效果较差,需要增强其在训练数据中的频率。故此,我们可以将先有数据标注中的目标裁剪出来,作为样本…...

Llama 架构分析

从代码角度进行Llama 架构分析 Llama 架构分析前言Llama 架构分析分词网络主干DecoderLayerAttentionMLP 下游任务因果推理文本分类 Llama 架构分析 前言 Meta 开发并公开发布了 Llama系列大型语言模型 (LLM)&#xff0c;这是一组经过预训练和微调的生成文本模型&#xff0c;参…...

vue3前端 md5工具类

工具类 /*** Namespace for hashing and other cryptographic functions* Copyright (c) Andrew Valums* Licensed under the MIT license, http://valums.com/mit-license/*/var V V || {}; V.Security V.Security || {};(function () {// for faster accessvar S V.Secur…...

Unity触摸 射线穿透UI解决

unity API 之EventSystem.current.IsPointerOverGameObject() 命名空间 &#xff1a;UnityEngine.EventSystems 官方描述&#xff1a; public bool IsPointerOverGameObject(); public bool IsPointerOverGameObject(int pointerId); //触摸屏时需要的参数&#xff…...

基于QTreeWidget实现带Checkbox的多级组织结构选择树

基于QTreeWidget实现带Checkbox的多级组织结构选择树 采用基于QWidgetMingw实现的原生的组织结构树 通过QTreeWidget控件实现的带Checkbox多级组织结构树。 Qt相关系列文章&#xff1a; 一、Qt实现的聊天画面消息气泡 二、基于QTreeWidget实现多级组织结构 三、基于QTreeWidget…...

探索 Vim:一个强大的文本编辑器

引言&#xff1a; Vim&#xff08;Vi IMproved&#xff09;是一款备受推崇的文本编辑器&#xff0c;拥有强大的功能和高度可定制性&#xff0c;提供丰富的编辑和编程体验。本文将探讨 Vim 的基本概念、使用技巧以及为用户带来的独特优势。 简介和发展 1. Vim 的简介和历史 V…...

K8S(十)—容器探针

这里写目录标题 容器探针&#xff08;probe&#xff09;检查机制探测结果探测类型何时该使用存活态探针?何时该使用就绪态探针?何时该使用启动探针&#xff1f; 使用exechttptcpgrpc使用命名端口 使用启动探针保护慢启动容器定义就绪探针配置探针HTTP 探测TCP 探测探针层面的…...

[C错题本]

1.int,short,long都是signed的 但是char可能是signed 也可能是unsigned的——《C Primer》 2.在16位的PC中 char类型占1个字节 int占2个字节 long int占4个字节 float占四个字节 double占八个字节 3.自增运算符和自减运算符即使是在判断条件中使用也会实际生效 int i 1; int…...

tomcat启动异常:子容器启动失败(a child container failed during start)

最近在使用eclipse启动Tomcat时&#xff0c;发现一个问题&#xff0c;启动以前的项目突然报子容器启动异常。 异常信息如下&#xff1a; 严重: 子容器启动失败 java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 无法启动组件[org.apache.…...

JAVA序列化(创建可复用的 Java 对象)

JAVA 序列化(创建可复用的 Java 对象) 保存(持久化)对象及其状态到内存或者磁盘 Java 平台允许我们在内存中创建可复用的 Java 对象&#xff0c;但一般情况下&#xff0c;只有当 JVM 处于运行时&#xff0c;这些对象才可能存在&#xff0c;即&#xff0c;这些对象的生命周期不…...

如何使用自动化工具编写测试用例?

以下为作者观点&#xff0c;仅供参考&#xff1a; 在快速变化的软件开发领域&#xff0c;保证应用程序的可靠性和质量至关重要。随着应用程序复杂性和规模的不断增加&#xff0c;仅手动测试无法满足行业需求。 这就是测试自动化发挥作用的地方&#xff0c;它使软件测试人员能…...

redis底层数据结构之skiplist实现

skiplist实现 skiplist跳跃表&#xff0c;是一种有序数据结构&#xff0c;通过在每个节点中维持多个指向其他节点的指针&#xff0c;来达到快速访问节点的目的&#xff0c;redis使用skiplist作为zsort的底层实现之一 结构很像树形结构 typedef struct zskiplistNode { // 对象…...

mjpg-streamer配置其它端口访问视频

环境 树莓派4B ubuntu 20.04 U口摄像头 确认摄像头可访问 lsusb查看 在dev下可查看到video* sudo mplayer tv://可打开摄像头并访问到视频 下载mjpg-streamer并编译安装 在github下载zip包&#xff0c;下载的源码&#xff0c;需要编译安装 unzip解压 cd mjpg-streamer/mjp…...

C++相关闲碎记录(15)

1、string字符串 #include <iostream> #include <string> using namespace std;int main (int argc, char** argv) {const string delims(" \t,.;");string line;// for every line read successfullywhile (getline(cin,line)) {string::size_type beg…...

汽车IVI中控开发入门及进阶(十一):ALSA音频

前言 汽车中控也被称为车机、车载多媒体、车载娱乐等,其中音频视频是非常重要的部分,音频比如播放各种格式的音乐文件、播放蓝牙接口的音乐、播放U盘或TF卡中的音频文件,如果有视频文件也可以放出音频,看起来很简单,在windows下音乐播放器很多,直接打开文件就能播放各…...

Gradle 之初体验

文章目录 1.安装1&#xff09;检查 JDK2&#xff09;下载 Gradle3&#xff09;解压 Gradle4&#xff09;环境变量5&#xff09;验证安装 2.优势总结 Gradle 是一款强大而灵活的构建工具&#xff0c;用于自动化构建、测试和部署项目。它支持多语言、多项目和多阶段的构建&#x…...

【Spark精讲】Spark内存管理

目录 前言 Java内存管理 Java运行时数据区 Java堆 新生代与老年代 永久代 元空间 垃圾回收机制 JVM GC的类型和策略 Minor GC Major GC 分代GC Full GC Minor GC 和 Full GC区别 Executor内存管理 内存类型 堆内内存 堆外内存 内存管理模式 静态内存管理 …...

C语言实现Hoare版快速排序(递归版)

Hoare版 快速排序是由Hoare发明的&#xff0c;所以我们先来讲创始人的想法。我们直接切入主题&#xff0c;Hoare版快速排序的思想是将一个值设定为key&#xff0c;这个值不一定是第一个&#xff0c;如果你选其它的值作为你的key&#xff0c;那么你的思路也就要转换一下&#xf…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...