1 package edu.berkeley.fleet.util;
2 import edu.berkeley.fleet.api.*;
3 import edu.berkeley.fleet.*;
8 public final long mask;
10 public final long valmask;
11 public final int valmaskmin;
14 public String verilog(String var) {
15 return "(("+var+" & "+mask+")=="+val+")";
17 public String verilogVal(String var) {
18 return "(("+var+" & "+valmask+") >> "+valmaskmin+")";
21 public long getval(long in) {
22 return (in & valmask) >>> valmaskmin;
24 public long setval(long in, long targ) {
25 if (((targ << valmaskmin) & ~valmask) != 0) throw new RuntimeException("setval() with argument bigger than mask field");
26 return (in & ~valmask) | ((targ << valmaskmin) & valmask);
28 public long set(long in) {
29 return (in & ~mask) | val;
31 public boolean get(long in) {
32 return (in & mask) == val;
35 public Mask(String s) {
39 int valmaskmin = Integer.MAX_VALUE;
40 for(int i=0; i<s.length(); i++) {
41 char c = s.charAt(s.length()-1-i);
44 case '0': mask |= (1<<i); val |= (0<<i); break;
45 case '1': mask |= (1<<i); val |= (1<<i); break;
46 case 'v': valmask |= (1<<i); valmaskmin = Math.min(valmaskmin,i); break;
47 default: throw new Error(""+c);
52 this.valmask = valmask;
53 this.valmaskmin = valmaskmin;