CoreCat:画模块电路的好帮手
Drag modules, edit ports, connect wires, and fxxk Visio.
四款开源软件,打造最强墨水屏阅读器
开源什么的最棒了!
为学习而生の魔法传送门
若要足时今足矣、以为未足何时足。
从零开始学RISC:第十七篇
提交与写回
什么是提交、什么是写回?在五级流水线的顺序单发射CPU中,似乎“提交”就是在“写回”级进行的。但实际上,这并不是一回事。
说文解字
写回(writeback, WB):结果已经算出来了,准备写回某个存储体,最常见是写回寄存器堆。
提交(commit / retire):这条指令被体系结构正式承认“已经执行完成”,它的效果从这一刻起对软件可见,且不会再因为乱序、异常预测错误等原因被撤销。
说白了,写回是“结果产生并回填”;提交是“结果正式生效”。
遵守顺序
对于顺序执行的CPU,写回就是ALU / Load / CSR 指令的结果,它们会写到通用寄存器堆xN里面。此时因为流水线是顺序执行、顺序完成,写回和提交几乎可以看成同时发生。
但对于乱序CPU,或者是多发射的呢?写回通常不是直接写“架构寄存器”,而是写到ROB[1]或PRF[2]。在这种情况下,写回表示“计算结果已经准备好”,但这条指令还不一定已经提交。
对于提交,重点不在“提”而在“交”,也就是说,结果交上去之后,一切就尘埃落定。
提交表示这条指令已经满足以下条件:
它之前的所有更老指令都已经处理完毕
它自己已经 ...
Zicfilp与Zicfiss:面向未来的安全防护
Control-flow Integrity 控制流完整性
什么是控制流完整性?
一个程序能跑起来,说明其结构没有明显问题——宏观上看是这样,但要深入到程序的二进制码级呢?可能会有看起来没问题但实际上有隐患的地方,如栈溢出等。此外,即使一个程序写的很完美,没有任何漏洞,不法分子依旧有办法用它来进行一些攻击——如ROP和JOP。
ROP、JOP与COP
在讲这几种攻击之前,先说说什么是“代码重用攻击”。顾名思义,其核心思路不是往内存里再塞一段新代码,而是把程序里本来就存在的指令片段拼接起来,形成攻击者想要的控制流。换句话说,就是“以彼之道、还彼之身”。
ROP,Return-Oriented Programming,面向返回编程。喜欢玩卡西欧系列计算器的应该不陌生,那些在计算器上显示出特定字符、甚至用来玩游戏的方法,都是ROP。它把很多以 ret 结尾的小片段(通常叫 gadget)串起来执行;因为 ret 会从栈上取下一个返回地址,所以一旦攻击者能改动返回地址,程序就可能被引到一串“并非程序员原本打算这样连起来”的代码片段上。
JOP,Jump-Oriented Programming ...
文献导读:从 MATLAB 到 FPGA:A2H-MAS 如何用多智能体重塑 HLS 自动化流程
前言
AI太火了,尤其是在代码方面——AI写代码几乎可以超越人类了。在硬件描述语言上,AI也做的非常好,不论是Verilog还是SystemVerilog,亦或是CHISEL与SpinalHDL[1]。但对于FPGA原型验证,人类的路线还是一如既往,难以让AI介入。算法模型要先在MATLAB上进行验证,随后在FPGA上进行高质量的HLS[2]实现。但从 MATLAB 走到 FPGA 上高质量的 HLS 实现,往往依赖大量人工经验、反复调试和漫长迭代。
现有的LLM设计呢?尽管能生成代码,但仍存在两个问题:其一,是只关注功能正确,忽略了硬件设计更在意的时延、吞吐和资源占用;其二,是单个大模型 agent 容易出现幻觉、上下文遗忘和行为不稳定,很难可靠处理真实世界里多阶段、长链路的硬件开发任务。
怎么让大模型做出最好的回答?针对上面的两个痛点,论文 A2H-MAS: An Algorithm-to-HLS Multi-Agent System for Automated and Reliable FPGA Implementation 给出了一种方案,不是单纯让大模型把 MATLAB 翻成 ...
从零开始学RISC:第十六篇
神秘 j8
反汇编的程序中,总能看到一堆神秘j 8,这是什么?
j 8实际上是个伪指令,会被翻译成jal x0,8,即不保存返回地址直接跳走。在判断比较后跳转中常会看见。
此外,这个j 8后面还跟了已知符号__BSS_END__来做相对标注,标识出0x8 = __BSS_END__ - 0x11bc。
历史遗留问题:CoreMark与ee_printf
我们想一下 之前 移植CoreMark后遇到的问题:在每次的crc更新后,必须插入一句ee_printf。这个问题我们还没有解决。
反汇编分析
这个问题可能出现在哪?我们回过头看一下原先出问题的C代码:
1234seedcrc = crc16(results[0].seed1, seedcrc);seedcrc = crc16(results[0].seed2, seedcrc);seedcrc = crc16(results[0].seed3, seedcrc);seedcrc = crc16(results[0].size, seedcrc);
注意到,这是函数的连续调用。连续调用很可能在寄存器返回值、紧邻的下一次调用参数装载或 ...
从零开始学RISC:第十五篇
三权分立:USM
我们在 从零开始学RISC:第十三篇 中支持了基础的机器模式M-Mode所需要的CSR寄存器。运行一些简单的程序大抵是够了,如裸机C程序或是汇编等。但在实际生产环境中,这根本不够。
我们考虑更复杂的情况。RISC-V规范规定,M 模式是唯一强制要求的模式,U 模式面向应用,而 S 模式面向操作系统。特权级就是用来给软件栈不同组件之间做保护的,为了后续能更方便地移植,我们这里就要考虑不同的特权级对不同指令进行分层,分出个三六九等。低等指令禁止访问高等资源,就是这种感觉。
放到实际系统里,就是:
U 模式跑用户进程;
S 模式跑内核;
M 模式留给最底层固件/安全监控/平台控制。
这样应用、内核、固件三层彼此分开,任何一层出问题,都不至于直接拿到“整机最高权限”。
实际上,RISC-V 规范本身就把只支持 M 的实现定位在简单嵌入式系统,支持M和U的算是更强调隔离的嵌入式系统,而同时支持M、U与S,才算是面向类 Unix 系统的典型组合。
defines.svh 修改
首先加一些需要用到的宏:
123456789101112131415161718192021222 ...
全栈 Cloudflare 部署的小型在线语音房
前言
最近玩杀戮尖塔2玩的上头疯了,身边人全在玩,每次打开Steam都看到一堆正在联机爬塔的。
然后好友有的用KOOK有的用小黑盒有的用微信电话……太乱了。所以自己整一个多人在线语音房:
AI
release
commit
license
Online Demo
特点
100% AI生成,不含任何人工代码
基于全栈Cloudflare服务,轻松白嫖部署
简易控制台管理
定期清理
高通与小米,造就了历史上最完美的一次『合作』。
现在是大越狱时代!






