【电路笔记 元器件】存储设备:RAM 静态随机存取存储器(SRAM)芯片+异步 SRAM 的特性+异步 SRAM读写测试(HDL)

【电路笔记 元器件】存储设备:RAM 静态随机存取存储器(SRAM)芯片+异步 SRAM 的特性+异步 SRAM读写测试(HDL)

文章目录

RAM

SRAM & DRAM

  • 常见的RAM 断电后数据立即丢失,需要持续供电维持数据。
类型全称特点应用
SRAMStatic RAM(静态 RAM)- 6 晶体管结构- 无需刷新- 速度快、功耗高、成本高CPU 缓存、FPGA 片外高速缓存
DRAMDynamic RAM(动态 RAM)- 1 晶体管 + 1 电容- 需定期刷新(~64ms)- 速度较慢、密度高、成本低计算机主内存(DDR4/DDR5)
  • 此外,还有NVSRAM(Non-Volatile SRAM)、MRAM(Magnetoresistive RAM)、FRAM(Ferroelectric RAM)等用于汽车黑匣子、POS 机(需掉电保护关键状态)等环境的非易失性 RAM(Non-Volatile RAM, NVRAM)。

异步 SRAM& 同步 SRAM (SSRAM)

典型异步型号容量位宽封装应用场景
CY7C1041CV33512KB (256K × 16)16-bitTSOPII-54汽车电子、工业控制
IS61LV25616AL512KB (256K × 16)16-bitTSOP-44FPGA 开发板(如 DE2)
AS6C6225632KB (32K × 8)8-bitDIP/SOP嵌入式小系统
71V424512KB (512K × 8)8-bitTSOP网络设备缓存
  • 异步 SRAM 的核心特点是:没有时钟输入引脚(CLK),所有操作由控制信号的电平变化直接触发。
类型是否需时钟刷新访问延迟控制复杂度典型用途
异步 SRAM不需极低(ns级)简单高速缓存、状态机存储
同步 SRAM (SSRAM)不需低(1~2 CLK)中等高带宽嵌入式系统
SDRAM需定期刷新较高(含潜伏期)复杂主存(PC、手机)
  • 异步 SRAM 的特性:
特性说明
无需刷新静态存储单元(6T 结构),只要通电数据就保持
无时钟依赖所有操作由控制信号电平决定,响应快
确定性延迟从地址稳定到数据有效的时间固定(如 t = 10 ns)
高速访问典型访问时间 8–15 ns,远快于 DRAM
高功耗 & 高成本单元面积大,不适合大容量主存
三态数据总线支持多设备共享总线(高阻态隔离)

CY7C1041CV33

  • CY7C1041CV33 Automotive —— 车规级高性能 CMOS 静态随机存取存储器(SRAM)芯片,CY7C1041CV33-10ZXI 4兆位( 256K ×16 )静态RAM。芯片适用于:
    • 汽车电子控制单元(ECU)
    • 仪表盘系统
    • ADAS(高级驾驶辅助系统)
    • 需要高可靠性、宽温范围和抗干扰能力的嵌入式系统

基本规格

  • 容量与结构
    该 SRAM 的组织方式为 262,144 个字 × 16 位,即总容量为:
    262,144 × 16 = 4,194,304  bits = 512  KB (字节) 262{,}144 \times 16 = 4{,}194{,}304\ \text{bits} = 512\ \text{KB (字节)} 262,144×16=4,194,304 bits=512 KB (字节)
    地址线为 A0–A17,共 18 根,可寻址 2 18 = 262,144 2^{18} = 262{,}144 218=262,144 个地址。
  • 数据总线
    16 位宽,分为低字节(I/O0–I/O7)和高字节(I/O8–I/O15)。

关键控制信号

  • The CY7C1041CV33 Automotive is a high performance CMOSstatic RAM organized as 262,144 words by 16 bits. To write to the device, take Chip Enable (CE) and Write Enable(WE) inputs LOW. If Byte Low Enable (BLE) is LOW, then datafrom I/O pins (I/O0 through I/O7), is written into the locationspecified on the address pins (A0 through A17). If Byte HighEnable (BHE) is LOW, then data from I/O pins (I/O8 throughI/O15) is written into the location specified on the address pins(A0 through A17).To read from the device, take Chip Enable (CE) and OutputEnable (OE) LOW while forcing the Write Enable (WE) HIGH. IfByte Low Enable (BLE) is LOW, then data from the memorylocation specified by the address pins appear on I/O0 to I/O7. IfByte High Enable (BHE) is LOW, then data from memoryappears on I/O8 to I/O15. For more information, see the TruthTable on page 11 for a complete description of Read and Writemodes.The input and output pins (I/O0 through I/O15) are placed in ahigh impedance state when the device is deselected (CE HIGH),the outputs are disabled (OE HIGH), the BHE and BLE aredisabled (BHE, BLE HIGH), or during a write operation (CE LOWand WE LOW).
信号功能
CE芯片使能:LOW 表示选中芯片
WE写使能:LOW 表示写操作
OE输出使能:LOW 表示允许读出数据
BLE低字节使能:LOW 表示操作 I/O0–I/O7
BHE高字节使能:LOW 表示操作 I/O8–I/O15
  • 一般可以将40(BHE)和39(BLE)直接接地。

写操作(Write)

  • 可以只写低字节、只写高字节,或同时写两个字节(当 BLE 和 BHE 都为 LOW 时)。
  • 要向芯片写入数据,需满足以下条件:
    • CE(Chip Enable,片选) = LOW
    • WE(Write Enable,写使能) = LOW
  • 此时,根据两个字节使能信号决定写入哪一部分数据:
    • BLE(Byte Low Enable) = LOW
      I/O0–I/O7 上的数据写入由 A0–A17 指定的地址的 低字节
    • BHE(Byte High Enable) = LOW
      I/O8–I/O15 上的数据写入同一地址的 高字节

读操作(Read)

  • 同样支持单独读低字节、高字节,或同时读取整个 16 位数据。
  • 要从芯片读取数据,需满足:
    • CE = LOW
    • OE(Output Enable,输出使能) = LOW
    • WE = HIGH(必须为高,防止误写)
  • 此时:
    • BLE = LOW
      指定地址的 低字节数据 出现在 I/O0–I/O7
    • BHE = LOW
      指定地址的 高字节数据 出现在 I/O8–I/O15

高阻态(High-Impedance / Tri-State)

  • 高阻态对多设备共享总线非常重要,避免总线冲突。在以下任一情况下,所有 I/O 引脚(I/O0–I/O15)进入高阻态(即断开输出,不驱动总线):
    • CE = HIGH(芯片未被选中)
    • OE = HIGH(输出被禁用)
    • BLE = HIGH 且 BHE = HIGH(两个字节使能都无效)
    • 正在进行写操作(CE = LOW 且 WE = LOW)—— 此时 I/O 作为输入,输出自然关闭

异步 SRAM 芯片

  • CY7C1041CV33 是一款 异步 SRAM 芯片(Asynchronous Static RAM),本身 没有内部状态机或复杂协议,其读写完全由外部逻辑通过控制信号(CE、OE、WE、BLE、BHE)直接驱动。
  • 示例:Verilog SRAM 控制器(支持字节/字写入、字读取)

这段Verilog代码实现了一个异步SRAM(CY7C1041CV33,512KB×16位)的控制器模块,核心作用是对接CPU/FIFO等上层逻辑与物理SRAM芯片:

  • 接收上层的读写请求、地址、数据和字节选择信号;
  • 按照SRAM的时序要求生成控制信号(片选、读使能、写使能、字节使能等);
  • 处理双向数据总线的三态逻辑,完成数据读写,并通过应答信号告知上层操作完成。
// sram_controller.v // 注:CY7C1041CV33是异步SRAM芯片,容量512KB字节(按16位宽算,共2^18=262144个存储单元); 前提假设:系统时钟频率足够高,能满足SRAM的时序要求(如地址访问时间tAA、写周期tWC) // 模块定义,带参数化配置(方便适配不同规格SRAM) module sram_controller #( parameter ADDR_WIDTH = 18, // 地址位宽:2^18=262144个存储单元,对应512KB(512×1024) parameter DATA_WIDTH = 16 // 数据位宽:16位(与SRAM的16位宽匹配) )( // 时钟与复位 input clk, // 系统时钟(控制器同步时钟) input rst_n, // 低电平有效的异步复位 // CPU/FIFO上层接口(控制器的输入/输出) input req, // 读写请求有效信号(高电平表示有请求) input wr_en, // 写使能:1=写操作,0=读操作 input [ADDR_WIDTH-1:0] addr, // 读写地址 input [DATA_WIDTH-1:0] wdata, // 写数据(CPU/FIFO→SRAM) output reg [DATA_WIDTH-1:0] rdata, // 读数据(SRAM→CPU/FIFO) input byte_sel_low, // 低字节选择:1=操作低8位(I/O0-7) input byte_sel_high, // 高字节选择:1=操作高8位(I/O8-15) output reg ack, // 应答有效信号:高电平表示操作完成 // SRAM物理引脚接口(直接连接SRAM芯片) output reg [ADDR_WIDTH-1:0] sram_addr, // SRAM地址线 inout [DATA_WIDTH-1:0] sram_dq, // SRAM双向数据总线(关键:inout类型) output reg sram_ce_n, // SRAM片选(低有效) output reg sram_oe_n, // SRAM读使能(低有效) output reg sram_we_n, // SRAM写使能(低有效) output reg sram_ble_n, // SRAM低字节使能(低有效,对应I/O0-7) output reg sram_bhe_n // SRAM高字节使能(低有效,对应I/O8-15) ); // Tri-state data bus:三态数据总线控制(核心!处理双向总线) // 逻辑:只有写操作、片选有效、写使能有效时,才把wdata输出到sram_dq;否则总线置高阻(z) assign sram_dq = (wr_en && !sram_ce_n && !sram_we_n) ? wdata : {DATA_WIDTH{1'bz}}; // Internal state (simple 2-cycle: setup + access):内部状态机定义(简单2周期:建立+访问) reg [1:0] state; // 状态寄存器(2位足够表示3个状态) // 状态常量定义(提高代码可读性) localparam IDLE = 2'b00, // 空闲态:无请求,所有SRAM控制信号置无效 SETUP = 2'b01, // 建立态:锁存地址、字节选择,置位片选和读写使能 ACCESS = 2'b10; // 访问态:读操作锁存数据,置位应答,完成一次交易 // 时序逻辑:状态机核心(时钟上升沿/复位下降沿触发) always @(posedge clk or negedge rst_n) begin if (!rst_n) begin // 异步复位(低有效):所有信号置初始态 state <= IDLE; // 回到空闲态 ack <= 0; // 应答无效 sram_ce_n <= 1'b1; // 片选无效(高) sram_oe_n <= 1'b1; // 读使能无效(高) sram_we_n <= 1'b1; // 写使能无效(高) sram_ble_n <= 1'b1; // 低字节使能无效(高) sram_bhe_n <= 1'b1; // 高字节使能无效(高) sram_addr <= 0; // 地址置0 end else begin // 非复位状态:状态机逻辑 ack <= 0; // 先默认应答无效(避免锁存,仅在ACCESS态置1) case (state) IDLE: begin // 空闲态:等待请求 // 空闲态下,所有SRAM控制信号置无效(防止误操作) sram_ce_n <= 1'b1; sram_oe_n <= 1'b1; sram_we_n <= 1'b1; sram_ble_n <= 1'b1; sram_bhe_n <= 1'b1; // 检测到有效请求(req=1),进入建立态 if (req) begin sram_addr <= addr; // 锁存上层输入的地址 sram_ble_n <= ~byte_sel_low; // 字节使能:低有效,所以取反(sel=1→ble_n=0) sram_bhe_n <= ~byte_sel_high;// 同理,高字节选择→bhe_n置低 state <= SETUP; // 进入建立态 end end SETUP: begin // 建立态:配置SRAM控制信号,为读写做准备 // Address and enables are already set:地址和字节使能已在IDLE→SETUP时锁存 // Assert CE and direction-specific enables:置位片选,并区分读写使能 sram_ce_n <= 1'b0; // 片选有效(低):选中SRAM芯片 if (wr_en) begin // 写操作 sram_we_n <= 1'b0; // 写使能有效(低) sram_oe_n <= 1'b1; // 读使能无效(避免读写冲突) end else begin // 读操作 sram_we_n <= 1'b1; // 写使能无效 sram_oe_n <= 1'b0; // 读使能有效(低) end state <= ACCESS; // 进入访问态 end ACCESS: begin // 访问态:完成读写,置位应答 // Sample read data or hold write data:读操作锁存数据,写操作保持数据 if (~wr_en) begin // 仅读操作时 rdata <= sram_dq; // 锁存SRAM输出的读数据到rdata end ack <= 1'b1; // 应答有效:告知上层本次操作完成 state <= IDLE;// 回到空闲态,等待下一次请求 end default: state <= IDLE; // 异常状态:回到空闲态(提高鲁棒性) endcase end end endmodule 
三态总线(sram_dq)
在这里插入图片描述
  • SRAM的数据线是双向的(读时SRAM输出,写时控制器输出),Verilog中用inout类型表示;
  • 控制器写SRAM时,把wdata驱动到sram_dq;读SRAM时,sram_dq置高阻(z),由SRAM驱动数据;
  • 条件(wr_en && !sram_ce_n && !sram_we_n)确保只有“写操作+片选有效+写使能有效”时才输出数据,避免总线冲突。

Testbench

  • Testbench 包含以下关键部分:
    • 时钟/复位生成:产生 50MHz 系统时钟(20ns 周期)和异步复位信号;
    • SRAM 行为模型:模拟 CY7C1041CV33 异步 SRAM 的读写行为(存储数据、响应控制信号);
    • 激励生成:向控制器发送写请求→读请求(验证写后读)、单字节读写、全字读写等测试用例;
    • 结果检查:自动比对读回数据与写入数据,输出测试结果。
`timescale 1ns / 1ps module sram_controller_tb; // ====================== 1. 参数定义 ====================== parameter ADDR_WIDTH = 18; parameter DATA_WIDTH = 16; parameter CLK_PERIOD = 20; // 50 MHz // ====================== 2. 信号声明 ====================== reg clk; reg rst_n; reg req; reg wr_en; reg [ADDR_WIDTH-1:0] addr; reg [DATA_WIDTH-1:0] wdata; reg byte_sel_low; reg byte_sel_high; wire [DATA_WIDTH-1:0] rdata; wire ack; wire [ADDR_WIDTH-1:0] sram_addr; wire [DATA_WIDTH-1:0] sram_dq; wire sram_ce_n; wire sram_oe_n; wire sram_we_n; wire sram_ble_n; wire sram_bhe_n; // SRAM 行为模型存储 reg [7:0] sram_mem [0:(1<<ADDR_WIDTH)-1][1:0]; // [addr][0=low, 1=high] reg [DATA_WIDTH-1:0] sram_dq_out; // ====================== 3. 时钟生成 ====================== initial begin clk = 1'b0; forever #(CLK_PERIOD/2) clk = ~clk; end // ====================== 4. 实例化 DUT ====================== sram #( .ADDR_WIDTH(ADDR_WIDTH), .DATA_WIDTH(DATA_WIDTH) ) u_dut ( .clk(clk), .rst_n(rst_n), .req(req), .wr_en(wr_en), .addr(addr), .wdata(wdata), .byte_sel_low(byte_sel_low), .byte_sel_high(byte_sel_high), .ack(ack), .rdata(rdata), .sram_addr(sram_addr), .sram_dq(sram_dq), .sram_ce_n(sram_ce_n), .sram_oe_n(sram_oe_n), .sram_we_n(sram_we_n), .sram_ble_n(sram_ble_n), .sram_bhe_n(sram_bhe_n) ); // ====================== 5. SRAM 行为模型 ====================== assign sram_dq = (!sram_ce_n && !sram_oe_n && sram_we_n) ? sram_dq_out : {DATA_WIDTH{1'bz}}; // 写操作:在 WE_n 下降沿锁存数据(按字节使能) always @(negedge sram_we_n or negedge rst_n) begin if (!rst_n) begin // 初始化数据 // integer i, j; // for (i = 0; i < (1 << ADDR_WIDTH); i = i + 1) begin // sram_mem[i][0] = 8'h00; // sram_mem[i][1] = 8'h00; // end end else if (!sram_ce_n) begin if (!sram_ble_n) sram_mem[sram_addr][0] = sram_dq[7:0]; if (!sram_bhe_n) sram_mem[sram_addr][1] = sram_dq[15:8]; end end // 读操作:在 OE_n 下降沿输出数据 always @(negedge sram_oe_n or negedge rst_n) begin if (!rst_n) begin sram_dq_out <= {DATA_WIDTH{1'b0}}; end else if (!sram_ce_n) begin sram_dq_out <= {16{1'b0}}; if (!sram_ble_n) sram_dq_out[7:0] <= sram_mem[sram_addr][0]; if (!sram_bhe_n) sram_dq_out[15:8] <= sram_mem[sram_addr][1]; end end // ====================== 6. 单次写入测试激励 ====================== initial begin // 初始化 rst_n = 1'b0; req = 1'b0; wr_en = 1'b0; addr = 0; wdata = 0; byte_sel_low = 1'b0; byte_sel_high = 1'b0; // 复位保持 2 个周期 repeat(2) @(posedge clk); rst_n = 1'b1; // === 单次写入:地址 0x1000,数据 0xABCD,全字节 === @(posedge clk); req = 1'b1; wr_en = 1'b1; addr = 18'h1000; wdata = 16'hABCD; byte_sel_low = 1'b1; // 使能低字节 byte_sel_high = 1'b1; // 使能高字节 wait(ack == 1'b1); // 等待写完成 @(posedge clk); req = 1'b0; // 撤销请求 // 仿真再跑几个周期以便观察波形 repeat(5) @(posedge clk); $finish; end endmodule 
在这里插入图片描述
  • 用二维数组 sram_mem[地址][0/1] 模拟 SRAM 存储阵列(0=低字节,1=高字节),支持按字节读写;
  • 双向总线 sram_dq 处理:读操作时 SRAM 输出数据(sram_dq_out),写操作时 SRAM 接收数据并存储;
  • 响应 sram_we_n(写使能)和 sram_oe_n(读使能)的低电平有效信号,模拟真实 SRAM 的读写时序。
  • 输入接口
    • req:发起一次访问
    • wr_en:1=写,0=读
    • addr:18 位地址(A0–A17)
    • wdata:要写入的数据(16 位)
    • byte_sel_low/high:控制是否操作低/高字节(类似 ARM 的 strb
  • 输出
    • ack:操作完成标志(单周期脉冲)
    • rdata:读取的数据(仅在读操作有效)
  • SRAM 引脚
    • 所有 _n 信号为低有效(符合芯片手册)
    • sram_dq 为双向三态总线

电气建议

  • 对于 CY7C1041CV33 这类纯异步 SRAM,关键在于 满足最小脉冲宽度和地址建立/保持时间,通常需在 FPGA 中插入等待周期或使用 slower clock domain。
  • 如果时钟较快(如 >50 MHz),建议在访问 SRAM 时插入 1~2 个等待周期,或使用 状态机延时 来满足 t(地址到数据有效时间,典型值 10–12 ns)。
// 新增延时计数器参数 parameter WAIT_CYCLES = 2; // 可配置等待周期,适配不同SRAM时序 reg [3:0] wait_cnt; // 延时计数器 // 在SETUP态后增加WAIT态,计数器减到0再进入ACCESS态 localparam IDLE=0, SETUP=1, WAIT=2, ACCESS=3; always @(posedge clk) begin if(state == WAIT) begin wait_cnt <= wait_cnt - 1'b1; if(wait_cnt == 0) state <= ACCESS; end end 

读写测试

  • 实例化 sram 控制器,自动生成 一次写操作(地址 0,数据 0x1234) ,紧接着执行 一次读操作(地址 0) ,将读回的数据输出到顶层端口(便于仿真观察)。SRAM 是易失性、无内部状态机的存储器,只要能正确完成“写入 → 读出 → 数据比对”流程,基本可判定芯片功能完好。
  • 一般将40(BHE)和39(BLE)直接接地。
// sramt.v // Top-level module to perform: WRITE(addr=0, data=0x1234) → READ(addr=0) // 模块 sramt 实现(先写后读地址 0) Uses the provided 'sram' controller module sramt ( input clk, input rst_n, // Debug output: read-back data from address 0 output reg [15:0] final_rdata, output reg done // High when both write and read are complete ); parameter ADDR_WIDTH = 18; parameter DATA_WIDTH = 16; // Internal signals for sram controller interface reg req; reg wr_en; reg [ADDR_WIDTH-1:0] addr; reg [DATA_WIDTH-1:0] wdata; reg byte_sel_low; reg byte_sel_high; wire [DATA_WIDTH-1:0] rdata; wire ack; // SRAM physical pins (not exposed at top level) wire [ADDR_WIDTH-1:0] sram_addr; wire [DATA_WIDTH-1:0] sram_dq; wire sram_ce_n; wire sram_oe_n; wire sram_we_n; wire sram_ble_n; wire sram_bhe_n; // State machine for test sequence typedef enum logic [1:0] { IDLE_ST, WRITE_REQ, WAIT_WRITE_ACK, READ_REQ, WAIT_READ_ACK, FINISHED } test_state_t; test_state_t test_state; // Instantiate the sram controller sram #( .ADDR_WIDTH(ADDR_WIDTH), .DATA_WIDTH(DATA_WIDTH) ) u_sram ( .clk(clk), .rst_n(rst_n), .req(req), .wr_en(wr_en), .addr(addr), .wdata(wdata), .byte_sel_low(byte_sel_low), .byte_sel_high(byte_sel_high), .rdata(rdata), .ack(ack), .sram_addr(sram_addr), .sram_dq(sram_dq), .sram_ce_n(sram_ce_n), .sram_oe_n(sram_oe_n), .sram_we_n(sram_we_n), .sram_ble_n(sram_ble_n), .sram_bhe_n(sram_bhe_n) ); // Test control logic always @(posedge clk or negedge rst_n) begin if (!rst_n) begin test_state <= IDLE_ST; req <= 1'b0; wr_en <= 1'b0; addr <= 18'd0; wdata <= 16'd0; byte_sel_low <= 1'b0; byte_sel_high <= 1'b0; final_rdata <= 16'd0; done <= 1'b0; end else begin req <= 1'b0; // default deassert request case (test_state) IDLE_ST: begin if (rst_n) begin test_state <= WRITE_REQ; end end WRITE_REQ: begin req <= 1'b1; wr_en <= 1'b1; addr <= 18'd0; // Address 0 wdata <= 16'h1234; // Write data byte_sel_low <= 1'b1; // Enable low byte byte_sel_high <= 1'b1; // Enable high byte test_state <= WAIT_WRITE_ACK; end WAIT_WRITE_ACK: begin if (ack) begin test_state <= READ_REQ; end end READ_REQ: begin req <= 1'b1; wr_en <= 1'b0; // Read operation addr <= 18'd0; // Address 0 byte_sel_low <= 1'b1; byte_sel_high <= 1'b1; test_state <= WAIT_READ_ACK; end WAIT_READ_ACK: begin if (ack) begin final_rdata <= rdata; // Capture read data done <= 1'b1; test_state <= FINISHED; end end FINISHED: begin done <= 1'b1; // Hold done high // Stay here forever end default: test_state <= IDLE_ST; endcase end end endmodule 
特性说明
目标地址固定为 018'd0
写入数据16'h1234(可修改)
字节使能全字(低+高字节都使能)
操作顺序写 → 等待 ack → 读 → 等待 ack → 输出结果
输出信号final_rdata:读回的数据;done:操作完成标志
复位安全异步复位,初始状态可控

Read more

NWPU VHR-10数据集 无人机遥感目标检测数据集 飞机 储罐 棒球场 网球场篮球场 港口车辆桥梁检测 遥感图像中的地理空间目标检测

NWPU VHR-10数据集 无人机遥感目标检测数据集 飞机 储罐 棒球场 网球场篮球场 港口车辆桥梁检测 遥感图像中的地理空间目标检测

NWPU VHR-10数据集 遥感数据集 NWPU VHR-10数据集是 10个类别地理空间目标检测的挑战性数据集,共650张图片。 YOLO和COCO格式 数据集按默认划分比例:390张训练集、130张验证集、130张测试集。 手动标注了757架飞机、302艘船只、655个储罐、390个棒球场、524个网球场、159个篮球场、163个田径场、224个港口、124座桥梁和598辆车辆。 📊 一、数据集总体信息 项目描述数据集名称NWPU VHR-10(Northwestern Polytechnical University Very High Resolution 10-class Dataset)任务类型遥感图像中的地理空间目标检测(Object Detection in Remote Sensing Images)图像总数650 张(均为高分辨率遥感图像,源自 Google Earth 等平台)图像分辨率约 600×600

小米 “养龙虾”:手机 Agent 落地,智能家居十年困局被撬开

小米 “养龙虾”:手机 Agent 落地,智能家居十年困局被撬开

3月6日,小米正式推出国内首个手机端类 OpenClaw Agent 应用 ——Xiaomi miclaw,开启小范围邀请封测。这款被行业与网友戏称为小米 “开养龙虾” 的新品,绝非大模型浪潮下又一款语音助手的常规升级,而是基于自研 MiMo 大模型、具备系统级权限、全场景上下文理解能力的端侧智能体。 作为深耕智能家居领域的行业媒体,《智哪儿》始终认为:智能家居行业过去十年的迭代,始终没能跳出 “被动执行” 的底层困局。而 miclaw 的落地,不止是小米在端侧 AI 赛道的关键落子,更是为整个智能家居行业的底层逻辑重构,提供了可落地的参考范本。需要清醒认知的是,目前该产品仍处于小范围封测阶段,复杂场景执行成功率、端侧功耗表现、第三方生态适配进度等核心体验,仍有待大规模用户实测验证。本文将结合具象场景、量化数据与多维度视角,客观拆解 miclaw 的突破价值、现实挑战,以及它对智能家居行业的长期影响。 01 复盘行业困局:智能家居十年 始终困在 “被动执行”

全面的System Verilog教程:从基础到高级验证

本文还有配套的精品资源,点击获取 简介:System Verilog是用于系统级验证、芯片设计与验证以及FPGA实现的强大硬件描述语言。它扩展了Verilog的基础特性,支持高级语言结构,如类、接口、任务和函数,优化了验证流程。教程内容涵盖System Verilog的基础概念、结构化编程元素、并发与同步机制、现代验证方法学、UVM验证方法论以及标准库的应用。旨在教授学生掌握System Verilog语法和高级特性,实现高效、可维护的验证代码。 1. System Verilog概述及应用领域 1.1 System Verilog的起源与发展 System Verilog是作为硬件设计和验证领域的重要语言,由Verilog发展而来,随后被进一步扩展以满足现代电子设计自动化的需要。其发展始于20世纪90年代,目的是在原有Verilog HDL的基础上,提供更为强大的设计验证功能。 1.1.1 Verilog与VHDL的区别 虽然Verilog和VHDL都是硬件描述语言(HDL),但它们在语法和使用方法上存在差异。Verilog更接近于C语言,而VHDL的语法结构则更接近

ESP32 小智 AI 机器人入门教程从原理到实现(自己云端部署)

此博客为一篇针对初学者的详细教程,涵盖小智 AI 机器人的原理、硬件准备、软件环境搭建、代码实现、云端部署以及优化扩展。文章结合了现有的网络资源,取长补短,确保内容易于理解和操作。 简介: 本教程将指导初学者使用 ESP32 微控制器开发一个简单的语音对话机器人“小智”。我们将介绍所需的基础原理、硬件准备、软件环境搭建,以及如何编写代码实现语音唤醒和与云端大模型的对接。通过本教程,即使没有深厚的 AI 或嵌入式经验,也可以一步步制作出一个能听懂唤醒词并与人对话的简易 AI 机器人。本教程提供详细的操作步骤、代码示例和图示,帮助您轻松上手。 1. 基础原理 ESP32 架构及其在 AI 领域的应用: ESP32 是一款集成 Wi-Fi 和蓝牙的双核微控制器,具有较高的主频和丰富的外设接口,适合物联网和嵌入式 AI 应用。特别是新版的 ESP32-S3 芯片,不仅运行频率高达 240MHz,还内置了向量加速指令(