2015-08-14 65 views
1

BitVecExpr的特定位這是我的Verilog聲明:值分配給在Z3

reg[2:0] a;   // Create register 'a' which is 3 bit. 
assign a[1] = 1'b1; // Assigning value to 1st bit of register 'a'. 

我要實現上述Z3的聲明。 對於使用BitVecExpr Verilog的語句的第一行:

BitVecExpr a = ctx.mkBVConst("a",3); 

我是一個面臨的問題而實施的Verilog聲明第二條線。 有誰知道如何在Z3中實現這個?

+0

@ChristophWintersteiger你認爲我們可以直接在Z3解決這個問題。 – Ajit

回答

1

使用Z3不能修改變量。實際上Z3並不把它稱爲變量,而是一個常量。

您需要創建一個與舊常數相關的新常量。例如,如果你想說y = x + 1,這將是

var y = ctx.MkBVAdd(x, 1); 

如果你想說x = x + 1你需要舊和新x引入一個新的名字:

var x2 = ctx.MkBVAdd(x1, 1); 
+0

我明白你的意思,但我的問題是我有多個任務的單個常量。例如:分配一個[1] = 1'b1;分配一個[0] = 1'b0;分配一個[3:2] = 2'b01;等等。我在考慮是否有任何直接解決這個問題的方法,比如我可以直接在Z3中爲任何特定位分配值。你認爲我們可以做到嗎? – Ajit

+0

賦值並不合理。你問Z3給你一個布爾公式的模型。您不能「分配」公式的某些部分。可能,您需要的是類似'b = replacebits(ctx,a)'的地方,其中'replacebits'代表諸如「MkExtract」或「MkConcat」之類的操作。 – usr