当我们将 2 个值分配给同一个变量时会发生什么?

尚卡尔

我试图做一个简单的断言来检查两个值是否相等。有人可以解释当我将两个不同的值分配给同一个变量时的行为吗

logic src_sig ;
logic dest_sig;
logic alt_sig;

assign a = src_sig;
assign a = alt_sig;
assign b = dest_sig;

我的断言顺序是:

sequence check_seq(X,Y);
(X == Y);
endsequence

我的初始块是:

initial begin

#100 @ (posedge clk) begin
src_sig <= 1;
dest_sig <=1;
alt_sig <= 0;
end

#10 @ (posedge clk) begin
src_sig <=1;
dest_sig <=0;
alt_sig <= 0;
end

#10 @ (posedge clk) begin
src_sig <= 0;
dest_sig <= 0;
alt_sig <= 1;
end

#10 @ (posedge clk) begin
src_sig <= 0;
dest_sig <= 1;
alt_sig <= 1;
end

#30 $finish;
end

我期待第二个分配将覆盖第一个或者它会分配给src_sigalt_sig因此,它应该分别显示 2 次或 4 次违规。但我得到以下结果(3 次犯罪)。

"testbench.sv", 31: test.check_assert: started at 103ns failed at 103ns
    Offending '(a == b)'
"testbench.sv", 31: test.check_assert: started at 113ns failed at 113ns
    Offending '(a == b)'
"testbench.sv", 31: test.check_assert: started at 133ns failed at 133ns
    Offending '(a == b)'

请解释这里发生了什么?

编辑::完整代码

module test_gcc();
logic clk=0; 
logic src_sig,dest_sig,alt_sig;
assign a = src_sig;
assign a = alt_sig;
assign b = dest_sig;
initial begin 
clk = 0;
forever #1 clk=~clk;
end

sequence check_seq(X,Y);
(X == Y);
endsequence
property check_connection(M,N);
@(posedge clk)
($rose(M)||$rose(N)||$fell(M)||$fell(N)) |-> check_seq(M,N);
endproperty
check_assert : assert property (check_connection(a,b));
initial begin

#100 @ (posedge clk) begin
src_sig <= 1;
dest_sig <=1;
alt_sig <= 0;
end
#10 @ (posedge clk) begin
src_sig <=1;
dest_sig <=0;
alt_sig <= 0;
end

#10 @ (posedge clk) begin
src_sig <= 0;
dest_sig <= 0;
alt_sig <= 1;
end
#10 @ (posedge clk) begin
src_sig <= 0;
dest_sig <= 1;
alt_sig <= 1;
end
#30 $finish;
end
endmodule
马修·泰勒

a并且b是 1 位wires,因为您还没有声明它们。(在 Verilog/SV 中,除非您指定,否则default_nettype none未声明的对象是wires)。

如果您wire从多个地方驱动 a 则执行解析函数以评估wire.

在您的情况下,有两个驱动程序wire a- 两个assign语句。initial块确保两个assign语句始终驱动不同的值,因此线路上的解析值始终为1'bx的值wire a永远不会改变。

wire b仅由一个assign语句驱动initial块确保它的值在 101ns、111ns 和 131ns 发生变化。on 的值wire b在 121ns 时不会改变。

您已经编写了您的,property以便仅在发生更改时检查条件wire awire b

  property check_connection(M,N);
    @(posedge clk)
    ($rose(M)||$rose(N)||$fell(M)||$fell(N)) |-> check_seq(M,N);
  endproperty

wire a从不改变,wire b也不会在 121ns 改变,所以在 121ns 不检查条件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我们停止并启动ec2实例AWS时会发生什么

来自分类Dev

当我们git checkout一个提交时会发生什么

来自分类Dev

如果我将一个右值分配给一个类的指针成员会发生什么?

来自分类Dev

当我们想在同一个AWS EC2实例上部署两个网站时,哪种方法是最好的?

来自分类Dev

当我有两个指针指向同一个对象时会发生什么?

来自分类Dev

Swift3.2 - 如何将 2 个类分配给同一个视图控制器?

来自分类Dev

当我们使2个对象的哈希码指向一个地址时,为什么它是临时的?

来自分类Dev

当我们将参数传递给System.out.println()时会发生什么?

来自分类Dev

当我们将jar提交给风暴集群时会发生什么情况?

来自分类Dev

当我们将char转换为大于256的数字时会发生什么?

来自分类Dev

当我们在同一类中创建类的实例时会发生什么?

来自分类Dev

我们可以将2个浮点图放在同一行吗?

来自分类Dev

我们如何将一个系列分配给ChartArea?

来自分类Dev

我们如何将一个系列分配给ChartArea?

来自分类Dev

PHP:将两个键分配给一个值;使2个键具有同义定义

来自分类Dev

PHP:将两个键分配给一个值;使2个键具有同义定义

来自分类Dev

当我们说T1比T2具有更多的多态性时,我们是什么意思?

来自分类Dev

为什么当我将存储在一个变量中的对象分配给另一个变量时,当我更改一个变量时,这两个变量都会发生变化?

来自分类Dev

遍历2D列表,将列表中一行的每个值分配给一个变量,对每一行重复-python

来自分类Dev

C - 如何将多个值分配给哈希图中的同一个键?

来自分类Dev

当我们将移动设备的水平方向变为垂直方向时会发生什么?

来自分类Dev

当我们改变循环中的值时会发生什么?

来自分类Dev

当我为一个int分配一个大于INT_MAX的数字时会发生什么?

来自分类Dev

当我们导入一个jar到pyspark shell时后台会发生什么

来自分类Dev

使用 Jquery 将多个函数分配给同一个类/元素?

来自分类Dev

我们可以将 2 个措施合二为一吗?

来自分类Dev

当我们有一个红色区域时,为什么我们需要堆栈分配?

来自分类Dev

当我们有一个红色区域时,为什么我们需要堆栈分配?

来自分类Dev

在python中,当我们为变量分配新值时,旧变量会发生什么?

Related 相关文章

  1. 1

    当我们停止并启动ec2实例AWS时会发生什么

  2. 2

    当我们git checkout一个提交时会发生什么

  3. 3

    如果我将一个右值分配给一个类的指针成员会发生什么?

  4. 4

    当我们想在同一个AWS EC2实例上部署两个网站时,哪种方法是最好的?

  5. 5

    当我有两个指针指向同一个对象时会发生什么?

  6. 6

    Swift3.2 - 如何将 2 个类分配给同一个视图控制器?

  7. 7

    当我们使2个对象的哈希码指向一个地址时,为什么它是临时的?

  8. 8

    当我们将参数传递给System.out.println()时会发生什么?

  9. 9

    当我们将jar提交给风暴集群时会发生什么情况?

  10. 10

    当我们将char转换为大于256的数字时会发生什么?

  11. 11

    当我们在同一类中创建类的实例时会发生什么?

  12. 12

    我们可以将2个浮点图放在同一行吗?

  13. 13

    我们如何将一个系列分配给ChartArea?

  14. 14

    我们如何将一个系列分配给ChartArea?

  15. 15

    PHP:将两个键分配给一个值;使2个键具有同义定义

  16. 16

    PHP:将两个键分配给一个值;使2个键具有同义定义

  17. 17

    当我们说T1比T2具有更多的多态性时,我们是什么意思?

  18. 18

    为什么当我将存储在一个变量中的对象分配给另一个变量时,当我更改一个变量时,这两个变量都会发生变化?

  19. 19

    遍历2D列表,将列表中一行的每个值分配给一个变量,对每一行重复-python

  20. 20

    C - 如何将多个值分配给哈希图中的同一个键?

  21. 21

    当我们将移动设备的水平方向变为垂直方向时会发生什么?

  22. 22

    当我们改变循环中的值时会发生什么?

  23. 23

    当我为一个int分配一个大于INT_MAX的数字时会发生什么?

  24. 24

    当我们导入一个jar到pyspark shell时后台会发生什么

  25. 25

    使用 Jquery 将多个函数分配给同一个类/元素?

  26. 26

    我们可以将 2 个措施合二为一吗?

  27. 27

    当我们有一个红色区域时,为什么我们需要堆栈分配?

  28. 28

    当我们有一个红色区域时,为什么我们需要堆栈分配?

  29. 29

    在python中,当我们为变量分配新值时,旧变量会发生什么?

热门标签

归档