从零开始学RISC:第七篇
访存 MEM级 设计
访存访存,顾名思义,就是要去访问内存。这个内存是“数据内存”,因为我们写的CPU采用的是哈佛架构,指令内存和数据内存分离。
数据内存 DRAM.sv
首先登场的是数据内存。非常简单,实例化一堆RDFF即可。为什么是RDFF?为了便于测验交作业,我们暂时把DRAM写成 “同步写、异步读” 的。
几乎所有厂商都不支持“同步写、异步读”的DRAM,综合器也无法将其综合为DRAM。对于Xilinx的IP核,其BRAM是同步读写的,有的甚至需要两拍。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950`timescale 1ns / 1ps// DRAM 行为模型 - 用于仿真// 替代 Xilinx IP 核// [HACK] Vivado无法综合异步读的RAMmodule DRAM ( input logic clk, // 时钟 input logic [15:0] a, // 地址输入 (16位 ...
从零开始学RISC:第六篇
执行 EX级 设计
EX级以负责核心运算功能的ALU著称。可以说,它是CPU的灵魂。来一人一句ALU牛逼来。
算数逻辑单元 ALU.sv
ALU需要完成一系列R-Type、I-Type指令的运算。对于L-Type和S-Type,它们的处理逻辑其实差不多,都是相加——这样才能让ALU输出基地址和偏移量之和,算出目标地址。
同样地,使用字符串打印的方式来增强可读性,优化Debug体验,并更好的看到指令在流水线中的流动。同样使用DEBUG宏进行包装,在给综合器生成最终电路前取消宏定义即可。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283`include "include/defines.svh"module ALU ( // 操作码 input logic [ 4:0] alu_op, / ...
从零开始学RISC:第五篇
译码 ID级 设计
提到译码级,那就得是译码器啊。纯组合逻辑,包你写到爽。
译码级还有什么?立即数移位也需要放在ID级,以减轻EX级的压力。
指令译码器 Decoder.sv
指令译码器为组合逻辑模块。我们需要哪些信号?
首先要把31位的指令分类:是RIBJSU的哪一种?之后,要根据分类,将寄存器地址拆分出来,准备送进同一级的寄存器堆来读取数据;要提取指令的funct3和funct7,以便在EX级告诉ALU“长的像的指令如何区分”;要根据指令类型,区分跳转类型和读取/写入类型,给后面的流水级进行处理;还要生成对应位的寄存器读信号,和分支指令判断信号,为后面处理数据冒险准备……要干的事情真不少。
一步一步全写上即可。推荐使用宏定义,大幅度提升可读性。
在模块内使用``ifdef DEBUG`配合上ASCII字符进行Debug是另一个小技巧。在综合时取消宏定义即可。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 ...
从零开始学RISC:第四篇
从零构建前的准备
设计思路
理论知识已经准备好了,接下来该开始实践了。
如何从零开始写一个CPU?
首先要明确ISA架构:我们需要支持哪些指令?RV32的拓展很多很多,比如MIAFD等等。我们可以实现一个“精简版”的RV32I指令集CPU——连里面的ecall和ebreak都不实现。只要满足基础的38条(甚至只支持lw/sw,不考虑非对齐访存),就能运行80%的C语言程序。至于Zicsr扩展和M扩展等,在构建完毕后再考虑。
然后,是微架构设计:是做单周期还是多周期,亦或者流水线?是做顺序还是乱序?单发射还是多发射?饭要一口口吃,步子迈太大了容易扯着蛋。因此,做一个经典的五级流水线、顺序单发射的CPU即可。
然后,保持一个清醒的头脑。即使是一个最简单的RV32ICPU,也需要不下于10个模块。所有的代码加起来可能连3000行都不到,但是其中的连线无比复杂。如果不在写之前就想好,很容易莫名其妙地丢掉一条连线、一个端口,然后看波形debug半天。
时刻要记住:切不可“只见树木、不见森林”——不建议一个一个模块写,而是创建好文件后问自己:
这个模块的功能是什么?
这个模块是组合逻辑电路还是时 ...
Cloudflare、睡覺——大规模宕机后的随想
写于2025.11.18,纪念 Cloudflare 发生的大规模故障。
更适合Powershell体质的ln
前言
在更适合Powershell体质的grep中重定义了grep。Linux中的ln命令也非常好用,创建软链接,可以省下很多需要复用的文件空间。
没想到Powershell中没办法使用cmd的mklink,自带的创建软连接命令比我命还长。自己写一个脚本重定向!
代码
因为不能执行cmd命令,只能使用Powershell函数,因此新建一个ln.psm1模块,并保存到C:\Users\UserName\Documents\PowerShell\Modules\ln,在Powershell初始化时导入即可。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657function ln { param( [switch]$d, # -d: 强制目录链接 [switch]$h, # -h: 显示帮助 [string]$target, [string] ...
降低腾讯ACE反作弊扫盘优先级并提升游戏性能
前言
打大乱斗动不动就卡,太烦了。这B反作弊跟小蓝熊坐一桌去。
注册表修改
参考:解决英雄联盟LOL卡顿掉帧问题很多方法都没用的试下这个 - 哔哩哔哩
新建一个注册表文件1.reg:
123456789101112131415161718192021Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\DeltaForceClient-Win64-Shipping.exe\PerfOptions]"CpuPriorityClass"=dword:00000003"IoPriority"=dword:00000003[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\League of Legends.exe\P ...
学银在线解除粘贴限制
防君子、不防小人也。
GTKWave修改字体大小
前言
目前看波形依旧没有什么现代化的软件,还是得用GTKWave。这玩意本来是给Linux用的,Windows上的界面看起来很奇怪。而且字体太小了,眼睛受不了。如何修改字体和字体大小呢?
配置文件与启动参数
参考官方文档:GTKWave 3.3 Wave Analyzer User's Guide
编辑用户文件夹下的.gtkwaverc文件(不存在就新建一个):
1234567use_big_fonts 8 //字体字号highlight_wavewindow 1 //高亮被选择的信号波形// color_grid feeeed // 高亮信号颜色fill_waveform 1 //高值填充disable_mouseover 0 //鼠标可查看波形hier_max_level 5 //显示信号归属层级的最大值left_justify_sigs 1 //信号左对齐
之后用参数启动:
gtkwave -r path/to/config/.gtkwaverc your_vcdfile即可。
其实也可以修改字体:
fontname_si ...
超大规模集成电路设计笔记:第六篇
应付一下应试。
缩写
PLA: Programmable Logic Array
PAL: Programmable Array Logic
PLD: Programmable Logic Device
ROM: Read-Only Memory
RAM: Random Access Memory
ALU: Arithmetic Logic Unit
IEEE: Institute of Electrical and Electronics Engineers
VHDL: VHSIC Hardware Description Language
CMOS: Complementary Metal Oxide Semiconductor
FPGA: Field-Programmable Gate Array
RISC: Reduced Instruction Set Computer
CISC: Complex Instruction Set Computer
DSA: Domain Specific Architecture
SoC: System on Chip
FP: Float ...


![[忆语游心] 生化危机4-重制版](https://webpn.esing.dev/img/re4_0_260502_1947_8tvn.jpg)

