verilog_边学边练习(6) 相邻点累加(时序逻辑电路)

简介: 1 相邻点累加1.1 代码实现1.2 仿真结果

1 相邻点累加

1.1 代码实现

//2020-6-30 安静到无声
//相邻16点相加
`timescale 1ns/10ps
module sigma_16p (
                                        clk,
                                        res,
                                        data_in,
                                        syn_in,
                                        data_out,
                                        syn_out
);
    input                               clk                        ;
    input                               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_pluse                  ;//采样时钟上升沿延时
assign syn_pluse = syn_in_n1 & syn_in;
reg                    [   3:0]         con_syn                    ;
wire                   [   7:0]         comp_8                     ;//补码
wire                   [  11:0]         d_12                       ;//升位结果
reg                    [  11:0]         data_out                   ;
reg                                     syn_out                    ;
assign comp_8 = data_in[7] ? {data_in[7], ~ data_in[7-1: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                      ;//累加计算
always @(posedge clk or negedge res) begin
    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_pluse) begin
            con_syn <= con_syn + 1;
        end
        if (syn_pluse) begin
            if (con_syn == 15) begin
                sigma <= d_12;
                data_out <= sigma;
                syn_out <= 1;
            end else begin
                sigma <= d_12 + sigma;  
            end
        end else begin
            syn_out <= 0;
        end
    end
end
endmodule
// testbench of sigma_16p_tb
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;
            #25000 $stop;
end
always #5 clk<=~clk;
always #100 syn_in<=~syn_in;//采样时钟
endmodule

1.2 仿真结果

相关文章
|
存储 芯片
基本逻辑电路的介绍
基本逻辑电路:从门电路到集成电路 逻辑电路是数字电路中的一种,它用于处理和操作数字信号。逻辑电路可以根据输入信号的不同组合,产生不同的输出信号。在数字系统中,逻辑电路扮演着重要的角色,它们可以实现计算、控制、存储等功能。本文将介绍逻辑电路的基本原理和发展历程。 一、门电路:逻辑电路的基础 门电路是逻辑电路的基础,它是由逻辑门电路组成的。逻辑门电路是一种基本的数字电路元件,它可以实现与门、或门、非门等逻辑运算。门电路的输入和输出都是数字信号,它们通过逻辑门电路的布尔运算产生不同的输出信号。门电路可以根据不同的逻辑运算实现不同的功能,如逻辑运算、比较运算、计数运算等。 二、组合逻辑电路:多
162 0
|
存储 数据采集
时序逻辑电路的应用及其作用
一、什么时序逻辑电路 时序逻辑电路是一种电子电路,用于处理和存储时序信息。它通过使用时钟信号来控制电路的行为,以实现特定的功能。 时序逻辑电路通常由触发器和组合逻辑电路组成。触发器是一种存储器件,可以存储和传递电信号。组合逻辑电路则根据输入信号的组合产生输出信号。 时序逻辑电路的行为是根据时钟信号的变化来确定的。时钟信号是一个周期性的信号,用于同步电路的操作。在每个时钟周期中,电路根据输入信号和当前状态来计算输出信号,并在时钟信号的上升沿或下降沿时更新状态。 时序逻辑电路可以用于实现各种功能,如计数器、状态机、时序控制器等。它在数字系统中起着重要的作用,用于处理时序信息和控制电路的行为。 二、
678 0
|
7月前
|
芯片
组合逻辑电路之半加器
组合逻辑电路之半加器
208 0
组合逻辑电路之半加器
|
7月前
|
测试技术
组合逻辑电路
组合逻辑电路
117 0
|
算法 异构计算
m基于FPGA的costas环载波同步verilog实现,包含testbench,可以修改频偏大小
m基于FPGA的costas环载波同步verilog实现,包含testbench,可以修改频偏大小
245 0
|
芯片
模电练习题-多路信号发生器(题目)
模电练习题-多路信号发生器(题目)
466 1
模电练习题-多路信号发生器(题目)
【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真(二分频,四分频,六分频,八分频,偶数分频及特殊占空比)
【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真(二分频,四分频,六分频,八分频,偶数分频及特殊占空比)
【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真(二分频,四分频,六分频,八分频,偶数分频及特殊占空比)
|
编解码 算法 异构计算
m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
254 0
MATLAB连续时间信号的实现和时域基本运算(八)
MATLAB连续时间信号的实现和时域基本运算(八)
191 0
【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)
【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)
【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)