回覆:編輯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」在表達
使用一個額外的末尾追加到代碼。
另外,我已經回溯了代碼,似乎已經發現所有代碼都以適當的結尾開始。
任何建議是非常有幫助的。
非常感謝。解決之後不久,我嘗試通過modelsim驗證我的輸出,並且輸出似乎不反映在我的主程序中。例如,我分配了a = 12和b = 3,當我的主函數的reg和wire被添加到wave時,相應的波形不會彈出。編輯我的問題。 – jondoe
rst同時在多個地方被驅動看起來很奇怪。 –