riscv扩展指令集
看了WAIC,感觉这个真有意思 Gemini 扩展 硬件 Gemmini的空间阵列用于执行MAC操作,空间阵列由Scratchpad SRAM读取数据,并将输出结果写入Accumulator SRAM;同时还支持其他常见的DNN计算核(如非线性激活、池化等)。 脉动阵列(Systolic Array):执行矩阵乘法 显式管理的内存:Scratchpad(输入缓存) + Accumulator(累加器) DMA引擎:主存与私有SRAM间的数据传输 解耦访问/执行:Load/Store/Execute三控制器并行工作 Gemmini的空间阵列由Tile、PE两级架构组成,Tile通过显式流水线寄存器相连接;而Tile可进一步细分为PE,同一Tile中的PE通过组合电路连接,而不使用流水线寄存器。每个PE每个周期执行一次MAC运算,使用WS或OS的数据流形式。每个PE和每个Tile只与其相邻的单元共享输入和输出。 ISA 数据移动指令 mvin - 从主内存加载数据到暂存器 格式:mvin rs1,...
Linux板制作
芯片选型 F1C200S,全志H3,全志V3s,rk3566,让AI总结的性能对比 参数 F1C200S H3 V3S RK3566 CPU ARM9 单核@600MHz A7 四核@1.2GHz A7 单核@1.2GHz A55 四核@1.8GHz GPU 无 Mali-400MP2 无 Mali-G52 MP2 内存 64MB DDR1 外置DDR3(2GB) 64MB DDR2 外置LPDDR4(8GB) 视频解码 1080p H.264 4K H.265 1080p H.264 4K H.265/VP9 显示输出 720p RGB 1080p HDMI 720p RGB 4K HDMI 全志H3,rk3566都需要植球,不会也没设备,全志V3s应该是现有最好的选择了 画PCB 晶振电路,2个15PF的寄生电容,存储和锁相环电压 32.768kHz低速晶振接口 参考资料与开源项目 全志H6开发板-从零入门ARM高速电路设计 - 立创开源硬件平台 GitHub - Commander-bao/BlueberryPi:...
BOOM源码与《超标量处理器设计》学习
BOOM 寄存器重命名 RenameStage - 重命名阶段顶层模块 RenameMapTable - 寄存器映射表 RenameFreeList - 空闲物理寄存器列表 RenameBusyTable - 寄存器忙状态表 RenameStage 整体两阶段流水线: 阶段1(Ren1):接收来自解码阶段的微操作(uop) 阶段2(Ren2):完成重命名并发送到调度队列 通过MapTable完成逻辑寄存器到物理寄存器的映射 通过FreeList分配新的物理寄存器 通过BusyTable跟踪寄存器忙状态 处理分支预测错误时的恢复 AbstractRenameStage——寄存器重命名的基础抽象类 micro微操作集定义在micro-op.scala 包含了指令基本信息,逻辑寄存器编号,物理寄存器编号(重命名阶段分配),寄存器忙状态(BusyTable 提供),分支预测相关,执行信息 1....
Arch的ssh连接,远程桌面,vivado安装
内容均参考官方wiki ssh连接 (1) 安装 openssh 1sudo pacman -S openssh (2) 启动 SSH 服务 1sudo systemctl enable --now sshd 现在我使用winscp,复制文件很方便 远程桌面 局域网内连接 xrdp试了很多次,一直黑屏 目前更换成了tigervnc,配置参考wiki,但还是会黑屏,因此使用共享物理桌面 1x0vncserver -display :0 -passwordfile ~/.vnc/passwd 用tigervnc应用连接 ip::5900(:0是偏移,即端口为5900+0) 跨局域网连接 首先获得路由器网络公网ip 1curl ifconfig.me 注意公网ip会2-3天一换 在浏览器输入路由器管理网址,配置端口转发 如我的端口是5900,我设置外端口为25900,内端口为5900,ip就是局域网ip 通过tigervnc应用连接公网ip::25900 连接的屏幕只有大概原本屏幕的2/3,需要拖拽 目前能用就行,后续会继续探索更高效的方法 Vivado...
Typora与hexo完美适配
终于实现了Typora与hexo的完美适配,直接复制图片到typora即可自动保存本地,也不需要额外的删改即可完成插入图片 渲染器上依然可以使用markdown-it-plus,正常渲染公式,而不必使用大部分采取方案的的markdown-it导致渲染器的冲突 Typora端效果 有空补一下详细配置过程。 嘿嘿,确实开心
适配AXI的地址对齐
AXI4引入的arsize/awsize 完整的AXI总线协议通过arsize/awsize信号来指示实际访问的数据位宽, 同时引入"窄传输"的概念, 用于指示"实际数据位宽小于总线数据位宽"的情况. 这两个"数据位宽"的概念并非完全一致, 具体地, 总线数据位宽是在硬件设计时静态决定的, 它表示一次总线传输的最大数据位宽, 也用于计算总线的理论带宽; 而实际数据位宽(即arsize/awsize信号的值)则由软件访存指令中的位宽信息动态决定, 它表示一次总线传输的实际数据位宽, 例如, lb指令只访问1字节, 而lw指令则访问4字节。 也就是AXI总线会根据我们设置的arsize/awsize来映射对齐地址,设置为0时,会对齐1b,设置为1时,会对齐2b,设置为4时,会对齐4b。 strb选通信号与data S指令有效数据与地址的对齐 wstrb与地址相适配,也要将有效数据移至有效字节,以sb指令为例 123456789101112is(EXE_SB_OP) { mem_addr :=...
ld链接与简易bootloader(添加全局变量支持)
堆区 在启动文件里分配,作为用户主动申请时的空间,如调用malloc() 栈区 在启动文件里分配,作为局部变量自动申请和释放空间的变量(也有说是编译器分配的空间) bss 存放未初始化的全局变量和静态变量; data 存放初始化后的全局变量和静态变量; 已初始化的全局变量(data)嵌入程序,不可能直接存在RAM中,必须先载入ROM,再通过memcpy载入RAM中(这也是数电H中我没能想到的,不过那时也没实现标准库也不太可能搞这种骚操作),bss由于是未初始化的,直接链接到RAM就行。 12345678910111213141516 _sidata = LOADADDR(.data); .data : { _sdata = .; *(.data*) *(.sdata*) _edata = .; } > sram AT >mrom :data.bss : { _bstart = .; *(.bss*) *(.sbss*) *(.scommon) _bend = .; }...
半导体物理随记
常用符号含义 发现自己总是记不住符号,都到了看不懂公式的地步了,随记一下 ND 施主掺杂浓度 NC 导带有效态密度 半导体导带中可供电子占据的量子态数量 NV 价带有效态密度 NDC 临界浓度(EF = EC) nD+ 电离施主浓度 n0 导带电子浓度 EC 导带底能级 ED 施主能级 EA 受主能级 Δ\DeltaΔED = Ec-ED 杂质电离能 EC──────────────── 导带底 │ │ ΔED ED ───┘ 施主能级 EF──────────────── 费米能级(随掺杂变化) EV ──────────────── 价带顶
apriltag优化方案
形策要做这方面的汇报,记录一下 自适应阈值 查了一下,python apriltag库似乎内部识别没有封装自适应阈值,而自适应阈值能减弱光照的影响,这不就有的说了嘛(主打一个没创新硬找) apriltag使用的是直方图阈值法 使用opencv的自适应阈值 1234567891011121314def adaptive_threshold_preprocess(image): gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用自适应阈值(高斯加权) adaptive = cv2.adaptiveThreshold( gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2 ) return adaptivepreprocessed = adaptive_threshold_preprocess(image)detector =...