2017-01-27 11 views
1

테스트 목적으로 Verilog에서 매 클럭주기마다 단일 비트 난수를 생성하려고합니다. 나는 이것을 testbench 모듈에서하고있다. 다음은 코드입니다. Verilog의 단일 비트 난수 생성기

module tb; 

// Inputs 
reg clk; 
reg in; 

// Outputs 
wire x; 

// Instantiate the Unit Under Test (UUT) 
single_bit uut (
    .clk(clk), 
    .in(in), 
    .x(x) 
); 

integer seed=1; 
initial 
begin 
    clk=0; 
    forever 
    #5 clk=!clk; 
     in= $random(seed); 
end 

endmodule 

그러나 시뮬레이션 후

, 나는 seed 1의 상수 값을 얻고있다 및 in는 X가 있습니다. 도움을 주시면 감사하겠습니다.

답변

2

들여 쓰기가 잘못되었습니다. 여기에 코드를 구문 분석하는 방법이다 : 당신이 당신의 forever 루프의 끝에 도달하지 않기 때문에

initial begin 
    clk=0; 
    forever #5 clk=!clk; 
    in= $random(seed); 
end 

코드는 in에 할당 도달하지 않았다. inreg으로 선언 했으므로 값을 in으로 할당하지 않으면 기본값 인 x가 유지됩니다.

in에 대한 지정은 forever 루프 내에 있어야합니다. 그러면 모든 클럭 에지에서 에 대해 0과 1의 임의의 스트림이 생성됩니다.

initial begin 
    clk=0; 
    forever begin 
     #5 clk=!clk; 
     in = $random(seed); 
    end 
end 
+1

감사합니다. 정말 도움이되었습니다. 자, 나는 결코 다시는이 실수를하지 않을 것입니다. –

+1

반갑습니다. 그것은 쉬운 실수입니다. 나는 코드를 들여 쓰는 방법에 대해 매우 엄격하게하려고 노력한다. 여분의 시간은 일반적으로 이러한 일반적인 오류를 피하는 데 도움이됩니다. – toolic