typedef - 系统 Verilog 条件类型定义
问题描述
有没有办法根据参数值有条件地在两种类型之间进行选择?
typedef struct packed {
logic a;
} my_type_1_t;
typedef struct packed {
logic [1:0] a;
} my_type_2_t;
parameter type type_t = my_type_1_t;
if (MY_PARAM == 1) begin
typedef my_type_1_t type_t;
do something...
end else begin
typedef my_type_2_t type_t;
do the same something as above with different struct...
end
type_t my_signal;
如您所见,我需要在else
子句中执行与子句中相同的操作if
,但在不同的结构上。这对我来说似乎是多余的,我很好奇是否有办法避免重复。
解决方案
模仿您想要的行为的唯一方法是使用参数化模块。
这是一个简单的例子:
typedef struct {
logic a, b;
} type1_t;
typedef struct {
logic [1:0] a1, b1;
} type2_t;
module top(input logic clk);
pmod#(.T(type1_t)) inst1(clk);
pmod#(.T(type2_t)) inst2(clk);
endmodule
module pmod#(type T=int) (input logic clk);
logic [1:0] a, b;
T t;
if ($typename(T) == "type1_t") begin
always @(posedge clk) begin
a = t.a;
b = t.b;
end
end
else if ($typename(T) == "type2_t") begin
always @(posedge clk) begin
a = t.a1;
b = t.b1;
end
end
// do something with a and b
endmodule
推荐阅读
- ios - 无法将任何子视图添加到 scrollView
- charts - 创建 Google Chart 分组条重叠堆叠条
- ruby-on-rails - fe_sendauth:未提供密码 (PG::ConnectionBad) Docker 容器
- bash - 在bash中重复赋值
- c - 文件操作。一个 c 程序,将使用 fork() execvp() ,wait/waitpid() 获取单个命令行参数
- python - Python:如何将列表添加到现有的 txt 文件中,并且必须在文本文件中包含逗号?
- android - 为什么图像在 TabLayout 的中心?
- python - 在python中的值和键对中添加值列表
- python - 单击按钮时如何从另一个 Python 文件中读取 QLineEdit 值的值
- c# - 使用 c# 使用 IHttpActionResult 将请求类型作为 XML 发送