【问题标题】:How do I return the value after checking for a condition?检查条件后如何返回值?
【发布时间】:2019-02-13 07:58:11
【问题描述】:

以下代码必须检查“e”值,以使 gcd(h,e)=1。哪里 1

module great(p,q,e,d);
input p,q;
output e,d;
reg e,d;
h=((p-1)*(q-1));
always 
begin
for(e=2;e<h;e=e+1)
begin
g1=gcd(h,e);
if(g1==1)
return e;

【问题讨论】:

  • 欢迎来到stackoverflow。请花几分钟阅读how to ask a question。它将帮助你得到这个问题的答案。一般来说,尽量让读者容易理解你在问什么。在这种情况下,一些缩进会有所帮助,以及您尝试了什么、它做了什么以及您希望它做什么。

标签: if-statement return verilog


【解决方案1】:

如果“返回值”是指吐出可以在另一个模块中使用的值,则可以使用该模块的输出作为“返回”值。但是即使忽略return e,我认为如果您尝试运行它,您的代码也不会工作,因为它太像一种编程语言。有几个主要问题:

  1. 你已经声明了output e,d,所以你不能声明两个同名的reg。你可能想要output reg e,d

  2. 您没有为hg1 声明类型。

  3. 你有一个用于efor 循环,但e 不能是01 以外的任何东西,因为你没有为它设置大小,所以默认情况下它只有1-有点长。即使它足够大,您可以将其增加到超过 1,默认情况下它也是 wire 类型,您不能直接将这种增量增加到 wire
  4. 我假设gcd 是您在其他地方制作的某个模块,但这不是您将模块互连在一起的方式。你不能把它当作一个函数来调用。您必须使用wirereg 将两个模块的输入和输出连接在一起,就像插入组件一样。

无论如何,这些对我来说是最突出的。我认为您正在编写您的 Verilog,就好像它是 Python 一样,这就是造成这些误解的原因。 Verilog 非常非常不同。

【讨论】:

    猜你喜欢
    • 2020-07-23
    • 2023-03-13
    • 2016-01-27
    • 2018-06-03
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多