V

 

ASIC/FPGA Design and Verification Out Source Services

Run a perl script from vim on a block of text, to enumerate constants for a state machine.

  1. In this site, many examples show how to run a perl script, from within vim, on a marked text.

  2. In this case a set of constants, written in VHDL for a large state machine, are enumerated, by the script. This example simply re-numbers the constants, saving precious time, of manual typing. When a new constant is inserted, for example, such a script is a real asset.
    Instead of the simple counter, which I use in this script, a one hot scheme can be easily implemented instead.

  3. To operate, first mark the block from within vim: 'a and 'b, for instance. The block may contain remarks. The script will leave remarks untouched.

  4. signal fsm_ns :std_logic_vector(15 downto 0);
    --read constatns
    constant C_IDLE0 : std_logic_vector(15 downto 0) := "0000000000000001";
    --assert CLE and CE
    constant C_CLE_0 : std_logic_vector(15 downto 0) := "0000000000000010";
    --assert WE for 25 ns / 4 cycles
    ...
    --negate WE
    constant C_REST5 : std_logic_vector(15 downto 0) := "0000000000111010";
    constant C_REST6 : std_logic_vector(15 downto 0) := "0000000000111011";

  5. Run the script by:
    :'a,'b !perl scr_C_bin.pl


  6. The script is very simple and is shown below. Note how easy a decimal value is converted to a binary format.


  7. #!/bin/perl

    $cnt=1;
    while (<STDIN>) {
      chomp($_);
      if($_ =~ /(constant C_.*: std_logic_vector.15 downto 0. := ")([01]*)";/) {
        $a=$1;
        $b=sprintf("%016b", $cnt);
        print(" $a");
        print("$b");
        print("\";\n");
        $cnt++;
      }
      else {print("$_\n");}
    }#while

    To have a "walking one paatern", I used the following code:

    $cnt=0;
    ...
        #simple increment
        #$cnt++;
        #
        #walking one
        if($cnt == 0) { $cnt = 1; }
        else {
          $cnt *= 2;
        }

 


Also available on this project:


Home

name states automatically and select states encoding (one hot ...)








Search This Site


Feedback This Site




new pages on this site