【问题标题】:How do I create and use a Task in Verilog如何在 Verilog 中创建和使用任务
【发布时间】:2020-10-15 16:01:11
【问题描述】:

我最近一直在玩 Arduino MKR Vidor 4000,但遇到了一个小问题。 我希望能够重用代码(就像使用 C++ 中的函数一样)并且将定义的变量定义为代码片段,因此它们不会交互。我在 Verilog 中遇到过 Tasks,这些似乎是正确的做法。

问题是,我无法让 Quartus 编译它。它只是报错:

错误 (12006):节点实例“comb_6”实例化未定义的实体 “测试”。确保正确指定所需的库路径、定义指定实体或更改实例化。如果该实体代表英特尔 FPGA 或第三方 IP,则为 IP 生成综合文件。

这是我的代码:

task automatic test(input [3:0] in, output [3:0] out);
   reg [3:0] temp;
   assign temp[0] = in[0];
   assign out[0] = temp[0];
endtask
test(bMKR_D[4:1], bMKR_D[8:5]);

这包含在定义可用 MKR Vidor 引脚的文件中。

编辑:这是一个最小的可重现示例......我认为

module MKRVIDOR4000_top
(
  // Input definitions available for the MKR Vidor 4000
);
// Other signal declarations

// My code
task automatic test(input [3:0] in, output [3:0] out);
    reg [3:0] temp;
    assign temp[0] = in[0];
    assign out[0] = temp[0];
endtask
test(bMKR_D[4:1], bMKR_D[8:5]);

endmodule

根据我从 cmets 收集到的信息,我不应该在任务中使用任何 assigns。而且我也应该只从always/begin-end/initial 等内部调用任务。 如果我不能以这种方式使用任务,我应该怎么做才能创建可重用的代码以制作可以合成的基本逻辑门?例如注册银行

【问题讨论】:

  • module 中使用assign,或者在function 中使用begin-end。简单的function可以合成,浏览设计结构时不添加层次结构。
  • 看起来错误消息告诉您正在尝试从顺序块(taskinitialalwaysfinal)外部调用任务。但是,如果没有minimal reproducible example,则无法分辨。请包括一个。正如其他人所说,不要在任务中使用assign 语句。这是合法的,但意味着一些奇怪的东西,我认为已被弃用。
  • @toolic 我正在尝试使用 Verilog 和 MKR Vidor 复制基本逻辑门以创建寄存器组。
  • @MatthewTaylor 就是这种情况,我查看了我的文件包含在哪里,它们在任何always 等块之外。我将编辑以包含它包含的文件,但它很长,因为它具有可用于 MKR Vidor 的所有引脚定义。我应该在这里添加它吗?还是放在粘贴箱之类的地方?
  • A minimal reproducible example 不是您的全部代码。这个想法是您只包含相关代码。如果我对您的错误原因是正确的,那么 IP 是无关紧要的。我可以用 9 行代码重现您的错误 - edaplayground.com/x/ea72

标签: arduino verilog quartus


【解决方案1】:

我已将我希望能够重用的代码放入一个模块中,现在它可以正常工作了! 我不确定这是否是我应该做的,所以如果有人有更好的方法来做到这一点,那么我会全力以赴!

我已经有效地做到了:

module test (input [3:0] in, output [3:0] out);
reg [3:0] temp;
assign temp[0] = in[0];
assign out[0] = temp[0];
endmodule

module main;
reg [7:0] bMKR_D;
test test1 (bMKR_D[4:1], bMKR_D[8:5]);
endmodule

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多