即時編碼和合成模塊「分頻器」在FPGA中。輸入A,B被認爲產生輸出div,它等於A div B. Ive用測試臺模塊測試了我的代碼,並且它正常工作。但是,當我將它合成到我的fpga中時,代碼的某些部分不能按預期工作。 介紹代碼,然後我會解釋什麼失敗。在Verilog中的數字0-9
module divider(A,B,clk,reset,div,temp);
input [3:0]A,B;
input clk,reset;
output [3:0]div;
output [3:0]temp;
reg [3:0]temp,div_result;
reg [2:0] counter;
[email protected](A,B)
begin
//temp=4'd0;
counter=3'd1;
end
always @ (posedge clk or posedge reset)
if (reset) counter=1;
else
begin
if (B==4'd1) div_result=A;
else if (B==4'd0) div_result=4'b1111;
else if (A<B) div_result=0;
else if (A==B) div_result=1;
else if (A>B)
begin
temp=A-counter*B;
if (temp>=B) counter=counter+3'd1;
else begin
div_result=counter;
end
end
end
assign div=div_result;
endmodule
module test();
reg [3:0] A,B;
reg clk,reset;
wire [3:0]div;
wire [2:0] temp;
divider kappa(A,B,clk,reset,div,temp);
initial
begin
#0 A=4'd8; B=4'd2; clk=0; reset=1;
#1 reset=0;
#50 B=4'd1;
#50 B=4'd3;
#50 B=4'd4;
#50 B=4'd5;
#50 B=4'd8;
#50 B=4'd9;
end
always #5 clk=~clk;
endmodule
結果出現,因爲它應該在幾乎所有情況下,除了當在div需要被計數,並且是大於1即7 DIV 7個工作正常,8格5個正常工作,6 DIV 0正常工作但8 div 4不是。既不是9格2等他們都產生輸出0.
我已經創建了很多模塊,工作正常。出於某種原因,儘管我使用clk來計算B可以「適合」到A的次數(因爲A> B,B「適合」至少一次,在A中,所以計數器被設置爲1.如果A-1 * B> = B,它再次合適,所以counter = 2等)。這個邏輯是由clk脈衝產生的。
你能幫我弄清楚這個問題嗎?
我注意到有些東西可能無助,但應該糾正。在'test'模塊中,您將3位寬度'wire [2:0] temp;'傳遞給4位寬度'output [3:0] temp;'在'divider'模塊中。 –