【5】Verilog练习-相邻16点相加
我的学记|刘航宇的博客

【5】Verilog练习-相邻16点相加

刘航宇
3年前发布 /正在检测是否收录...
温馨提示:
本文最后更新于2022年05月25日,已超过1041天没有更新,若内容或图片失效,请留言反馈。

图片[1] - 【5】Verilog练习-相邻16点相加 - 我的学记|刘航宇的博客
图片[2] - 【5】Verilog练习-相邻16点相加 - 我的学记|刘航宇的博客
代码

//相邻16点相加
`timescale 1ns/10ps
module sigma_16p(
                    clk,
                    res,
                    data_in,
                    syn_in,
                    data_out,
                    syn_out
                    );
input                clk,res;
input[7:0]            data_in;//采样信号
input                syn_in;//采样时钟
output[11:0]        data_out;//累加结果输出
output                syn_out;//累加结果同步脉冲
reg                    syn_in_n1;//syn_in的反向延时
wire                syn_pulse;//采样时钟上升沿识别脉冲
assign                syn_pulse=syn_in&syn_in_n1;
reg[3:0]            con_syn;//采样时钟循环计数器
wire[7:0]            comp_8;//补码
wire[11:0]            d_12;//升位结果
assign                comp_8=data_in[7]?{data_in[7],~data_in[6:0]+1}:data_in;//补码运算
assign                d_12={comp_8[7],comp_8[7],comp_8[7],comp_8[7],comp_8};
reg[11:0]            sigma;//累加计算
reg[11:0]            data_out;
reg                    syn_out;
always@(posedge clk or negedge res)
if(~res)begin
    syn_in_n1<=0;con_syn<=0;sigma<=0;data_out<=0;syn_out<=0;
end
else begin
    syn_in_n1<=~syn_in;
    if(syn_pulse)begin
    con_syn<=con_syn+1;
    end
    if(syn_pulse)begin
        if(con_syn==15)begin
        sigma<=d_12;
        data_out<=sigma;
        syn_out<=1;
        end
        else begin
        sigma<=sigma+d_12;
        end
    end
    else begin
        syn_out<=0;
    end
end
endmodule
//-----testbench of sigma_16p---
module sigma_16p_tb;
reg                    clk,res;
reg[7:0]            data_in;
reg                    syn_in;
wire[11:0]            data_out;
wire                syn_out;
sigma_16p sigma_16p(
                    .clk(clk),
                    .res(res),
                    .data_in(data_in),
                    .syn_in(syn_in),
                    .data_out(data_out),
                    .syn_out(syn_out)
                    );
initial begin
                    clk<=0;res<=0;data_in=1;syn_in<=0;
            #17        res<=1;
            #50000    $stop;
end
always #5 clk<=~clk;
always #100 syn_in<=~syn_in;
endmodule

现象
图片[3] - 【5】Verilog练习-相邻16点相加 - 我的学记|刘航宇的博客

© 版权声明
THE END
喜欢就支持一下吧
点赞 1 分享 赞赏
评论 抢沙发
取消