当if(a)在Verilog中返回true时

时间:2018-05-06 23:28:31

标签: verilog

我是Verilog的新手,我被问到以下问题:

考虑a = reg[3:0],那么a可以包含哪些值if(a)将返回true? 我不知道从哪里开始,尝试编译一些示例,但都失败了syntax problem

2 个答案:

答案 0 :(得分:1)

撰写if (a !=0)与撰写a相同。由于if (a[0] != 0 | a[1] ! = 0 | a[2] != 0 | a[3] !=0)是一个4位变量,因此您可以将其扩展为x。因此任何位位置的1都使表达式成立。请注意,未知值z @Override public void handleMessage(Message msg) { super.handleMessage(msg); FirebaseUser user= FirebaseAuth.getInstance().getCurrentUser(); DatabaseReference ref= FirebaseDatabase.getInstance().getReference().child("users").child(user.getUid()).child("oj_goals"); ref.orderByChild("ojTag").addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { OjGoal goal= dataSnapshot.getValue(OjGoal.class); Log.d("inside onChildAdded",goal.getMe()); data.add(goal); } @Override public void onChildChanged(DataSnapshot dataSnapshot, String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot, String s) { } @Override public void onCancelled(DatabaseError databaseError) { } }); //FIXME: the below code continues to execute even if the Firebase-call has not yet completed // Intent intent= new Intent("com.example.sj.keymeasures.BAR_CHART_DATA_PREPARATION_FINISHED"); /** * https://stackoverflow.com/questions/43800772/does-variable-order-matter-while-parcel-read-write-operation-in-parcelable */ intent.putParcelableArrayListExtra("oj_goals",data); Log.d("[Handler]","sendingBroadcast with size "+data.size()); sendBroadcast(intent); stopSelf(msg.arg1); } 作为具有相等/不等运算符的操作数会导致未知并被视为false。但是一个未知的或者真实的是真实的。

答案 1 :(得分:0)

reg是用于声明变量类型的verilog关键字,您提供的表达式是非法 verilog表达式。您可以将a声明为4位注册,如下所示:

reg[3:0] a;

以上使a为4位向量。现在,verilog位可能有4种状态:01xz。因此,a的4位中的任何一位都可以处于任何这些状态。现在你有256种可能的组合。如果忽略xz个状态,则可以得到16个以小数表示的组合,为0到15.

true表示a中至少有一位是1。在所有其他情况下,它将是错误的。