zoukankan      html  css  js  c++  java
  • verilog中读取文件中的字符串_modelsim高级仿真

      今天给个程序大家玩玩。因为今天遇到一个问题,就是要向UART发送指令,指令非常多,都是字符串。一直copy 函数 UART ("COMM_1");  UART ("COMM_2");........可是指令有好几十个哦。如果遇上百个岂不是更惨。

      如果是C语言,大家肯定想到用数组遍历。不过Verilog中想用数组遍历,我没有尝试过 —— 我这里是字符串不是简单的16进制数。有兴趣的同学可以自己玩玩,大家一起交流。目前我采用的是文件的方式来做

    第一步建立一个文件 ,名称是test_case.dat。里面保存你需要发送的指令,例如:

    FPGA!!
    gong--
    cheng-
    shi---
    zhi---
    jia---
    oyeoye
    

    第二步使用下列代码

     1 `timescale 1ns/1ps 
     2 
     3 
     4 
     5 module readfile ; 
     6 
     7 integer str_cnt ; 
     8 integer file_r,file_w ; 
     9 
    10 reg  [47:0]reg0 ; 
    11 reg        str_p ; 
    12 initial begin 
    13     str_cnt = 0 ; 
    14     file_r = $fopen ("test_case.dat","r");
    15     file_w = $fopen ("test_case_h.dat","w");
    16     
    17     while(!$feof(file_r)) begin
    18         str_p = $fgets(reg0,file_r);
    19         if(reg0==10);  //Tab 
    20         else if (reg0==0) ;  //file finish
    21         else begin   
    22                 str_cnt = str_cnt + 1 ; 
    23                 $display("%s",reg0);
    24                 $fwrite(file_w, "NO=%d,   %s = %h
    ", str_cnt,reg0, reg0);
    25                 end 
    26         end
    27         
    28     $fclose (file_r);
    29     $fclose (file_w);
    30     #2
    31     $stop ; 
    32     end 
    33     
    34 endmodule 

    输出到一个 test_case_h.dat文件。输出是这个样子的

    NO=          1,   FPGA!! = 465047412121
    NO=          2,   gong-- = 676f6e672d2d
    NO=          3,   cheng- = 6368656e672d
    NO=          4,   shi--- = 7368692d2d2d
    NO=          5,   zhi--- = 7a68692d2d2d
    NO=          6,   jia--- = 6a69612d2d2d
    NO=          7,   oyeoye = 6f79656f7965
    

       注意看哦,我的test_case.dat中所有的字符串都是6*8bit的。对应程序中的reg0是48bit的。如果字符串bit少了会把换行符读进去,如果字符串的bit多了会遗漏。 

    都说了是给大家玩的程序。所以有兴趣的朋友可以查询一下standard中对$feof以及$fgets的解读

    欢迎加入: FPGA广东交流群:162664354

          FPGA开发者联盟: 485678884

  • 相关阅读:
    电源积累
    电感的分类及作用
    电容退耦原理分享
    电容选型
    上拉电阻
    LVTTL与LVCMOS区别
    可重入函数与不可重入函数
    永不改变的PCB设计黄金法则
    os_cpu_a.asm
    [原创]Getting Started with Skywalking
  • 原文地址:https://www.cnblogs.com/sepeng/p/5394250.html
Copyright © 2011-2022 走看看