gpt4 book ai didi

verilog - 如何在 Verilog 中的多个文件之间共享常量?

转载 作者:行者123 更新时间:2023-12-05 00:49:40 25 4
gpt4 key购买 nike

我在 Verilog 中使用了一个简单的 UART,它作为 ASCII 值的一些定义的一部分。例如:

parameter ASCII_a  = 8'h61;
parameter ASCII_b = 8'h62;
parameter ASCII_c = 8'h63;
parameter ASCII_d = 8'h64;
parameter ASCII_e = 8'h65;
parameter ASCII_f = 8'h66;

等等。我试图找到最好的方法来创建一次这些参数,然后在多个文件中访问它们。当您可以创建一个包并将该包包含在您喜欢的位置时,我已经习惯了 VHDL。我知道 Verilog 可以使用 include 指令,但是我相信我需要用 ifdefs 将它包围。

我只想创建一个 SystemVerilog 包,但我不想处理供应商工具之间的综合兼容性问题。 (我知道 Microsemi 有一个奇怪的东西,你可以在其中包含 SV 文件,但它们需要以 .v 结尾)。

对于长期从事 Verilog 编码的人来说,这方面的首选方法是什么?

最佳答案

我希望我可以说 SystemVerilog 包将是理想的选择,但像您一样,我发现与声称符合 SystemVerilog 的综合和形式验证工具存在兼容性问题。

取而代之的是,我看到了两种常用的方法:

1) 全局 `define 语句,来源一次(或由使用它们的每个文件无偿来源):

`define ASCII_a 8'h61

我确实推荐这种方法,因为存在名称冲突的风险,即不同的 IP 模块使用相同的参数名称来表示不同的值。在这种情况下,参数的有效值取决于编译顺序,这在大多数情况下不是您想要的。

2) 参数包含文件,通常具有不同的扩展名(例如 .vh.vinc),以防止它们在 `include 语句之外被意外编译。例如:

my_params.vh:

localparam ASCII_a = 8'h61;
...

my_module.v:

`include "my_params.vh"

一些设计人员用 ifdef 包装他们的 params 文件,这是一个很好的做法,在 IP includes 多个文件并且这些文件依次include 的情况下使用参数文件。

`ifndef _my_params_h
`define _my_params_h
localparam ASCII_a = 8'h61;
...
`endif

关于verilog - 如何在 Verilog 中的多个文件之间共享常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38960947/

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