2014-06-09 3 views
-1

입력 클럭을 2로 나누려고합니다. 즉 출력 클록이 입력 클럭의 절반 주파수 여야합니다.Verilog에서 두 개의 시계 나누기

module clk_div(in_clk, out_clk, rst); 
    input in_clk; 
    input rst; 
    output out_clk; 
    reg out_clk; 

always @(posedge in_clk) begin 
    if (!rst) begin 
    out_clk <= 1'b0; 
    end 
    else 
    out_clk <= ~out_clk; 
end 
endmodule 

테스트 벤치는 출력 파형 만 입력 클럭이 발생되는 것을 보여준다

module dd; 
    // Inputs 
    reg clk_in; 
    reg reset; 

    // Outputs 
    wire clk_out; 

    // Instantiate the Unit Under Test (UUT) 
    clk_div uut (
    .clk_in(clk_in), 
    .reset(reset), 
    .clk_out(clk_out) 
); 

    always #10 clk_in =~clk_in ; 

    initial begin 
    // Initialize Inputs 
    clk_in = 0; 
    reset = 0; 
    #100; 
    reset = 1; 
    end 
endmodule 

이다. 무슨 일이 있어도 출력 클록 파형은 오지 않을 것입니다. 이 코드가 2 로의 클럭 분할에 맞습니까?

답변

0

문제는 비트 부정 연산자 (~)가 아닌 논리 부정 연산자 (!)를 사용해야한다는 것입니다. 정보 here을 참조하십시오.

시계를 2로 나누는 완전한 검증 된 예는 see here입니다.

+5

를 사용하여, 2 개 개의 통신 사업자가 동일하다. – toolic

2

인스턴스의 포트 이름을 변경해야합니다. 인스턴스를 다음으로 변경하십시오.

clk_div uut (
    .in_clk(clk_in), 
    .rst(reset), 
    .out_clk(clk_out) 
); 

이 수정 프로그램으로 2로 나누기를 얻습니다.

코드가 2 명의 시뮬레이터에서 컴파일 오류가 발생했습니다. 그것은 정말로 당신을 위해 컴파일 되었습니까?

0

제가 단일 비트 신호에 대한 파라미터를 변경하고, 원하는 출력을 얻을 dividers.Just 시계 다음 코드 ...

module clk_div(
       clk, 
       rst, 
       count); 

parameter count_width=27; 
parameter count_max=25000000; 

output [count_width-1:0] count; 
reg [count_width-1:0] count; 
input clk,rst; 


initial 
count<=0; 

[email protected](posedge clk) 
if(rst) 
begin 
    count=0; 
end 


else 
begin 
if (count<count_max-1) 
begin 
    count<=count+1; 
end 


else if (count==count_max) 
begin 
    count <=~count; 
end 


else if (count>count_max) 
begin 
    count<=0; 
end 
end 
endmodule 
+1

나는이 질문에 답을하지 않았기 때문에 이것이 적절한 대답이라고 생각하지 않는다. 당신이 코드를 맹목적으로 복사하려고 할 때 누구에게도 도움이되지 않는다. – Morgan

관련 문제