- 博客(56)
- 资源 (1)
- 收藏
- 关注
原创 从零开始写riscv cpu十之最长路径时序优化(乘法代码优化)
两种写法在 7 系列 FPGA 上的综合结果是确定可推的——DSP48E1 的乘法位宽是 25×18,任何超过这个位宽的乘法都会被拆成"DSP 级联链 + 部分拼接逻辑",拆法由操作数位宽唯一决定。
2026-07-27 12:43:00
364
原创 vivado使用那些事之优化时序利用implemention实现策略
Report Options Strategy 决定"跑完后给你看什么报告";Options Strategy 决定"用什么样的算法把你的设计布进芯片里"。两者是。
2026-07-24 19:40:36
333
原创 从零开始设计riscv cpu九之降低LUT使用量语法技巧
复位分支的真正代价不是它自己生成的电路,而是它剥夺了综合器把表映射成 RAM 的权利。删掉它、用initial赋初值(FPGA 比特流配置时免费写入),选择权就回来了。
2026-07-24 14:44:50
772
原创 从零开始设计riscv cpu之八
于是每条分支会收敛到更适合它的预测器——规律性依赖全局历史的分支信 gshare,自身规律强的分支信 bimodal。两家预测相同时,选谁都对、选谁都错,这次结果不含任何"谁更好"的信息;——循环计数类分支(局部规律强)收敛到 bimodal,路径相关分支(受前面分支影响)收敛到 gshare,整个预测器对不同类型的程序都有良好的适应性。最高位就是预测结果,低位提供"抗抖动"能力——单次结果不会立刻翻转预测。同样的思想放到锦标赛上:选择器要"预测"的不是跳不跳,而是。看错,然后根据实际跳没跳更新。
2026-07-23 20:23:54
451
原创 从零开始设计riscv cpu记录之七
恰好为 0,被当成已训练的分支,跳转到一个完全错误的目标地址。——取指直接跳回地址 0。而复位向量就在低地址,等于。,查到未初始化的项都会"命中",然后拿到。:一个从未被训练过的分支,因为。为 0 的 PC 都会。
2026-07-23 15:46:15
331
原创 从零开始设计riscv cpu记录之六
是 IF 阶段的推测性下一 PC,表示 IF 想取下一条指令,但是只有前端允许推进时才能生效,所以。并不是把原跳转优先级降低,而是在 hold 与 PC+4 之间新增了一个预测层。是 EX 阶段已经确认的实际跳转结果,不是预测。是 EX 已确认预测错误后的真实恢复,完全等价于原来的。,所以真实跳转与 hold 通常不会同时有效。,仍必须高于 hold;
2026-07-20 14:57:40
427
原创 coremark移植坑之-nostartfiles -nostdlib参数
> 想象你买了一套毛坯房(裸机芯片),里面什么都没有——没有地板、没有水电、没有天然气。现在你想直接搬进去住(运行 CoreMark 程序)。就像拎包入住精装公寓,你什么都不用操心:如果直接按正常方式编译,链接器会尝试调用精装公寓的基础设施,结果当然是崩溃——因为毛坯房里没有这些管道接口。> 入口点错误> 默认启动文件 会尝试调用操作系统接口(如 Linux 的 ),但裸机没有操作系统,CPU 上电后直接跳到 函数地址,根本找不到这些入口。> 标准库函数悬空> 想往 输出,但裸机没有终端; 想向
2026-07-19 21:06:31
357
原创 CoreMark 移植
就是一座桥——桥这边是 CoreMark 那套与平台无关的纯 C 算法,桥那边是你手头的具体芯片(STM32、RISC-V等等)。是唯一的"定制件"。在不同的芯片上运行,改这一份就行。startup.s 上电搬运(.data 进 RAM,.bss 清零,栈就位)),它们各自为政,不知道自己的最终住址。就是靠这些符号才知道"搬多少、搬到哪、清零到哪"。,用汇编写的,因为这时候 C 的运行环境还没搭好。它像一位凌晨四点的物业管家,在住户(是这座桥的主体工程。编译器生成的是一堆零散的目标文件(
2026-07-14 15:43:21
220
原创 vivado使用那些事之综合策略
就像公司突然财大气粗,同样的活雇两个人干,LUT 和 FF 咔咔暴涨,但关键路径瞬间畅通——就是老板抠门,让一个人干三份活,LUT 是省了,但信号绕来绕去累到虚脱,时序直接摆烂。工具能做的,不过是在"面积-速度"这个跷跷板上,帮你把屁股挪到相对舒服的位置罢了。:专门针对进位链(Carry Chain)的优化策略,调整进位链的使用阈值。:先用默认策略跑通流程,建立基线,再根据资源或时序瓶颈切换其他策略。:执行激进的通用面积优化,尽可能减少 LUT、FF 等资源占用。:牺牲优化质量以换取最短综合时间。
2026-07-13 21:34:32
456
原创 从零开始设计riscv cpu记录之三
区别就在这里,万一0号寄存器中不是0,就出错了。所以,采用强制输出是正确的。两个读端口,读采用组合逻辑。一个写端口,写采用时序逻辑。两种写法的区别在于,而上面给出的代码是要。
2026-07-08 18:03:17
248
原创 RIDECORE学习记录之二
BHR(Branch History Register,分支历史寄存器)记录最近一段时间分支“跳/不跳”的历史。PHT(Pattern History Table,模式历史表)表中每个项是2-bit 饱和计数器,用来给出 Taken / Not Taken 预测。PC取当前分支指令地址中的一部分位,与 BHR 一起生成索引。存放分支源地址和目标地址,用来在预测跳转时给出预测目标地址。用一话总结:Gshare = BHR + PHT + PC异或索引 + BTB。
2026-06-30 14:52:08
536
原创 RIDECORE学习记录之一
0.项目根目录文件/目录说明README.md项目说明文档,包含工具链安装、使用方法等LICENSE开源许可证.gitignoreGit 忽略规则doc/项目文档目录src/源代码目录(FPGA 设计与测试)toolchain/辅助工具链目录doc/ — 文档目录文件说明英文版详细设计文档(建议优先阅读)日文版设计文档所支持的 RISC-V 指令子集说明仓库文件结构说明文档src/fpga/ — 核心 RTL 源代码该目录包含约 50 个 Verilog 文件,实现了完整的乱序超标量处理器。
2026-06-29 14:02:54
361
原创 tinyriscv学习记录之五
阅读代码,熟悉的感觉又出现了:反复咀嚼,难以下咽。和阅读div.v的代码时候一样,看代码找不到突破口的话,那么突破口就是不熟悉试商法的原理,我想在clint.v也是一样。如果清楚中断处理的过程,那么clint.v的代码也就能看明白。所以,还是先搞懂中断处理的流程,弄清需要中断需要做哪些事。这时不会走 mepc -> mstatus -> mcause 这一套进入中断流程, 而是进入:S_CSR_MSTATUS_MRET。在RISC-V 这种架构里,中断/异常处理和 CSR 寄存器分不开的。
2026-06-29 10:49:29
336
原创 从零开始设计riscv cpu记录之一
的职责是“译码 + 准备操作数”,不是“最终执行并写回结果”。的职责是“根据操作数和指令类型生成执行结果”。一旦开了这个口子,你的写回数据来源会开始分散,或直通某路结果”的规则,就能处理很多指令。也走统一通路,那么 EX 级只要做一次“结论:flush的优先级更高。所以应该执行flush。的职责就会慢慢变重。
2026-06-27 17:32:01
739
原创 tinyriscv学习记录之三
这两句在同一拍,在同一个时钟周期里,minuend 和 dividend_r 看到的都是“旧值”。除法模块,顾名思义,就是做除法运算的呗。概念很简单,接口也很明了,接收来自ex模块的除数、被除数等数据,算就是了,没啥难点。除法模块的代码反复咀嚼,难以下咽的感觉,对于刚入门verilog的我不太友好。但就是到了自己去动手实现写代码的时候,手高眼低,写不出来代码,虽然原理很简单。试商法是说,每次移入一位被除数的最高位,然后和除数作差,够就商1,不够商0。所以就有,除法运算会至少32周期,因为被除数是32位的。
2026-06-23 16:20:30
445
原创 tinyriscv学习记录之二
首先明确ex.v是组合逻辑,输出会随着输入改变而改变。ex.v的输入主要是id_ex.v,这是一个时序逻辑,会在时钟上升沿改变输出,也就是ex.v的输入。所以说,ex.v随着id_ex.v在时钟上升沿改变。ex.v不给div结果写入地址的前提是ex.v能自己在div计算期间(大约33个周期)保存写入寄存器地址,但是ex.v并不能保存计算结果地址。所以,在除法运算期间,id_ex.v会把传给ex.v的inst变为nop指令,所以,ex,v中存不住除法计算结果要写回的寄存器。
2026-06-20 13:05:55
237
原创 tinyriscv学习手记之一
if (!endendendmodulehold_en 并不是传统意义上的"保持当前值",而是"插入气泡"——当流水线某级需要暂停时,向后级传递一个预定义的默认值(通常是 NOP 或无效标记),而不是让上游的 din 继续往下传。
2026-06-19 22:20:58
284
原创 从零开始动手做Verilog实验--04--11阶FIR滤波器
1.FIR滤波器(Finite Impulse Response Filter)的中文名叫做有限长单位冲激响应滤波器2.它的作用就是对输入的数字信号进行“加工”,比如滤除不需要的噪音,或者提取特定频率的信号。3.看代码更简单。
2026-05-12 14:29:58
294
原创 从零开始动手做Verilog实验--03--自动售卖机
本文实现了一个自动售货机的Verilog HDL设计,接受0.5美元和1美元纸币,商品定价1.5美元。设计采用有限状态机控制,包含空闲、半美元、一美元等5种状态。代码实现了投币、找零和出货功能,并通过仿真验证了基本投币流程。仿真结果显示系统能正确响应0.5美元投币操作,状态转换符合预期。该设计为自动售货机提供了基础的数字电路实现方案。
2026-05-11 23:17:06
122
原创 从零开始动手做Verilog实验--02--模为60的BCD加法器
本文介绍了一个模为60的BCD加法器设计,该电路用于六十进制计数,计数范围为0-59。文章包含Verilog实现代码和测试仿真,重点分析了计数器的两个关键功能:59后归零跳变和加载数据功能。仿真结果显示,计数器在59后能正确归零并产生进位信号,同时成功实现了数据加载功能。该设计采用8位输出(高4位为十位,低4位为个位),通过时钟信号控制计数过程,具有复位、加载和进位功能,适用于需要六十进制计数的应用场景。
2026-05-11 18:03:53
440
原创 从零开始做Verilog实验--01--4位计数器
本文介绍了Verilog实验的第一天内容,目标是掌握FPGA开发。实验实现了一个4位计数器模块counter4.v,包含时钟(clk)、复位(rst)输入和计数器(cnt)输出。测试文件counter4_tb.v通过时钟翻转和复位信号控制进行仿真验证,仿真结果显示计数器在220ns时成功计数为1,延长仿真时间后计数增加。实验成功验证了计数器模块的基本功能,为后续FPGA开发奠定了基础。
2026-05-11 16:32:14
309
原创 图的表示方法
节点 A 有 3 个邻居,节点 B 有 100 个邻居 → 无法像图像那样用“3×3 卷积核”统一处理。图的节点顺序可以任意打乱,但图的语义不变 → 传统神经网络(依赖输入顺序)无法直接处理。图中的节点没有天然的 (x, y, z) 坐标(可视化布局 ≠ 真实位置)。因为深度学习模型无法直接处理“图”这种非欧几里得、不规则的结构数据,两个节点之间的“距离”是最短路径长度(跳数),而不是欧氏距离。在社交网络中,“朋友的朋友”可能比地理上更近的人更“相关”。你不能说“节点 A 在节点 B 的正东方向”。
2025-12-24 22:04:47
403
原创 图数据挖掘
从这些复杂的连接关系中提取有价值的信息,而不仅仅是分析孤立的数据点。也就是,图数据挖掘 = 从“关系”中挖“知识”。图数据挖掘也叫做图数据机器学习。
2025-12-24 21:49:09
526
原创 数据挖掘14
知识抽取就是把“杂乱的文字”变成“结构化的知识”,让机器不仅能“读”,还能“懂”。原始句子:“特斯拉CEO埃隆·马斯克于2022年收购了推特。知识抽取结果:埃隆·马斯克(人物)特斯拉(组织)推特(组织)2022年(时间)(埃隆·马斯克, 担任, 特斯拉CEO)(埃隆·马斯克, 收购, 推特)事件类型:企业收购买家:埃隆·马斯克被收购方:推特时间:2022年。
2025-12-20 10:57:20
360
原创 数据挖掘13
过多的无关或冗余特征会增加模型复杂度,使模型“记住”训练数据中的噪声,从而在新数据上泛化能力变差。举个例子:如果你要预测一个人是否会贷款违约,那么“信用记录”很重要,“头发颜色”就不重要。保留它们不仅无益,反而有害。比如“年龄”还是“年龄”,不会变成“标准化后的年龄”或“年龄平方”。所以特征子集选择会优先保留那些和任务目标相关的特征。例如:同时包含“年龄”和“出生年份”是冗余的。特征越少,模型训练所需的时间和内存就越少。特征越少,越容易理解模型是如何做出决策的。特征的原始意义保持不变,容易理解和解释。
2025-12-20 10:53:26
316
原创 数据挖掘12
首先,通过人工定义或学习类别的语义属性(如形状、颜色等),将类别映射到属性空间。然后,模型学习从输入数据到属性向量的映射。最后根据属性匹配来识别新类别。给定一张图片,如何提取区分其中目标类型的特征,即形成目标的表示。
2025-12-19 10:03:37
1019
原创 数据挖掘09
条件随机场(Conditional Random Field, CRF) 是一种用于建模序列标注或结构化预测问题的判别式概率图模型。
2025-12-18 15:15:35
151
原创 【炒股学习】集合竞价
9.15 - 9.20对于普通人来说没有意义。9:25 是集合竞价结束的时间,此时已经确定了当天的开盘价。9:25–9:30 的挂单不影响开盘价(因为开盘价在9:25就定好了)。这5分钟只是让你“提前排队”,等9:30一到,就能快人一步参与交易。
2025-12-18 13:30:46
616
原创 数据挖掘08
把未知量伸长或者缩短到参考模式的长度。然后使用动态规划方法把被比较的数据扭曲或者弯折,时期特征与模型特征对齐。比如:DTW**隐马尔可夫模型(Hidden Markov Model, HMM)**是一种经典的概率图模型,用于建模含有隐藏状态的时序随机过程。
2025-12-17 21:30:06
423
原创 数据挖掘07
按时间排列的观测数据的序列。在进行数据挖掘时,必须考虑数据间存在的时间关系。DTW(Dynamic Time Warping,动态时间规整) 是一种用于衡量两个时序序列相似度的算法,特别适用于长度不同、速度不一致或存在时间偏移的时间序列。
2025-12-16 19:01:32
607
原创 数据挖掘06
在模式识别中,不变性指的是:当输入数据发生某种变换(如平移、旋转、缩放、光照变化等)时,模型的输出(如分类结果)保持不变。例如:一张猫的图片向左移动几个像素,模型仍应识别为“猫” → 平移不变性池化(Pooling)是卷积神经网络(CNN)中一种重要的下采样(downsampling)操作。
2025-12-16 18:06:28
1384
表格拆分工具,按照表格中某列的值,拆分表格
2025-12-11
java Swing gui 信息管理系统
2020-10-31
中序线索二叉树报异常
2024-04-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅