| #!/usr/bin/perl |
| |
| use Getopt::Long; |
| |
| use integer; |
| |
| $helpusage = "placeholder"; |
| |
| GetOptions ('total_int=s' => \$total_int)|| die("$helpusage"); |
| |
| $LEN=15; |
| |
| #printf("logic [2:0] mask;\n"); |
| |
| printf("// mask[3:0] = { 4'b1000 - 30b mask,4'b0100 - 31b mask, 4'b0010 - 28b mask, 4'b0001 - 32b mask }\n"); |
| printf("always_comb begin\n"); |
| printf(" case \(address[14:0]\)\n"); |
| printf(" 15'b011000000000000 : mask[3:0] = 4'b0100;\n"); |
| for ($i=1; $i<=$total_int; $i++) { |
| $j=hex("4000"); |
| printf(" 15'b%s : mask[3:0] = 4'b1000;\n",d2b($j+$i*4)); |
| } |
| for ($i=1; $i<=$total_int; $i++) { |
| $j=hex("2000"); |
| printf(" 15'b%s : mask[3:0] = 4'b0100;\n",d2b($j+$i*4)); |
| } |
| for ($i=1; $i<=$total_int; $i++) { |
| $j=hex("0"); |
| printf(" 15'b%s : mask[3:0] = 4'b0010;\n",d2b($j+$i*4)); |
| } |
| printf(" %-17s : mask[3:0] = 4'b0001;\n","default"); |
| printf(" endcase\n"); |
| printf("end\n"); |
| |
| |
| sub b2d { |
| my ($v) = @_; |
| |
| $v = oct("0b" . $v); |
| |
| return($v); |
| } |
| |
| sub d2b { |
| my ($v) = @_; |
| |
| my $repeat; |
| |
| $v = sprintf "%b",$v; |
| if (length($v)<$LEN) { |
| $repeat=$LEN-length($v); |
| $v="0"x$repeat.$v; |
| } |
| elsif (length($v)>$LEN) { |
| $v=substr($v,length($v)-$LEN,$LEN); |
| } |
| |
| return($v); |
| } |