Два выхода, оставшиеся в покое - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь написать код, в котором мне нужно реализовать стандартное отклонение для «DNN», используемого в моем коде. Кажется, все работает до вывода «roll», однако из «roll» он должен получить суммирование «рулона». Он не суммирует и, следовательно, я ничего не получаю после этого расчета. Я приложил свой код и испытательный стенд:

Код:

////SDSD calculation

`timescale 1s/1ns
module SDSD_mk2(In,clk,RMSSD,Avg,roll,dum,DNN,sumD,summ);
input [31:0] In;
input clk;
output reg [63:0] sumD;
reg [31:0] DIN;
output reg [31:0] DNN;
reg [31:0] MS;
output reg [31:0] RMSSD;
output reg [31:0] Avg;
output reg [31:0] roll;
output reg [31:0] dum;
reg [31:0] rollD;
output reg [31:0] summ;
reg [31:0] counter;


function [15:0] sqrt;
    input [31:0] num;
    reg [31:0] a;
    reg [15:0] q;
    reg [17:0] left,right,r;
    integer i;
begin
    a = num;
    q = 0;
    i = 0;
    left = 0;
    right = 0;
    r = 0;
    for(i=0;i<16;i=i+1) begin
        right = {q,r[17],1'b1};
        left = {r[15:0],a[31:30]};
        a = {a[29:0],2'b00};
        if (r[17] == 1)
            r = left + right;
        else
            r = left - right;
        q = {q[14:0],!r[17]};
    end
    sqrt = q;
end
endfunction


initial begin
        counter = 0;
          sumD <= 0;
        DIN = 0;
        DNN = 0;
        MS = 0;
        RMSSD = 0;
          Avg = 0;
        roll = 0;
          dum = 0;
          summ <= 0;
          rollD = 0;
end

always @(posedge clk) begin
        DIN<=In;
        DNN<=DIN;
        if(In>DIN)
                DNN<=In-DIN;
        else
                DNN<=DIN-In;
        sumD <= sumD + (DNN);
          dum <= DNN - (sumD/counter);
          roll <= dum*dum;
          rollD <= roll;
          #0.001 summ <= summ + (rollD);
//        roll <= roll + (dum*dum); 
        counter = counter + 1;

        if(counter>100)begin
                Avg<= summ/counter;
                //#0.001 SDSD<= sqrt(Avg);
                counter = 0;
                sumD<=0;
        end
end

endmodule

Испытательный стенд

//SDSD TB
`timescale 1ms/1ns
module SDSD_mk2_TB;
reg [31:0] In;
reg [31:0] counter;
reg clk;
wire [31:0] RMSSD;
wire [31:0] Avg;
wire [31:0] roll;
wire [31:0] dum;
wire [31:0] DNN;
wire [31:0] summ;
wire [63:0] sumD;

//integer i;

SDSD_mk2 SD0(.In(In),.clk(clk),.RMSSD(RMSSD),.Avg(Avg),.roll(roll),.dum(dum),.DNN(DNN),.sumD(sumD),.summ(summ));

initial begin
    In =0;
    clk =0;
    counter = 0;
end

always #0.5 clk=~clk;

always@ (posedge clk) begin

        if(counter < 50)
            In = In+5;
        else if(counter < 100)
            In = In+10;
        else if(counter < 150)
            In = In+15;
        else if(counter < 200)
            In = In+20;
        else
            In = In+25; 

        counter = counter + 1;
end


endmodule

Выходы: Первое изображение для выходов Второе изображение для выходов

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...