返回介绍

15.14.2 驱动值解析

发布于 2020-09-09 22:55:53 字数 753 浏览 1217 评论 0 收藏 0

当多于一个同步驱动在相同的仿真时间被应用到相同的时钟控制块输出(或inout)的时候,SystemVerilog会检查被驱动值的冲突。当检测到冲突驱动的时候会发布一个运行时错误,并且每一个发生冲突的位都被驱动成X(对一个两态端口会被驱动成0)。

例如:

clocking pe @(posedge clk);
    output nibble; // 四位输出
endclocking

pe.nibble <= 4'b0101;
pe.nibble <= 4'b0011;

无论nibble使一个reg还是一个wire,被驱动的值都是4'b0xx1。

当相同的变量是来自多个时钟控制块的输出的时候,最后一个驱动确定变量的值。这就使得一个单一模块能够通过使用一个不同的时钟控制块来建模每一个活跃沿来对多速率器件(例如一个DDR存储器)建模。例如:

reg j;

clocking pe @(posedge clk);
    output j;
endclocking

clocking ne @(negedge clk);
    output j;
endclocking

变量j是使用不同的时钟控制事件(posedge和negedge)的时钟控制块的输出。当被驱动的时候,变量j的取值应该是被这两个时钟控制块赋值的最近的值。

驱动一个线网(也就是通过不同的端口)的时钟控制块会引起线网被驱动成它的被解析的信号值。当一个时钟控制块输出对应于一个线网的时候,会产生一个线网的驱动器,它在更新的时候就好像被一个来自时钟控制块内部的寄存器连续无阻塞赋值一样。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文