BPSK модулятор

Будем пополнять список блоков, написанных на VerilogA, в этот раз мне понадобился bpsk модулятор.

Ну и сразу к делу:


`include "constants.vams"</span>
`include "disciplines.vams"

module SimpleModulator(in, out);
input in;
output out;

electrical in;
electrical out;

parameter real Amplitude = 0.2;   //Амплитуда нашего сигнала
parameter real Freq = 1G;         //Несущая частота
parameter real vth = 0.6;         //Порог срабатывания 0->1
parameter real offset = 0;        //Постоянная составляющая
real phase;                       //фаза выходного сигнала

analog begin

@(initial_step) phase = 0;

@(cross(V(in) - vth, +1))
begin                       //По каждому возрастающему фронту
 phase = 3.14159265359;     //фаза 180 градусов = 1
end

@(cross(V(in) - vth, -1))
begin                       //По каждому спадающему фронту
phase = 0;                  //фаза 0 градусов = 0</span>
end
V(out) <+ Amplitude*sin(2*3.14159265359*Freq*$abstime + phase)+offset;

end

endmodule

Теперь нужно наш модулятор проверить, для этого из библиотеки ahdlLib я подтянул генератор рандомных чисел и задал скорость данных.

Результат работы на изображении из заголовка, похоже на правду 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.