2014-07-12 96 views
0

我寫在的Quartus Verilog的東西,在我看來有些奇怪,但其實很簡單的Altera的Quartus和ModelSim

這段代碼遞增地址正確

module counter(
    input wire clock, 
    input wire reset, 
    output reg [4:0]address 
); 

initial 
begin 
    address = 5'b0 
end 

[email protected](posedge clock) 
begin 
    if(reset) 
    begin 
     address <= 5'b0; 
    end 
    else 
    begin 
     address <= address + 5'b00001; 
    end 
end 

endmodule 

對此,比特變化成爲無關緊要,當我開始輸出到其他東西0

module counter(
    input wire clock, 
    input wire reset, 
    output reg [4:0]address 
); 

initial 
begin 
    address = 5'b11101; 
end 

[email protected](posedge clock) 
begin 
    if(reset) 
    begin 
     address <= 5'b0; 
    end 
    else 
    begin 
     address <= address + 5'b00001; 
    end 
end 

endmodule 

有沒有人知道任何方式來解決這個問題?

+0

「的比特變化無所謂「不確定這是什麼意思?除了這個和「奇怪的東西」之外,問題中沒有提到任何問題。 – Morgan

回答

0

雖然很難確切地說出你在說什麼,但似乎你很好奇爲什麼改變初始塊中的起始值似乎對計數器的起始位置沒有影響。

看起來你很可能在你的測試平臺上執行了一個復位操作,所以當你看到address時,這個值總是從0開始(因爲初始塊設置被always塊中的復位所改變)。

0

這部分是可疑的對我說:

if(reset) 
begin 
    address <= 5'b0; 
end 

應該是:

if(reset) 
begin 
    address <= 5'b00000; 
end 

您可以嘗試使用此實現與加載和啓動信號:

module Counter(load,clk,start,data_in,data_out); 
    input load; 
    input clk; 
    input start; 
    input [5-1:0] data_in; 
    output [5-1:0] data_out; 
    reg [5-1:0] tmp; 
    initial 
    begin 
     tmp = 5'b0000; 
    end 
    always @ (posedge clk) 
     begin 
     if(~start) 
     begin 
      tmp <= 5'b0000; 
     end 
     else if(load) 
      tmp <= data_in; 
     else 
      tmp <= tmp + 1'b1; 
    end 
    assign data_out = tmp; 
endmodule