我正在尝试将一个分支添加到GitHub上的主分支,并将一个文件夹推送到该分支.
分支的文件夹结构如下 - SocialApp/SourceCode/DevTrunk/SocialApp,所有源代码文件都在最后一个文件夹中.
我使用以下Git命令:
git add *
git commit -m with the message
git push
Run Code Online (Sandbox Code Playgroud)
这只是将第一个文件夹"SocialApp"推送到GitHub并忽略文件夹内的文件夹SourceCode.我该如何解决?
在IEEE Std 1800-2012中,我们可以找到包的描述和这些信息:
类型,网络,变量,任务,函数,序列,属性和检查器可以在包中声明
我想知道,如果有任何特殊原因导致无法在包内定义接口?在我看来它可能是有用的,但显然标准的创建者不会同意.
以下两个属性有何不同?
property p1;
@(posedge clk) disable iff (Reset) b ##1 c;
endproperty
property p2;
@(posedge clk) (~Reset & b) ##1 c;
endproperty
assert property (p1);
assert property (p2);
Run Code Online (Sandbox Code Playgroud) 最近出现了一个问题,通常的隐含运算符(|->
)和implies
SystemVerilog中的运算符之间有什么区别。不幸的是我找不到一个明确的答案。但是,我收集了以下信息:
第16.12.7节隐含和iff属性:
property_expr1 implies property_expr2
仅当property_expr1的值为false或property_expr2的值为true时,此形式的属性的值为true。
§F.3.4.3.2 派生布尔运算符:
p1 implies p2 ≡ (not p1 or p2)
§F.3.4.3.4 派生的条件运算符:
(if(b) P) ≡ (b |-> P)
但是,LRM并未真正指出实际的区别是什么。我假设在错误的先行情况下(成功与空前成功),它们的评估有所不同,但是我无法找到此假设的任何来源或证据。此外,我知道implies
操作员与OneSpin等正式验证工具结合使用非常普遍。
有人可以帮我吗?
PS:似乎在下一本书中对此问题有一个答案:SystemVerilog断言手册,第三版。但是155美元对我来说太过分了,只是为了得到这个问题的答案:)
我有一个verilog模块的串行输出,我想使用system-verilog进行测试。
给定正确的串行输入“ SI”(其值为8'h9A),称为“ SO”的输出将输出类似于8'hC6的输出。
是否有一种无需明确描述每个信号的简单方法来编码/解码串行IO?
例如:
assert property @(posedge clk) $rose(EN) |-> ##[1:3] SI ##1 !SI[*2] ##1 SI[*2] ##1 !SI ##1 SI ##1 !SI
##[1:3] SO[*2] ##1 !SO[*3] ##1 SO[*2] ##1 !SO;
Run Code Online (Sandbox Code Playgroud)
它看起来像一团混乱,几乎不可读。我非常想写
8'h9A ##[1:3] 8'hC6
Run Code Online (Sandbox Code Playgroud)
但显然这是行不通的。任何建议或示例都将受到欢迎。提前致谢。
testing verification verilog system-verilog system-verilog-assertions
我对等待语句的确切含义感到困惑。
在这种情况下会发生什么:
forever begin
wait (vif.xn_valid == 1'b1);
@(posedge vif.clk);
end
Run Code Online (Sandbox Code Playgroud)
wait语句是否阻塞?是个
@(posedge vif.clk)
Run Code Online (Sandbox Code Playgroud)
每次在循环内执行,无论等待表达式的计算如何?
在这种情况下:
forever begin
wait(vif.cyc_tic == 1'b1) @(posedge vif.clk) #0 fact_log2_samp_t = vif.fact_log2_samp;
end
Run Code Online (Sandbox Code Playgroud)
#0 fact_log2_samp_t = vif.fact_log2_samp;
仅当 wait 表达式的计算结果为 true 时才执行wait() 之后的代码吗?
在SystemVerilog中有没有办法分析打包结构并确定它的总体大小?
typedef struct packed unsigned {
logic [15:0] field_1;
logic [7:0] field_2;
logic [15:0] field_3;
logic [4:0] field_4;
} my_struct;
Run Code Online (Sandbox Code Playgroud)
例如,我希望能够以程序化的方式确定上述结构的大小为45.
我查看了IEEE 1800-2012 SystemVerilog语言参考手册的"聚合数据类型"部分(第7章),但没有看到这样的内容.
这可能吗?如果是这样,怎么样?
这是一个规范:如果信号a
被置位,那么它必须被置位直到信号b
被置位然后它应该在下一个时钟边沿取消置位.我正在阅读LRM的16.9.9(以及http://www.testbench.in/AS_06_SEQUENCES.html)和我理解的方式,上面提到的规范可以写成
property a2b_notA;
@(posedge clk) ($rose (a) ##0 (a throughout b)) |=> (~a);
endproperty
a_a2b_notA: assert property (a2b_notA);
Run Code Online (Sandbox Code Playgroud)
然而,这在启动后第二个时钟边沿立即失败,我无法弄清楚原因.
我试图在系统 verilog 中随机化 3 个不同的变量,但以循环方式。我的意思是,我有以下 3 个变量
rand int a;
rand int b;
rand int c;
constraint c_a{
a inside {1,2};
}
constraint c_b{
b inside {1,2,3,4,5,6};
}
constraint c_c{
c inside {1,2,3}
}
Run Code Online (Sandbox Code Playgroud)
有了上述约束,所有 3 个变量 (2x6x3) 总共有 36 种组合。
但如果我们运行 36 次循环,如下所示:
repeat(36) begin
this.randomize(a,b,c);
$display("%d %d %d", a,b,c);
end
Run Code Online (Sandbox Code Playgroud)
我们不会击中所有可能的组合,因为某些组合可能会重复。因此,我希望找到一种方法,通过精确运行循环 36 次来实现所有这些组合。
我编写了一种强力方法来实现此目的,方法是声明另一个 rand 变量来表示每个组合并在其上使用 randc,如下所示:
int a;
int b;
int c;
randc int k;
constraint c_k{
k inside {[1:36]};
}
repeat(36) begin
this.randomize(k);
// randomizing variable …
Run Code Online (Sandbox Code Playgroud) 据我所知,系统verilog没有很好的内置正则表达式支持。
如何在 systemVerilog 中检查 srting 是否与以下正则表达式匹配:“\d+(ns|ps|us)”
我想检查变量的当前值是否为“1”,则变量的先前值应该为“0”。我在系统 Verilog 断言中使用 $past。这里我检查cal_frame_mode是否=1,那么它是cal_frame_mode=0的先前值。我的代码如下。但是,我看到断言失败。当我检查波形时,它的行为正确。第一次检查后 2 个时钟后断言标记。如何在仅检查一个时钟周期后停止此断言?
property p_NOP_2_RX_CAL;
@(posedge clk)
(cal_frame_mode==3'b001) |-> ##2 $past(cal_frame_mode)==3'b000;
endproperty
assert_nop2cal : assert property(p_NOP_2_RX_CAL);
Run Code Online (Sandbox Code Playgroud) system-verilog ×10
verilog ×3
assertions ×1
constraints ×1
git ×1
github ×1
implication ×1
regex ×1
testing ×1
verification ×1