我在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;
Run Code Online (Sandbox Code Playgroud)
等。我试图找到最好的方法来创建这些参数一次,然后在多个文件中访问它们。当您可以创建一个程序包并在需要的地方包含该程序包时,我就习惯了VHDL。我知道Verilog可以使用该include指令,但是我相信我需要将其括起来ifdefs。
我只想创建一个SystemVerilog程序包,但我不想处理供应商工具之间的综合兼容性问题。(我知道Microsemi有点奇怪,您可以在其中包含SV文件,但是它们必须以.v结尾)。
对于您的长期Verilog编码人员,首选的方法是什么?
我希望我可以说SystemVerilog软件包将是理想的选择,但是像您一样,我发现声称符合SystemVerilog的综合和正式验证工具存在兼容性问题。
取而代之的是,我看到了两种常用的方法:
1)全局`define语句,仅获得一次(或免费地由使用它们的每个文件提供):
`define ASCII_a 8'h61
Run Code Online (Sandbox Code Playgroud)
我不建议使用这种方法,因为存在名称冲突的风险,即不同的IP模块使用相同的参数名称表示不同的值。在这种情况下,参数的有效值取决于编译顺序,这在大多数情况下不是您想要的。
2)参数包括文件,通常与不同的扩展名(例如.vh,.vinc),以防止它们被意外地编制外的`包含语句。例如:
my_params.vh:
localparam ASCII_a = 8'h61;
...
Run Code Online (Sandbox Code Playgroud)
my_module.v:
`include "my_params.vh"
Run Code Online (Sandbox Code Playgroud)
一些设计人员使用来包装其params文件ifdef,这是在IP includes多个文件和那些文件又依次include是参数文件的情况下使用的好习惯。
`ifndef _my_params_h
`define _my_params_h
localparam ASCII_a = 8'h61;
...
`endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2008 次 |
| 最近记录: |