You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Verilog中实现字符串长度的计算功能

Verilog 字符串长度计算实现方案

Verilog中字符串本质是由8位ASCII值组成的序列,每个字符占1字节(8bit),存储在reg类型变量中时,变量位宽为8*N,N为可容纳的最大字符数,具体计算逻辑可分为两种场景实现:

静态字符串长度计算(编译期确定)

如果是编译期就固定的字符串常量,直接使用Verilog-2001引入的系统函数$len()即可快速获取长度:

module static_str_len_test;
    parameter STR_CAT = "CAT";
    parameter STR_APPLE = "APPLE";
    
    initial begin
        $display("String \"CAT\" length is %0d", $len(STR_CAT)); // 输出3
        $display("String \"APPLE\" length is %0d", $len(STR_APPLE)); // 输出5
    end
endmodule

动态字符串长度计算(运行期可修改)

如果是运行时可修改的字符串变量,需要自行实现遍历逻辑,通常约定以\0(ASCII 0值)作为字符串结束符,实现代码如下:

module dynamic_str_len #(
    parameter MAX_STR_LEN = 128 // 自定义支持的最大字符串长度
)(
    input  [8*MAX_STR_LEN-1:0] str_in, // 输入字符串
    output reg [7:0]           len_out // 输出计算得到的长度
);

integer i;
always @(*) begin
    len_out = 0;
    // 从首字符开始遍历,遇到结束符停止
    for (i = 0; i < MAX_STR_LEN; i = i + 1) begin
        if (str_in[8*(MAX_STR_LEN - i) +: 8] != 8'h00) begin
            len_out = len_out + 1;
        end else begin
            break;
        end
    end
end

endmodule

验证示例

module tb;
    reg [8*16-1:0] test_str;
    wire [7:0] str_len;

    dynamic_str_len #(.MAX_STR_LEN(16)) u_calc (
        .str_in(test_str),
        .len_out(str_len)
    );

    initial begin
        test_str = "CAT";
        #10;
        $display("Input: CAT, Length: %0d", str_len); // 输出3
        
        test_str = "APPLE";
        #10;
        $display("Input: APPLE, Length: %0d", str_len); // 输出5
        
        $finish;
    end
endmodule

如果使用SystemVerilog,可直接调用内置的str.len()方法,无需自行实现遍历逻辑。

内容的提问来源于stack exchange,提问作者Bunny Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:36:08