2015-09-26 127 views
0

回覆:編輯Verilog的GCD執行錯誤

我是能夠解決這一問題,並繼續前進,以模擬使用我寫的測試平臺波形,遺憾的是沒有從我的主函數波形如何產生。

我的測試平臺:

`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):Verilog HDL語言在gcd.v(85)語法錯誤文本附近 「ENDCASE」;期待 「結束」

或者

錯誤(10163):在gcd.v Verilog HDL語言錯誤(53):非法名 「lastend」 在表達式中使用
錯誤(10163):Verilog的在gcd.v HDL錯誤(66): 非法名「lastend」在表達

使用一個額外的末尾追加到代碼。

另外,我已經回溯了代碼,似乎已經發現所有代碼都以適當的結尾開始。

任何建議是非常有幫助的。

回答

1

這開始:

 comp: //status 2 
       begin 

不會出現有一個匹配的結束。

+0

非常感謝。解決之後不久,我嘗試通過modelsim驗證我的輸出,並且輸出似乎不反映在我的主程序中。例如,我分配了a = 12和b = 3,當我的主函數的reg和wire被添加到wave時,相應的波形不會彈出。編輯我的問題。 – jondoe

+0

rst同時在多個地方被驅動看起來很奇怪。 –