【问题标题】:Verilog GCD execution errorsVerilog GCD 执行错误
【发布时间】:2015-09-26 21:37:55
【问题描述】:

回复:编辑

我能够解决这个问题并继续使用我编写的测试台来模拟波形,不幸的是,我的主要功能没有生成波形。

我的测试平台:

`timescale 1ns/1ps
module gcd_test();

reg [15:0] a,b;
reg clk, rst;

gcd uut(a,b,clk,rst);

initial begin

rst = 1;
a = 16'b0000000000001100;
b = 16'b0000000000000011;

end

initial begin
rst = 0;
end

always begin
#50
clk = 0;
#50
clk = 1;
end


endmodule

我的输出波形是几个 zzzz(好像我的代码已经厌倦了执行)。我检查了测试台的输出,它很好,但对于我的主要功能却不是这样。输出波不是应有的。我的测试台或将值从我的测试台解析到主服务器时再次出错了吗?

TIA。

++++++++++++++++++++++++++++++++++++++++++++++++

我正在尝试使用 Verilog HDL 执行 GCD 函数,并且我正在使用一个简单的算法来执行此操作。但是,我在执行过程中不断遇到一些错误。

我的代码:

module gcd(
input [15:0] a,
input [15:0] b,
input clk,
input rst);

reg [15:0] ra;
reg [15:0] rb;
reg [15:0] gcd;
reg done;
reg [2:0] state;
parameter start = 2'h1;
parameter check = 2'h2;
parameter comp = 2'h3;
parameter lastend = 2'h4;


always @ (posedge clk or posedge rst)
if (rst)
begin
    ra <= 16'h0;
    ra <= 16'h0;
    gcd <= 16'h0;
    state <= start;
end

else begin
    case(state)
        start: //status 0
                begin
                    ra <= a;
                    rb <= b;
                    state <= check;
                end
        check:  //Status 1
                begin
                    if ((ra == 16'h0) || (ra == 16'h0))
                    begin
                        state <= lastend;
                    end
                    else begin
                        state <= comp;
                    end
                end
        comp: //status 2
                begin
                    if(ra > rb) //Compare ra and rb
                    begin
                        ra = ra - rb;
                        if((ra < 16'h0) || (rb < 16'h0)) //Compare ra and rb and if either has become 0
                        begin
                            done = 1'h0;
                            state <= lastend;
                        end
                        else begin
                            state <= comp;
                            gcd <= ra;
                        end
                    end
                    else if (rb > ra) //Compare ra and rb
                    begin
                        rb = rb - ra;
                        if((ra < 16'h0) || (rb < 16'h0))//Compare ra and rb and if either has become 0
                        begin
                            done <= 1'h0;
                            state <= lastend;
                        end
                        else begin
                            state <= comp;
                            gcd <= ra;
                        end
                    end
                    else if(ra == rb) //Finally gcd found ra == rb
                        begin
                            gcd <= ra;
                            done <= 1'h0;
                            state <= start;
                        end
        lastend: //status 3
                        begin
                            gcd <= 16'h0;
                            done <= 1'h0;
                        end

    endcase
end
endmodule                       

错误 (10170): 文本附近 gcd.v(85) 处的 Verilog HDL 语法错误 “尾箱”;期待“结束”

或者

错误 (10163):gcd.v(53) 处的 Verilog HDL 错误:非法名称“lastend” 用于表达式
错误 (10163):gcd.v(66) 处的 Verilog HDL 错误: 表达式中使用了非法名称“lastend”

在代码后面附加了一个额外的结尾。

另外,我回溯了代码,似乎发现一切都以适当的结尾开始。

任何建议都非常有帮助。

【问题讨论】:

    标签: algorithm verilog fpga greatest-common-divisor


    【解决方案1】:

    开始:

            comp: //status 2
                    begin
    

    似乎没有匹配的结尾。

    【讨论】:

    • 非常感谢。解决后不久,我尝试通过modelsim验证我的输出,并且输出似乎没有反映在我的主程序中。例如,我分配了 a=12 和 b=3,当我的主要功能中的 reg 和电线“添加到波形”时,相应的波形不会弹出。编辑我的问题。
    • 同时在多个地方驱动 rst 看起来很奇怪。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    相关资源
    最近更新 更多