简介本资源是华中科技大学计算机科学与技术专业《计算机组成原理》课程核心实验——CPU设计实验的完整报告文档面向高校计算机类本科生及数字系统设计初学者聚焦32位MIPS架构CPU的工程实现与深度理解。报告涵盖单周期与多周期两种CPU设计方案详细展开数据通路构建、硬布线/微程序双控制器设计、sort.hex冒泡排序测试验证、溢出异常处理及典型故障调试方法内容紧贴Logisim平台实操具备强教学参考性与复现指导价值。资源为1个2.8MB的DOCX文档结构清晰、图文并茂含目录、设计要求、方案图解含7张关键数据通路示意图、控制信号功能表、实验步骤分解及总结心得等完整模块。目前已有12149人学习下载是深入掌握CPU底层原理、提升数字电路综合设计能力的优质实践材料。1. 这不是一份普通实验报告它是Logisim里能跑通冒泡排序的32位MIPS CPU完整实现手稿你有没有试过在Logisim里搭完CPU一加载sort.hex就卡死、PC乱跳、寄存器值全0我搭单周期CPU时在第7次重连ALU的Equal信号线后发现Branch逻辑居然连错了MUX的使能端——不是指令译码错是PC多路选择器的sel引脚被焊反了。这份来自华中科技大学计算机科学与技术专业的《CPU设计实验》报告根本不是模板填空式文档而是一份带血泪调试痕迹、含13个状态微程序地址表、覆盖硬布线微程序双控制器、且最终实测通过sort.hex冒泡排序验证的实战工程手稿。它解决的不是“怎么画框图”而是“为什么beq跳转后PC没更新”“为什么lw读出的数据总差4字节”“为什么微程序控制器进不了LW2状态”这类真实翻车现场。适合正在啃《计算机组成原理》课设、用Logisim做CPU设计、被控制信号表折磨到凌晨两点的本科生也适合想快速复现一个可运行MIPS子集的教学演示者——它不讲抽象Moore型状态机理论只告诉你S3S2S1S00101对应SW1状态时MemWrite1且AluSrcB11必须同时成立否则sw $t0,4($s0)永远写不进内存。2. 单周期MIPS CPU从数据通路到硬布线控制器的闭环实现2.1 数据通路搭建8条指令如何共用一套硬件资源单周期CPU的核心矛盾在于所有指令必须在一个时钟周期内走完取指→译码→执行→访存→写回全流程这意味着不能像多周期那样分时复用ALU或存储器必须为每条指令路径预置独立通路并用MUX动态切换。本实验要求支持的8条指令add/slt/addi/lw/sw/beq/bne/syscall覆盖R型、I型、J型三大类其数据流向差异极大add和slt需从寄存器堆读rs、rt→ ALU计算 → 写回rdlw需从寄存器堆读rs→ 加立即数得地址 → 访数据存储器 → 写回rtsw需从寄存器堆读rs、rt→ 加立即数得地址 → 将rt值写入数据存储器beq/bne需比较rs与rt→ 根据结果修改PCLogisim中实现的关键组件连接逻辑如下以lw指令为例# lw $t0, 4($s0) 的关键信号流需在Logisim中手动连线 # 步骤1地址计算 Regfile[rs] → ALU_A_input # $s0值送ALU A端 SignExt16(imm) → ALU_B_input # 4扩展为32位送ALU B端 ALU_OP 0x5 # ALU执行加法输出地址 $s0 4 # 步骤2访存 ALU_output → DMEM_address # 地址送数据存储器 DMEM_read_enable 1 # 使能读操作 DMEM_data_out → MUX_to_Regfile # 读出数据经MUX送寄存器堆写入端 # 步骤3写回控制 RegDst 1 # 选择rd字段$t0作为写入寄存器编号 RegWrite 1 # 使能寄存器堆写入 MemToReg 1 # 选择DMEM_data_out而非ALU_output作为写入数据提示SignExt16组件必须使用Logisim内置的“16 Bit to 32 Bit Extender”勾选“Signed”选项。若误用无符号扩展addi $t0,$s0,-4会变成addi $t0,$s0,0xfffffffc导致地址计算错误——这是初学者最常踩的坑现象是lw总读错地址原因却是扩展器配置错误。整个数据通路最终整合为图1.7所示结构核心是7个关键MUXPC_Source_MUX选择PC4正常或分支目标地址beq/bneALU_B_Source_MUX选择rt寄存器值add/slt、立即数addi/lw/sw或PC4beq/bneRegister_Write_Data_MUX选择ALU输出add/slt/addi或内存读出数据lwALU_OP_Selector二选一选择加法0x5或比较0xb操作码RegDst_Selector选择rtlw/sw/addi或rdadd/slt作为写入寄存器编号MemWrite_Enable仅sw指令置1Halt_Signalsyscall指令触发直接禁用PC寄存器使能端这些MUX的控制信号全部来自后续设计的硬布线控制器数据通路本身不包含任何逻辑判断纯粹是信号搬运工。搭建时务必按报告图1.13逐线核对尤其注意PC地址处理Logisim中IMEM/DMEM地址端口为10位支持1KB存储而PC为32位字节地址必须用Splitter提取PC[11..2]即字地址接入存储器——漏掉这一步所有访存操作都会寻址越界。2.2 硬布线控制器设计从OP/Func字段到13个控制信号的逻辑推导硬布线控制器的本质是组合逻辑电路输入为指令的OP6位和Func6位字段输出为表1.2定义的13个控制信号MemToReg,MemWrite,Beq,Bne,AluOP,AluSrcB,RegWrite,RegDst,Halt等。设计分三步指令译码 → ALU控制 → 控制信号生成。指令译码逻辑首先根据表1.3和表1.4生成7个基础译码信号LW,SW,BEQ,BNE,ADDI直接比对OP字段如LW.OP 0x23R_TYPEOP 0x00且 (Func 0x20或Func 0x2a)注意SysCall.Func 0x0c需排除SysCallOP 0x00且Func 0x0cLogisim中实现时用Tunnel将OP和Func总线引出接6个Constant比较器OP 0x23等再用And门组合R_TYPE。关键细节R_TYPE必须显式排除SysCall即R_TYPE (OP0) ((Func0x20)|(Func0x2a)) ~(SysCall)否则syscall会错误触发寄存器写回。ALU控制逻辑ALU仅需两种操作加法0x5和有符号比较0xb。控制信号AluOP由SLT信号决定# ALU_OP生成逻辑图1.9 SLT_signal → MUX_2to1_sel # 选择端 0x5 → MUX_2to1_input0 # 加法操作码 0xb → MUX_2to1_input1 # 比较操作码 MUX_output → ALU.OP # 送ALU功能选择端此处SLT_signal即R_TYPE (Func0x2a)必须确保SLT信号在R_TYPE为真且Func匹配时才有效否则add指令可能被误判为比较。控制信号生成表根据表1.2将译码信号逻辑或得到最终控制信号。例如RegWrite R_TYPE | ADDI | LWR型、addi、lw需写寄存器MemWrite SW仅sw写内存MemToReg LW仅lw将内存数据送寄存器AluSrcB LW | SW | ADDIlw/sw/addi需用立即数作ALU第二操作数Beq BEQ,Bne BNE直接映射注意Halt信号必须严格等于SysCall且需连接至PC寄存器的Enable端非Load端。若连错syscall无法停机CPU会继续取指执行无效地址导致仿真崩溃。2.3 单周期CPU避坑5个让sort.hex跑不通的真实故障点单周期CPU看似简单但因所有操作并行发生信号竞争和时序隐含问题极多。以下是我在复现该报告时踩过的5个典型坑每个都附带现象、根因和修复方案现象1sort.hex加载后PC始终停在0x00000000无任何寄存器变化原因PC寄存器的Clock Enable引脚未连接1高电平使能导致PC无法在时钟上升沿更新。Logisim默认PC组件Enable端悬空为0必须手动拉高。解决在PC组件Enable端接Constant值1或用Tunnel引出全局CLK_EN信号并置1。现象2beq $s0,$s1,offset执行后PC跳转错误偏移量计算偏差4字节原因分支目标地址计算中SignExt18({imm,00})未正确实现。报告要求将16位立即数左移2位变4字节对齐但Logisim中需用Shifter组件Dataimm,Shift Amount2,DirectionLeft,Width16再接Sign Extender。若直接用Adder加PC4会忽略符号扩展。解决严格按图1.6构建分支地址通路imm→Shifter→SignExt16→ALU加PC4。现象3lw $t0,0($s0)读出数据全0但s0地址处内存实际有值原因DMEM数据存储器的Read Enable信号未在lw周期置1。MemRead控制信号被遗漏或MemRead LW逻辑未实现。解决检查控制信号生成部分确认MemRead输出端明确连接LW译码信号且该信号在lw指令时为1。现象4add $t0,$s0,$s1执行后t0值为0但s0和s1非零原因RegWrite信号虽为1但RegDst选择错误导致写入寄存器编号错。RegDst1应选择rd字段$t0但若RegDst逻辑写成R_TYPE ~SysCalladd的rd字段指令bit[15..11]未被选中。解决RegDst必须为R_TYPEadd/slt时为1LW/SW/ADDI时为0确保rd字段被送入寄存器堆Write Register端口。现象5syscall执行后CPU未停机继续执行后续无效指令原因Halt信号未连接至PC的Enable端或连接至Load端错误。Halt需在syscall时强制关闭PC更新但PC仍需保持当前值。解决Halt信号直连PC组件Enable引脚确保Enable0时PC锁存当前值。同时检查PC的Load端是否被意外置1应始终为0。3. 多周期MIPS CPU状态机驱动的分时复用架构实现3.1 多周期数据通路重构从“全并行”到“分时复用”的硬件瘦身多周期CPU的设计哲学与单周期截然相反放弃硬件冗余拥抱时间换空间。同一ALU、同一存储器、同一寄存器堆在不同时钟周期承担不同角色。这要求在数据通路上增加大量中间寄存器latch来暂存中间结果并引入精确的状态控制。报告图1.10所示的多周期数据通路核心变化有5处统一存储器取消独立IMEM/DMEM使用单一RAM组件通过MemRead/MemWrite信号分时控制读写新增关键寄存器IRInstruction Register锁存当前指令生命周期为取指→译码→执行A、B、C寄存器分别暂存Regfile[rs]、Regfile[rt]、PC4或ALU结果DRData Register暂存lw读出的数据PC控制升级PC不再仅由PC4驱动而是由PCSrc信号选择源PC4或分支目标且PCWrite信号控制是否更新ALU输入扩展ALU的B输入端从2选1变为4选1支持BAadd、Bimmaddi、BPC4beq、B0syscall地址生成解耦lw/sw的地址计算由ALU完成A SignExt(imm)结果存入C寄存器再送存储器地址端。Logisim中搭建时必须为每个新增寄存器配置正确的时钟使能Enable和复位Clear信号。例如IR的Enable应仅在取指周期State0为1Clear接全局复位A寄存器Enable在译码周期State1为1。所有寄存器的Clock端必须接同一全局时钟否则状态不同步。关键信号流示例lw $t0,4($s0)四周期执行Cycle 0取指PC→IR,PC4→PC,IR←MEM[PC]Cycle 1译码IR[25:21]→A,IR[20:16]→B,PC4→CCycle 2执行A SignExt(IR[15:0])→C,C→MEM_addrCycle 3访存/写回MEM[C]→DR,DR→Regfile[IR[20:16]]提示SignExt16组件必须放在ALU之前Cycle 2而非指令译码阶段。若提前扩展beq的16位偏移量会被错误扩展为32位导致跳转地址过大。3.2 微程序控制器用控制存储器固化13个状态的微指令序列微程序控制器将CPU控制逻辑“软件化”用微指令microinstruction替代硬连线逻辑。本实验定义13个状态State 0~12每个状态对应一条微指令包含18个控制字段见表1.14。实现分三步地址转移逻辑 → ALU控制重构 → 微程序存储器加载。地址转移逻辑图1.18输入为7个译码信号R_TYPE,ADDI,LW,SW,BEQ,BNE,SysCall输出为4位微程序入口地址S3S2S1S0。本质是最小项译码器需将表1.15的入口地址转换为逻辑表达式。例如LW入口地址为20010则S0 R_TYPE·ADDI·LW·SW·BEQ·BNE·SysCall S1 R_TYPE·ADDI·LW·SW·BEQ·BNE·SysCall S2 0 S3 0Logisim中可用Combinational Analysis工具自动生成电路粘贴表1.16的最小项表达式即可。关键验证点当LW信号为1时S3S2S1S0必须输出0010否则微程序从错误地址启动。ALU控制信号重构多周期下ALU需支持更多操作AluControl字段2位定义00加法add/addi/lw/sw01减法beq/bne需A-B得0判断相等10由Func决定slt需比较因此AluOP生成需4选1AluControl[1..0] → MUX_4to1_sel 0x5 → MUX_4to1_input0 # 加法 0x7 → MUX_4to1_input1 # 减法ALU内部定义 0xb → MUX_4to1_input2 # 比较需Func0x2a 0x5 → MUX_4to1_input3 # 默认加法input2的选择逻辑为SLT R_TYPE (Func0x2a)必须确保SLT信号在R_TYPE为真且Func匹配时才激活否则add可能被误执行为比较。微程序存储器加载图1.21将表1.17的微指令按16进制顺序写入文本文件如microcode.txt每行16字节对应1条微指令的18位字段高位补0。Logisim中用ROM组件加载地址线4位0~15数据线18位。致命细节microcode.txt中P字段下地址必须严格按表1.17填写例如syscall状态13的P13否则停机失效。3.3 硬布线控制器Moore型状态机的纯组合逻辑实现硬布线控制器用有限状态机FSM替代微程序状态转移由组合逻辑决定控制信号仅依赖当前状态Moore型。本实验共13个状态0~12需设计状态寄存器4位D触发器存储当前状态S3S2S1S0状态转移逻辑输入为现态译码信号输出为次态控制信号译码逻辑输入为现态输出18个控制字段状态转移逻辑设计根据图1.11状态图列出真值表部分现态R_TYPEADDILWSWBEQBNESysCall次态0XXXXXXX11100000071010000011100100002Logisim中可用Combinational Analysis导入真值表生成电路或手写逻辑如Next_S0 (S0) | (S1 LW) | ...。关键约束SysCall状态13的次态必须为13自循环否则无法停机。控制信号译码逻辑查表1.14每个状态对应固定控制信号。例如State2LW1IorD0,PcSrc0,AluSrcA0,AluSrcB1,MemToReg0,RegDst0,IrWrite0,PcWrite0,RegWrite0,MemWrite0,MemRead0,BEQ0,BNE0,AluControl00,P3用Constant组件输出各字段Tunnel引出至对应硬件模块。玄学经验所有控制信号必须用Constant或Pin明确赋值禁止悬空否则Logisim仿真会显示红色X未知态。3.4 多周期CPU避坑状态机失步与微程序错位的4个致命陷阱多周期CPU的复杂度在于状态时序一个周期的信号错位会导致全线崩溃。以下是复现中高频出现的4个陷阱现象1CPU卡在State0IR始终为0PC不更新原因PCWrite信号在State0未置1或PC的Load端被错误置1。State0需PCWrite1使PC更新为PC4同时IrWrite1使IR锁存指令。解决检查State0对应的控制信号表确认PCWrite和IrWrite均为1并验证PC组件Enable端接PCWriteLoad端接0。现象2lw指令执行到State3时RegWrite0寄存器未写入原因State3LW3的RegWrite字段在微程序表中为1但RegDst信号为0导致写入寄存器编号错误。LW3需RegDst0选择rt字段但若RegDst逻辑未按State译码可能输出0。解决RegDst必须为State3 | State4 | State11 | State12时为1lw/sw/addi写rt其他状态为0。现象3beq跳转后进入State9但PC未修改仍在执行下条指令原因PcSrc1选择分支地址在State9未生效或PcWrite0。State9需PcSrc1ALU输出为目标地址且PcWrite1更新PC。解决检查State9的控制信号确认PcSrc1且PcWrite1并验证ALU的B输入端正确连接C寄存器PC4。现象4syscall执行后CPU不停机State在13和0间跳变原因SysCall译码信号在State13未持续为1或状态转移逻辑中Next_State13的条件不满足。SysCall需在State13时保持高电平且次态逻辑必须写Next_S3S2S1S01101。解决用Logisim的Probe工具监测SysCall信号和Next_State总线确认State13时SysCall1且Next_State13。若SysCall脉冲过短需在译码逻辑后加D Flip-Flop锁存。4.sort.hex测试验证从加载到结果输出的全流程调试技巧4.1 测试程序sort.hex的加载与内存初始化sort.hex是本实验的黄金检验标准——一个用MIPS汇编写的冒泡排序程序输入数组存于内存起始地址0x00000100长度存于0x000000fc排序后结果应存回原数组。Logisim中加载步骤如下准备内存文件sort.hex为Intel Hex格式需转换为Logisim兼容的二进制。用Python脚本解析# hex2bin.py def hex_to_bin(hex_file, bin_file): with open(hex_file, r) as f, open(bin_file, wb) as out: for line in f: if line[0] ! :: continue length int(line[1:3], 16) addr int(line[3:7], 16) record_type int(line[7:9], 16) if record_type 0: # data record data bytes.fromhex(line[9:9length*2]) out.seek(addr) out.write(data) hex_to_bin(sort.hex, sort.bin)加载到RAM在Logisim中选中RAM组件 →Load Image...→ 选择sort.bin起始地址填0x00000100数组起始。初始化测试数据在RAM地址0x00000100处手动写入10个随机数如0x0000000a,0x00000005,...地址0x000000fc写入0x0000000a数组长度10。设置PC初始值将PC寄存器初值设为0x00000100sort.hex第一条指令地址。注意sort.hex的入口点通常为0x00000100但需用Logisim的Text工具打开sort.hex确认第一行00000100。若入口点不同PC初值必须同步修改否则CPU从错误地址取指。4.2 仿真调试用Probe和时钟单步定位执行瓶颈Logisim的Simulation模式是调试核心必须掌握以下技巧Probe信号监控右键点击关键信号线如PC,IR,ALU_out,Regfile_out,Mem_data_out→Add Probe。Probe窗口实时显示信号值可添加标签如PC、IR[31..26]OP。时钟单步Pulse点击Simulate→Pulse按钮CPU执行一个时钟周期。观察Probe值变化验证状态转移是否符合预期。例如State0时PC应4IR应更新为新指令。断点设置Logisim无原生断点但可用Tunnel引出State信号接Probe当State值达到目标如State13时暂停观察。信号波形分析启用Simulate→Logging...选择记录PC,IR,State,Regfile_write_data等信号运行后导出CSV用Excel分析时序。典型调试场景sort.hex运行中PC卡在0x00000104Probe显示IR0x00000000。这表明lw指令读内存失败。此时检查MemRead信号在lw周期是否为1DMEM地址端是否为0x00000100$s0值DMEM数据端是否输出预期值若为0检查内存加载是否成功。4.3 结果验证比对内存输出与预期排序序列sort.hex执行完毕syscall停机后需验证内存中0x00000100起始的10个字是否已升序排列。方法内存快照Simulate→Memory→ 选中RAM →Dump Memory...→ 保存为memory_dump.txt。提取数据用脚本解析dump文件提取地址0x00000100到0x0000012410个字的值# dump_parser.py with open(memory_dump.txt, r) as f: lines f.readlines() data [] for line in lines[4:]: # skip header if not line.strip(): break parts line.split() if len(parts) 1 and parts[0].startswith(000001): data.extend([int(x, 16) for x in parts[1:] if x ! xx]) print(Sorted array:, data[:10]) # should be ascending人工验证若输出为[5, 10, 15, 20, 25, 30, 35, 40, 45, 50]则排序成功若为[10, 5, 15, ...]说明sw写回失败或比较逻辑错误。血泪经验sort.hex中beq和bne的偏移量是编译器生成的必须确保PC4计算和符号扩展100%准确。曾因SignExt18少移1位导致beq跳转地址偏差2字节整个排序循环失效。5. 从Logisim到真实硬件控制器选型、性能边界与教学优化实践5.1 硬布线 vs 微程序控制器选型的工程权衡本实验强制实现两种控制器实则是揭示数字系统设计的根本矛盾速度与灵活性的博弈。硬布线控制器是“为特定指令集定制的超频引擎”微程序控制器是“可编程的通用协处理器”。二者在Logisim中的表现差异直接映射到真实芯片设计维度硬布线控制器微程序控制器时钟频率极高组合逻辑延迟短较低需ROM读取状态译码面积开销小纯门电路大ROM存储器地址译码逻辑扩展性差新增指令需重设计全部逻辑优只需修改微码ROM内容调试难度高信号链长定位难低微指令可读状态清晰功耗动态功耗高大量门翻转静态功耗高ROM待机在Logisim中硬布线CPU单周期执行add仅需1个时钟而微程序CPU需7个周期取指1译码1执行5但若要支持mul指令硬布线需重绘整个控制逻辑图微程序只需在ROM中添加几条微指令。教学启示本科阶段先用硬布线深挖数据通路本质再用微程序理解“控制即程序”的抽象思想——这正是报告将两者并列设计的底层逻辑。5.2 性能瓶颈分析从CPI到关键路径延迟的量化评估单周期CPU的CPICycles Per Instruction恒为1但实际性能受最长路径延迟限制。Logisim中可估算关键路径lw指令关键路径PC→IMEM→IR→Regfile→ALU→DMEM→DR→Regfile延迟 ≈ PC延迟 IMEM读延迟 Regfile读延迟 ALU延迟 DMEM读延迟 DR寄存器延迟**beq指令关键本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
3D可视化大模型架构:从训练到推理的交互式工具 1. 这个3D渲染架构图到底在解决什么问题大模型从2023年火到现在,技术栈已经膨胀到让人头皮发麻的程度。Transformer、MoE、RLHF、KV Cache、张量并行、流水线并行、FlashAttention、PagedAttention……每一个名词背后都是一篇甚至几十篇论文,单独拎出来都… · 2026/11/3 23:44:06
LPDDR4信号完整性测试:CK/DQS与时序测量实战指南 简介:面向移动设备与嵌入式系统硬件工程师、信号完整性测试人员的LPDDR4测试指导文档,聚焦高速内存CK时钟与DQS数据选通信号的完整性验证,帮助读者理清从差分/单端电压、输入斜率到交叉点判定的测试思路,并覆盖读写时序参数的测量… · 2026/11/3 23:44:06
Java+Vue+SpringBoot构建高校成绩管理系统实践 1. 项目概述 这个毕业设计成绩管理系统采用JavaVueSpringBoot技术栈开发,是一个面向高校教务管理的全栈Web应用。我在实际开发过程中发现,这类系统需要同时满足教师评分、学生查询、管理员统计三大核心需求,而市面上很多开源方案要么功能单一… · 2026/11/3 23:43:05
嵌入式Linux系统开发21天速成:从环境搭建到驱动开发的完整学习路线 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 1:02:44
三相BLDC驱动方案:GC4938栅极驱动与霍尔检测实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 1:02:44
TLC5615 DAC实战指南:51/Arduino/STM32三平台精准驱动与电压校准 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 1:02:44
ADS122U04搭配PIC18F4515:24位ADC实现高精度PT100测温 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 1:02:44
数据中心直流配电中的逆变器技术适配与现场调试要点 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 1:02:44
工业圆形连接器线缆选型:可靠性锚点与动态工况验证 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 1:01:43
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
AI辅助技术栈评估:提升研发决策效率60% 1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17
从生成Token到直接决策:Jev如何重塑AI Agent工程实践 1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17
32G统一内存跑大模型:内存账、TPS实测与端云分流 想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46