2017-04-05 2 views
0

나는 이미 어려움을 겪고 있으며 간단하고 유용한 해결책을 찾을 수 없습니다.Verilog에서 +1, -1의 삼각파 신호

I는 16 비트

signal

크기 삼각형 신호를 시뮬레이션 값 1과 0에 랜덤 잡음을 부가하고자 -1. 노이즈가있는 신호는 원래의 노이즈와 1을 초과하지 않으며 노이즈가있는 신호의 이전 값과 다를 수 없다는 점이 중요합니다. 예를 들어, 그 방법으로 값 싶습니다

ORIGINAL SIGNAL : 11,111 22,222 33,333 44,444 55,555 ...

NOISED SIGNAL : 12,321 12,332 23,434 34,345 45,665 ... I가 신호를 시뮬레이션

을 주요 초점은 이제이 원본 신호에 잡음을 추가하기 때문에 0과 30766 사이의 값입니다. 이 코드는 최대 값 1의 차이를 제한하는 조건을 제거했기 때문에 제대로 작동합니다.

이 신호는 테스트 벤치에 사용됩니다.

reg [15:0] SIGNAL_i; 
reg [15:0] SIGNAL_ii; 
reg [15:0] SIGNAL_noise_i; 
reg [15:0] SIGNAL_noise_reg; //za hranjenje zasumljenega signala 
int RANDOM_noise_i; 
int COUNT_end; 
int COUNT; 

initial SIGNAL_i=1; 
initial COUNT_end=0; 
initial COUNT=3'd4; 
initial SIGNAL_ii=0; 
initial SIGNAL_noise_i=1; 
initial SIGNAL_noise_reg=0; 
initial RANDOM_noise_i=1; 

initial CLK = 1; 

always #5 CLK = ~CLK; 

always #10  
begin 
SIGNAL_noise_reg <= SIGNAL_noise_i; 
RANDOM_noise_i = $signed($urandom_range(0,2))-1; //random noise generation 

//upcount 
if ((SIGNAL_i<16'd30766) && (SIGNAL_ii<SIGNAL_i)) //32765 
    begin 
     begin 
     if (COUNT_end==COUNT) 
      begin 
      assign SIGNAL_noise_i=SIGNAL_i + (RANDOM_noise_i); 
      SIGNAL_i=SIGNAL_i + 1; 
      SIGNAL_ii=SIGNAL_ii + 1; 
      COUNT_end=0; 
      COUNT_end=0; 
      end 
     else 
      begin 
      assign SIGNAL_noise_i=SIGNAL_i + (RANDOM_noise_i); 
      COUNT_end= COUNT_end + 1; 
      end 
     end 
    end 


//counter on zero 
else if (SIGNAL_i == 0) 
    begin 
    SIGNAL_i = 1; 
    SIGNAL_ii = 0; 
    SIGNAL_noise_i = SIGNAL_i + RANDOM_noise_i; 
    end 

//down count 
    else 
     begin 
     if (COUNT_end==COUNT) 
      begin 
      assign SIGNAL_noise_i=SIGNAL_i + (RANDOM_noise_i); 
      SIGNAL_i=SIGNAL_i - 1; 
      SIGNAL_ii=SIGNAL_ii + 1; 
      COUNT_end=0; 
      COUNT_end=0; 
      end 
     else 
      begin 
      assign SIGNAL_noise_i=SIGNAL_i + (RANDOM_noise_i); 
      COUNT_end= COUNT_end + 1; 
      end 
     end 
    end 
end 

정말 감사드립니다. 감사합니다.

+0

가능한 복제 [하여 Verilog에의 거친 임의의 신호를 잘하지를 얻는 방법?] (http://stackoverflow.com/questions/43197205/how-to-get-the-a-coarse- 랜덤 - 신호 - 더 - verilog - 좋지 않아) –

+0

난 +1.0과 -1 값으로 무작위 순서를 생성하는 방법입니다 귀하의 질문은 생각하십니까? 어떤 유형의 배포를 원했습니까? – Morgan

+0

저는 Triangle Waveform을 가지고 싶습니다. 0에서 65,534까지 그리고 다시 0으로 돌아가고 계속됩니다. 각 값은 4 번 반복됩니다. 원래의 신호 : 11111 22222 33333 44444 55555 ... NOISED SIGNAL이이 successfuly 완료되면 나는 내 질문에 예를 주어진대로이 값에 노이즈를 추가 할 12321 12332 23434 34345 45665 ... 하나의 시뮬레이션을 위해 이런 종류의 잡음 신호를 생성하고 싶습니다. – surfer113

답변

0

내가 원하는 신호를 받았지만 확실하게 구현할 수있는 더 좋은 방법이 있습니다. 나는 그것을 약간 단순화했다.

always #10  
    begin 
    SIGNAL_noise_reg <= SIGNAL_noise_i; 
    RANDOM_noise_i = $signed($urandom_range(0,2))-1; 

    if ((SIGNAL_i<16'd30766) && (SIGNAL_ii<SIGNAL_i)) //32765 
    begin 

     if(COUNT_end==COUNT-1) 
     begin 
     assign SIGNAL_noise_i=SIGNAL_i-1; 
     SIGNAL_i=SIGNAL_i + 1; 
     SIGNAL_ii=SIGNAL_ii + 1; 
     COUNT_end=0; 
     end 

     else if (COUNT_end == 0) 
     begin 
     assign SIGNAL_noise_i=SIGNAL_i -1; 
     COUNT_end= COUNT_end + 1; 
     end 

     else 
     begin 
     if (SIGNAL_i + RANDOM_noise_i - SIGNAL_noise_i > 1) 
     begin 
      assign SIGNAL_noise_i=SIGNAL_i; 
      COUNT_end= COUNT_end + 1; 
     end 
     else 
     begin  
      assign SIGNAL_noise_i=SIGNAL_i + RANDOM_noise_i; 
      COUNT_end= COUNT_end + 1; 
     end 
     end 
    end 

    else if (SIGNAL_i == 0) 
    begin 
     SIGNAL_i = 1; 
     SIGNAL_ii = 0; 
     SIGNAL_noise_i = SIGNAL_i + RANDOM_noise_i; 
    end 

    else  
    begin 

    if(COUNT_end==COUNT-1) 
    begin 
     assign SIGNAL_noise_i=SIGNAL_i+1; 
     SIGNAL_i=SIGNAL_i - 1; 
     SIGNAL_ii=SIGNAL_ii + 1; 
     COUNT_end=0; 
    end 

    else if (COUNT_end == COUNT-2) 
    begin 
     assign SIGNAL_noise_i=SIGNAL_i; 
     COUNT_end= COUNT_end + 1; 
    end 

    else 
    begin 
     if (SIGNAL_i + RANDOM_noise_i - SIGNAL_noise_i > 1) 
     begin 
     assign SIGNAL_noise_i=SIGNAL_i; 
     COUNT_end= COUNT_end + 1; 
     end 
     else 
     begin  
     assign SIGNAL_noise_i=SIGNAL_i + RANDOM_noise_i; 
     COUNT_end= COUNT_end + 1; 
     end 
    end 
    end 
    end 
관련 문제