gpt4 book ai didi

verilog - 处理 verilog 模块中无效或非法输入组合的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-02 15:45:39 24 4
gpt4 key购买 nike

当我为需要多个控制输入的较大项目编写模块时,处理无效或非法输入组合的最佳实践/标准是什么?

例如,我有一个队列,它具有三个控制信号 - EnqueueDequeueDelete。假设一个循环中只能执行其中一项操作。因此,一次只能断言一个输入信号。现在,当某个父模块同时驱动两个控制信号时,处理这种情况的正确方法是什么?

在我的项目中,我可以以任何我希望的方式处理它,并且我会小心避免它。但在公司范围内,有人可能会搞砸并不当使用它。预防这个问题的做法是什么?或者换句话说,我正在寻找类似于 verilog 中的 try-catch/exception 的东西。

最佳答案

这是一个断言有用的经典示例。我们不倾向于在我们的芯片中放入错误检查逻辑(除非我们正在设计一些安全关键的东西);相反,我们使用断言。 属性是关于您的设计的一个潜在事实(例如“一次只有一个输入信号被断言”)。 断言是属性应该为真的声明。

您可以使用正式工具或通过模拟来检查断言。就你而言,后者是有道理的。因此,您将实现合适的检查(断言),然后运行所有模拟并确保断言永远不会失败。

那么,如何实现断言呢?如何编码呢?你可以

i) 切换到 SystemVerilog。 SystemVerilog 有一个 assert 语句,对于基本断言很有用,并且 SystemVerilog 的一部分称为 SystemVerilog Assertions (SVA) ,这更强大。 Verilog 只是 SystemVerilog 的一个子集,但尽管如此,切换显然说起来容易做起来难 - 您可能需要更改公司政策或购买更昂贵的许可证或一些培训...

ii) 用其他语言编写断言(例如 SVA 或 PSL ,但用 Verilog 编写代码。同样,说起来容易做起来难 - 同样,您可能需要更改公司政策或购买更昂贵的许可证或一些培训。 .

iii) 使用OVL 。这是一个免费的、可下载的模块库,用于实现基本(而不是那么基本)的断言。有一个用 Verilog 编写的版本,因此不需要更改公司政策或许可证,但您必须花一些时间学习如何使用它们。

iv) 用 Verilog 编写断言。您可以将它们隐藏在生成语句中(如果必须的话,也可以隐藏在 ifdef 中),以使它们远离合成器,例如:

generate if (ASSERTIONS_ENABLED)
begin : ASSERT_ONLY_ONE_OF_Enqueue_Dequeue_Delete
always @(posedge clock) // it is nearly always better to check assertions synchronously
if (Enqueue + Dequeue + Delete > 2'b1)
$display("ASSERTION FAIL : ASSERT_ONLY_ONE_OF_Enqueue_Dequeue_Delete");
end
endgenerate

(SVA 和 PSL 的链接指向我公司的网站。但无论如何,这些都是 Google 搜索结果中的第一名。)

关于verilog - 处理 verilog 模块中无效或非法输入组合的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37536193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com