首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
84 阅读
2
科普:Memory Compiler生成的Register file和SRAM有何区别?
74 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
74 阅读
4
后仿中$setup,$hold与$setuphold
45 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
36 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vscode
linux
systemverilog
vcs
STM32
PyQT
EDA
FPGA
gvim
cadence
Alist
xilinx
UVM
uos
macos
package
MCU
risc-v
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
搜索到
378
篇与
的结果
2025-07-17
SWD协议通信的简单总结(2022-08-05)
对SWD协议做一个简单的总结SWD协议1.SWD协议框图SWD协议可以配置单片机内部几乎所有的寄存器。整个SWD过程是分级进行的,时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先HOST对SW-DP进行操作,确定AP寄存器的参数,达到对Cortex Memory Map进行操作。Debug Access Port(DAP)由两部分组成:Debug Port(DP)Memory Access Port(MEM-AP)(AP)2.DAP寄存器1、DP寄存器IDCODE:识别码寄存器,用于识别SW-DP。ID:0x0BB11477(M0)ABORT:中止寄存器,强制AP事务中止。在通信中,若发生粘性错 误位置1(ack = 4)。将0b1写入ABORT中,会生成一个DAP中止使当前AP事务中止。CTRL_STAT_W/R:控制状态寄存器,用于控制和获取有关DP的状态信息。SELECT:AHB-AP选择寄存器,选择要访问的端口(AP)和AP中的bank地址和DP的bank地址。RDBUFF:读缓冲寄存器,在SW-DP上,RDBUFF显示了在上一次AP读取期间捕获的数据,允许重复返回值而不生成新的AP访问。2、AP寄存器CSW_W:控制/状态字寄存器,CSW配置和控制通过MEM-AP访问连接的内存系统。size:32bit-0b010;16bit-0b001TAR_W:传送地址寄存器,TAR保存要通过AP访问的内存地址。DRW_W/R:数据读/写寄存器,DRW将AP访问中传递的值直接映射到TAR中指定的地址的一个或多个内存访问。IDR:识别寄存器,IDR标识访问的端口3.读/写时序及命令1、SWD时序1)成功的写时序 (烧录器往DP或MEM-AP寄存器的写操作)2)成功的读时序 (指烧录器读取DP或MEM-AP寄存器的数据)3)DAP没准备好,响应WAIT给HOST,此次通讯结束4)DAP出错,响应FAULT给HOST,此次通讯结束2、SWD命令详情1)主机 HOST 发出的请求由 8bit 组成Bit0:Start,固定为 1。Bit1:APnDP,0表示访问 DP 寄存器,1 表示访问 MEM-AP 寄存器。Bit2:RnW,0表示写请求,1表示读请求。Bit[4:3]:地址值A[3:2],存放DP/AP寄存器的地址。Bit5:Parity,用于表示由{APnDP,RnW, A[2:3]}组成这四位数的奇偶总个数。Bit6:Stop,固定为0。Bit7:Park,固定为1。2)Target返回的ACK值由3bit组成ACK[0:2]==001,表示FAULTACK[0:2]==010,表示WAITACK[0:2]==100,表示OK response3)数据由32bit有效数据 + 1bit数据的奇偶校验位组成chip连接1.获取芯片IDSWD协议的操作步骤:1、SWD初始化步骤:a)初始化IO口,SWCLK和SWIO设置为输出模式,保持SWDIO=1,保证Host连续发送至少50个“1”,使得Target进行Line Reset。b)发送JTAG to SWD命令,0x79、0xE7两个byte(在ARM-Debug_Interface官方文档中可以查到),随后再发送一次line reset操作。c)至少发送两个Idle信号,保持SWDIO=0。d)读取Chip ID,从而完成SWD初始化操作。此时只能访问DP寄存器组,AP寄存器组还无法访问。2、解锁AP步骤如下:1)CTRL/STAT寄存器写入0x50000000 (第28位和第30位),开启debug port及其时钟2)SELECT寄存器写入的数据为0x000000F0,bank:0xF3)读取IDR寄存器(addr = 0xFC)的数据并验证4)SELECT寄存器写入的数据为0x00000000,bank:0x05)CSW寄存器写入0x00000002,data_size:32bit注意:1、CTRL/STAT寄存器:CSYSPWRUPREQ:System powerup requestCDBGPWRUPREQ:Debug powerup request2、SELECT寄存器:APSEL=0X00表示AHB访问;APBANKSEL:选择当前AP的bank地址。3、读取IDR寄存器的数值时,需要两次,第一次是dummy read,第二次读取到的才是正确的数据。(第二次也可以读RDBUFF寄存器)4、CSW寄存器:Size:访问MEM-AP的数据类型的大小其中:寄存器的数据是32bit–0b010,编程写入Flash的数据是16bit–0b001。2.读/写操作如果想要写入/读出MCU内部Flash的数值,需要用到两个AP寄存器:TAR(The Transfer Address Register)和DRW(The Data Read/Write Register)。1、写操作1)在TAR_W寄存器中写入要访问的内存地址数值 (addr = 0x08000000)2)在DRW_W寄存器中写入要往内存中写入的数据 (data = 0x12345678)2、读操作1)在TAR_W寄存器中写入要访问的内存地址数值 (addr = 0x08000000)2)从DRW_R寄存器中读取要访问的内存中存放的数据3)从RDBUFF寄存器(DP)中读取数据/从DRW_R寄存器(AP)中读取数据注意:由于读取AP寄存器的特殊性,当读取AP寄存器时,返回的数据是上一次传输的值。也就是说,有两种方式可以得到正确的 AP 寄存器的值。发送两次读DRW寄存器的操作发送一次读DRW寄存器的操作(读取上一周期的数据),再发送一次读RDBUFF寄存器的操作(读取自己需要的数据)总的来说,读写DP寄存器没有迟滞,不需要读写两次。读取AP寄存器,有迟滞,第一次读AP,是上一周期的值,第二次读AP才是想要的值。写AP寄存器,没有迟滞。如TAR,DRW只需要写一次即可写进去。有道云笔记2022-08-05 15:08:26
2025年07月17日
3 阅读
0 评论
0 点赞
2025-07-17
减少windows 系统CPU占用,减小风扇噪声
1、禁用 Windows 10/11 开始菜单网络搜索微软从 Windows 10 开始,在开始菜单里集成了 Bing 网络搜索,当输入的搜索词在本地无结果,就会调用 Bing 进行网络搜索。如果我们输入的是敏感信息,就很容易导致隐私泄露。 解决办法就是禁用网络搜索!禁用方法:修改注册表方法适用于 所有版本 Windows 10/11 。第一步使用组合键 Win + R 打开 “运行” 窗口,输入 regedit,确定,打开注册表。第二步找到目录 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows,右键 Windows -> “新建” -> “项”,创建名称为 Explorer 的项。第三步右键刚刚创建的 Explorer 项,选择 “新建” -> “DWORD(32位)值”,创建名称为 DisableSearchBoxSuggestions 的值。第四步右键刚刚创建的 DisableSearchBoxSuggestions,选择 “修改”,将 “数值数据” 改为 1,确定。重启系统重启系统后,修改就会生效。恢复方法如果你想重新启用开始菜单的网络搜索功能,只需要打开注册表,把我们刚刚创建的 Explorer 目录删除,重启系统即可。Microsoft Windows Search 搜索器 占用CPU解决办法当我正在愉快的使用电脑时,突然小风扇呜呜的转了起来,这声让人很是抓狂!!! 我想您肯定也有这样的感受。打开任务管理器一看,某进程占用了大量的CPU资源,导致电脑性能下降,并疯狂消耗电力并释放热量,小风扇不抓狂旋转才怪。除了病毒之外,微软Microsoft Windows Search 搜索器这一进程疯狂占用CPU是比较常见一个,在此结合自己经验给出一些亲测有效的解决方法。搜索器使CPU狂飙的主要原因:在建立索引所包含的位置拷贝了大量文件,导致Microsoft Windows Search 搜索器开始疯狂工作为这些新文件建立索引。解决办法:打开 控制面板,找到 索引选项,点击 修改(M),将不需要建立索引的位置勾选掉即可。禁用一些windows 服务禁用 Windows 10 更新把diagnostic开头的都停止+禁用 //诊断策略,对普通用户来说除了浪费资源并没有什么卵用按需要把windows update,windows备份之类的都关了禁用windows search删除常驻进程软件删除360,安全软件就是系统自带windows defender设置wsa 为需要时启动,wsa 已经不再微软支持,可以使用腾讯应用宝支持apk程序,或者可以在桌面建立apk 启动快捷方式的虚拟机,比如blue stack等等
2025年07月17日
0 阅读
0 评论
0 点赞
2025-07-16
docker 安装 iredmail 邮件系统 (2023.01.01)
docker 安装 iredmail 邮件系统Docker拉动命令// 稳定版本docker pull iredmail/mariadb:stable快速开始创建用于存储自定义设置的docker环境变量文件mkdir iredmailcd iredmailtouch iredmail-docker.confecho HOSTNAME=iredmail.com >> iredmail-docker.conf// 邮件系统后缀域名echo FIRST_MAIL_DOMAIN=iredmail.com >> iredmail-docker.conf// 邮件系统登录密码echo FIRST_MAIL_DOMAIN_ADMIN_PASSWORD=123456 >> iredmail-docker.conf// mysql密码echo MYSQL_ROOT_PASSWORD=root >> iredmail-docker.conf// echo MLMMJADMIN_API_TOKEN=$(openssl rand -base64 32) >> iredmail-docker.conf// echo ROUNDCUBE_DES_KEY=$(openssl rand -base64 24) >> iredmail-docker.conf创建存储应用程序数据所需的目录cd iredmail// data目录存储iredmail服务所有挂载数据// data/nginx 存储nginx配置文件// data/www 存储项目文件mkdir -p data/{nginx,www}运行容器docker run \ --name iredmail \ --env-file iredmail-docker.conf \ -p 80:80 \ -p 443:443 \ -p 110:110 \ -p 995:995 \ -p 143:143 \ -p 993:993 \ -p 25:25 \ -p 465:465 \ -p 587:587 \ -p 3306:3306 \ -v /Users/anqiangdong/Workspace/Php/iredmail/data/www:/home/www \ -v /Users/anqiangdong/Workspace/Php/iredmail/data/nginx:/etc/nginx/sites-enabled \ -d \ iredmail/mariadb:stable 友情提示:查看tcp端口是否占用netstat -an | grep "25"结尾概述(需要涉及挂载项目到宿主机才用到)安装成功后,进入容器内部,需要操作以下几步骤第一种方法// 将 /opt/www/roundcubemail-1.4.11 拷贝到 /home/wwwcp -r /opt/www/roundcubemail-1.4.11 /home/wwwmv /home/www/roundcubemail-1.4.11 /home/www/roundcubemail// grep -r "roundcube" /etc/nginx// 修改nginx配置文件 roundcube-homepage.tmpl和roundcube.tmpl// 将所有路径/opt/www/roundcubemail替换为/home/www/roundcubemail,并重启容器服务第二种方法直接修改 /opt/www/roundcubemail 之前挂载的旧路径为 /home/www/roundcubemail-1.4.11ln -snf /home/www/roundcubemail-1.4.11 roundcubemail最后通过浏览器访问:localhost ,嗯,灰常nice😏有道云笔记2023.01.01
2025年07月16日
1 阅读
0 评论
0 点赞
2025-07-16
傅里叶变换与拉普拉斯变换 (2024.03.20)
本文中我越过基本概念,直接说理解。傅里叶变换通常关注的是不随时间衰减的信号,或者系统在特定频率下的响应。而拉普拉斯信号更多关注实际有阻尼的系统中,系统响应的长期变化。两者有紧密的联系。时域,频域(傅里叶形式)与复频域(拉普拉斯形式)表达式是对同一组信号的不同表述。再往大说一点,傅里叶变换,拉普拉斯变换,甚至包括不知道有没有机会讲的小波变换,都在做一件事,将信号在已知的基空间做投影,唯一的区别是基的选取不同。傅里叶变换的基为三角函数,为什么要选三角函数作为傅里叶变换的基,因为三角函数的一大特点是,经过线性时不变系统的操作(加减,倍乘,倍除,积分,求导)后,不改变波形,仅改变相角和幅值。这就给我们提供了一个巨大的好处,那就是在分析线性时不变系统时,仅通过信号的相角和幅值指标就能还原信号,可以忽略基函数波形本身。傅里叶反变换傅里叶反变换过程是通过一系列三角函数叠加生成时域上的任意周期函数。假设原函数 是一系列余弦函数的叠加:(1)将上述定义推广至连续的情况:(2)是角频率的实函数,也就是频谱。对傅里叶变换的初级理解可以止步与此。但是上式中完全没有体现相角的变量,也就是说,目前我们没有办法调整每个频率下的余弦函数的超前或滞后角度。为了同时控制每个角频率下幅值与相角的变化,即将(2)中只能表示长度的实函数 换成能同时表示长度与方向的虚函数 。即表示 角频率下的余弦函数基不但幅值变化为 倍,相角也要移动 度,幅值增益 和相角 都是角频率 的函数。由于 的系数已经从实数 变成了复数 ,为了使余弦函数与复数的乘积有意义,我们必须将余弦函数 替换成对应的极坐标形式 。(2)变为:(3)接下来证明(3)的正确性。根据欧拉公式:(3)化为:这里先不加证明的给出一个结论, 是频域上的偶函数, 是频域上的奇函数。注意函数相乘的奇偶性规律:奇偶为奇,奇奇为偶,偶偶为偶。因此上式中的虚数部分都是奇函数,在全频域的积分为零。根据三角函数公式:可见,我们实现了可以单独控制每个角频率下余弦函数的幅值与相角的功能。傅里叶变换理解了上面的傅里叶反变换过程,再倒推傅里叶正变换就变得非常简单了。(4)所代表的傅里叶反变换的过程可以这样理解,我们想知道 ,对于每个角频率 ,时域函数 中包含了“几个”傅里叶变换的基函数 ,这里的“几个”不光是有数值的含义( 的幅值),也有相角的含义( 的角度)。因此,“几个”在这里是个复数,即 。这个“几个”不是瞬时值,而是在全时域内的稳定结果。当原函数 与傅里叶基函数 的频率 不重合时, 在 的值为零,举例如下:当原函数(绿色)为 ,而傅里叶基函数(红色)为 时,两者的乘积在全时域的累积是0。当原函数(绿色)为 ,而傅里叶基函数为 时。当且仅当 时,存在不为零的 。当 时,同理,当 时, 。注意冲击函数 的如下性质:因此, 。验证上述傅里叶变换结果:注意冲击函数的面积为1:因此,拉普拉斯变换理解了傅里叶变换,拉普拉斯变换的意义就变得容易理解了。傅里叶变换中的基函数是 ,能用它拟合的函数具有共同特征,那就是,各个频率下的三角函数分量不随时间衰减。这个假设具有明显的局限性,要么是理想没有阻尼的系统,要么是研究有阻尼的系统对特定频率的瞬时响应(bode图)。因此,我们需要对傅里叶变换的基函数进行拓展:称为拉普帕斯算子。这样,我们就有了幅值(能量的开方)可以随时间按照指数规律变化的基函数, 的正负决定基函数究竟是不断增大还是逐渐收敛。因此,拉普拉斯变换的定义域( )是一个二维平面,叫做s域(s plane),每个自变量 包括实轴 和虚轴 两个维度。可见,傅里叶变换是拉普拉斯变换在 这条线上的“切片”。拉普拉斯变换后的结果和傅里叶变化一样,是一个复函数,唯一不同的是,傅里叶变化结果的复函数的模值是时不变的,而拉普拉斯变化结果的复函数的模值是对应傅里叶变化的复函数的模值乘以 即随时间变换。
2025年07月16日
0 阅读
0 评论
0 点赞
2025-07-15
选择 podman 的理由, 以及它和 Kubernetes , Docker 的区别
podman 是什么官方网站: podman.io官方自己的介绍: https://podman.io/whatis.html名称 podman ,官方说明是 Pod Manager , 所以它不仅可以管理 OCI 容器,还可以管理 pod , 这也是和 docker 的最大差别吧.和 kubernetes 的区别kubernetes(k8s) 是目前最流行的容器编排工具, 集群管理工具, 生态很完善, 也很"重", pod 的概念就来自 k8s , 虽然 podman 也是管理 pod, 但是远远不及 k8s 的编排功能, 同时 podman 也没有集群管理功能,如果需要管理集群, 需要第三方工具完成.所以 podman 定位也不是编排和集群管理工具, 紧紧是一个 pod 和容器的管理工具. 所以不是一个级别的东西, 这里不做太多的比较.和 docker 的区别如果仅仅从 docker 和 podman 两个命令提供的功能来讲,它们功能交集很大, podman 官方甚至推荐 alias docker=podman 来过渡.docker 文档更齐全, podman 可以借用一下 docker 的文档docker 生态更加完善, podman 一时半会赶不上,但是如果你只是去跑容器, 那这是一样的docker 有 docker-compose, podman 早期没有对应工具,后面也出了 podman-compose, 但是这个功能是否必须? 值得考虑,因为 podman 支持 pod 管理.docker 有 machine , 让 windows 和 mac 支持 linux 容器, podman 也支持,而且已经比较完善.docker 有 docker-desktop , podman-desktop 目前还比较简单.docker 支持 rest api , podman 也支持 rest api, 这使得开发生态工具会比较简单.docker 有 swarm 支持集群部署, podman 没有对应工具, 不过支持 remote , 调用远程机器上的 podman service 执行对应的功能 , 这样能满足很多轻量化的场景.k8s 之前支持使用 docker-shim 和 docker 集成, 不过新版本也放弃这一层, 直接通过 CRI 调用 contained , podman 也不支持 CRI. 并且也没有什么计划.docker 商业/开源并行, podman 只有开源版本, 目前没有哪家公司提供商业支持(不清楚 redhat 有没有对应的服务,可能集成在订阅里面了).为什么选 podman上面讲了不少 docker 比 podman 有优势的方面, 这里开始讲 podman 的另外的东西, 这也是我选择 podman 主要原因.先罗列一下 podman 适合的场景没有很强的集群管理需求(或者说,已经有 overlay network 方案, podman 也是适用的)仅仅为了容器化一些应用团队内部轻量级使用,比如 ci/cd , 开发,测试环境等.喜欢命令行或者脚本运维感兴趣 podman 的生态建设(坑)那么 podman 比 docker 好的方面有哪些呢?更加 rootless , 尽管 docker 也可以 rootless, 但是 podman 设计之初就开始支持没有 daemon , 这使得 podman 在结合 namespace 和 cgroup 一起使用会更加灵活pod , 和 k8s 基本一样的 pod , 一样支持 infra 容器. 这使得一些简单的容器编排 工作, podman 也可以简单实现.systemd service 集成, 由于没有 deamon , podman 通过 generate 子命令, 可以生成 systemd service 配置, 来管理容器和 pod 的作为服务启动.k8s 关联, podman 可以生成 kubectl 的 yaml 配置文件, 也通过 podman play kube 来运行 k8s 的配置, 也可以作为 k8s 的一个过渡吧, 而且 podman 也没有去实现 CRI 的计划, 这应该也是官方的态度, 不会参和到 k8s 生态中, 保持自己的轻量化工具的定位吧.remote , podman 通过 ssh 隧道或者 tcp 端口, 可以连接到远程机器上的 podman service, 从而实现远程机器上的容器和 pod 管理.所以 podman 提供了一些轻量化而又灵活的功能特性,满足容器化,以及小批量服务器的场景.https://zhuanlan.zhihu.com/p/506265757
2025年07月15日
0 阅读
0 评论
0 点赞
1
...
23
24
25
...
76