If statement 检查条件后如何返回值?

If statement 检查条件后如何返回值?,if-statement,return,verilog,If Statement,Return,Verilog,以下代码必须检查“e”值,以便gcd(h,e)=1。其中1 great模块(p,q,e,d); 输入p,q; 输出e,d; 注册e,d; h=((p-1)*(q-1)); 总是 开始 对于(e=2;e如果“返回值”是指吐出一个可在另一个模块中使用的值,则将使用此模块的输出作为“返回值”值。但是即使忽略返回e的,我认为如果您尝试运行它,代码也不会工作,因为它太像一种编程语言。有几个主要错误: 您已经声明了output e,d,因此不能声明两个同名的reg。您可能需要output reg e,d 您

以下代码必须检查“e”值,以便gcd(h,e)=1。其中1
great模块(p,q,e,d);
输入p,q;
输出e,d;
注册e,d;
h=((p-1)*(q-1));
总是
开始
对于(e=2;e如果“返回值”是指吐出一个可在另一个模块中使用的值,则将使用此模块的输出作为“返回值”值。但是即使忽略返回e的
,我认为如果您尝试运行它,代码也不会工作,因为它太像一种编程语言。有几个主要错误:

  • 您已经声明了
    output e,d
    ,因此不能声明两个同名的
    reg
    。您可能需要
    output reg e,d

  • 您没有为
    h
    g1
    声明类型

  • 你有一个
    for
    for
    e
    循环,但是
    e
    不能是
    0
    1
    以外的任何东西,因为你没有为它设置大小,所以默认情况下它只有1位长。即使它足够大,你可以将它增加到
    1
    ,默认情况下它是一个
    wire
    类型,你也不能使用它将这些增量直接添加到
    导线上
  • 我假设
    gcd
    是您在其他地方制作的某个模块,但这不是将模块互连在一起的方式。您不能像调用函数一样调用它。您必须使用
    wire
    reg
    将两个模块的输入和输出连接在一起,就像插入组件一样

  • 无论如何,这些都是最让我印象深刻的。我认为你把你的Verilog当作Python来编写,这就是造成这些误解的原因。Verilog非常非常不同。

    欢迎来到stackoverflow。请花几分钟时间阅读。它将帮助你找到这个问题的答案。一般来说,试着让用户更容易理解在这种情况下,一些缩进将有助于读者理解您的要求,以及您尝试了什么,它做了什么,以及您希望它做什么。
    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;