#!/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); }