Я написал следующий модуль для приема 12-битного потока ввода и запуска его по формуле Экспоненциальное скользящее среднее (EMA) . При моделировании программы создается впечатление, что мой вывод представляет собой 12-битный поток "все равно". Независимо от того, что мой ввод, он не реализован регистром вывода.
Я новичок в Verilog, так что я уверен, что здесь есть масса проблем, но я ожидал, по крайней мере, получить какой-то вывод. Почему происходит такое поведение и как я могу предотвратить его появление в будущем? В нижней части этого поста я привел скриншот моих результатов осциллограмм.
Мой модуль verilog:
`timescale 1ns / 1ps
module EMATesting ( input signed [11:0] signal_in,
output reg signed [11:0] signal_out,
input clock_in,
input reset,
input enable,
output reg [11:0] newEMA);
reg [11:0] prevEMA;
reg [11:0] y;
reg [11:0] temp;
integer count = 0;
integer t = 1;
integer one = 1;
integer alpha = 0.5;
always @(posedge clock_in) begin
if (reset) begin
count = 0;
end
else if (count < 64) begin
count = count + 1;
end
//set the output equal to the first value received
if (count == 1) begin
newEMA = signal_in;
end
//if not the first value, run through the formula
else begin
temp = newEMA;
prevEMA = temp;
newEMA = alpha * signal_in + (one-alpha) * prevEMA;
count = count + 1;
end
end
endmodule
Мой тестовый стенд:
`timescale 10ns / 1ns
module testbench_EMA;
reg signal_in;
reg clock_in, reset, enable;
wire [11:0] signal_out;
wire [11:0] newEMA;
initial begin
signal_in = 0; reset = 0; enable = 0;
clock_in = 0;
end
EMATesting DUT(signal_in, signal_out, clock_in, reset, enable, newEMA);
initial
begin
//test some values with timing intervals here
#100;
reset = 1;
#100;
reset = 0;
enable = 1;
#100;
//set signal_in to "1" repeating 12 times
signal_in = { 12 { 1'b1}};
#100;
reset = 1;
#100; //buffer to end simulation
$finish;
end
always
#5 clock_in = !clock_in;
endmodule
Результаты осциллограммы моего тестового стенда . Обратите внимание, что оба выходных регистра не дают значений.