2014-07-12 3 views
0

내가는 Quartus에서 Verilog에 뭔가를 쓰고, 나에게 뭔가 이상한 등장하지만 아주 간단하고 실제로알테라의 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에서 시작됩니다 (항상 블록의 재설정으로 초기 블록 설정이 변경되기 때문에).

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 
관련 문제