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

如何用Verilog将输入文件的每个字符存储到数组中?

用Verilog将文件字符存入数组的实现方案

你可以利用Verilog字符串本身就是字节数组的特性,直接通过下标访问$fgets读取到的每行字符串的单个字符,再存入目标数组。以下是修改后的代码,实现把每个字符(可按需处理换行符)存入数组:

首先定义全局的字符数组和索引变量,用来累计存储所有字符:

reg [7:0] char_array[0:100];  // 定义足够大的字符数组,每个元素存ASCII字符(8位)
integer array_idx = 0;         // 数组的当前存储索引
integer infile;
reg [255:0] str;               // 存储每行的字符串
integer c, r;

然后修改读取逻辑,遍历每行的每个字符存入数组:

initial begin
    infile = $fopen("input.txt", "r");
    if (infile == 0) begin
        $display("Failed to open file!");
        $finish;
    end

    c = $fgetc(infile);
    while(c != `EOF) begin
        r = $ungetc(c, infile);
        $fgets(str, infile);  // 读取一行到str
        
        // 遍历当前行的每个字符,存入char_array
        for (int i=0; str[i] != 8'h00; i++) begin  // 空字符'\0'是字符串结束标志
            // 可选:跳过换行符或回车符,按需保留
            if (str[i] != 8'h0A && str[i] != 8'h0D) begin
                char_array[array_idx] = str[i];
                array_idx = array_idx + 1;
            end
        end

        c = $fgetc(infile);
    end

    $fclose(infile);

    // 打印验证存储结果
    $display("Stored characters in array:");
    for (int i=0; i<array_idx; i++) begin
        $display("char_array[%0d] = '%c'", i, char_array[i]);
    end
end

关键说明

  • Verilog的字符串变量(比如str)本质是8位字节的数组,str[0]就是该行的第一个字符,str[1]是第二个,以此类推,直到遇到空字符8'h00结束。
  • 用array_idx累计存储位置,避免每次读行覆盖之前的存储内容。
  • 代码里加了换行符(8'h0A)和回车符(8'h0D)的判断,如果你需要保留这些换行符,删掉这个判断即可。
  • 确保char_array的大小足够容纳文件所有字符,根据实际文件大小调整数组范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:03:25