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 仿真结果

相关文章
|
存储 监控 Java
基于spring boot物流管理系统设计与实现
基于spring boot物流管理系统设计与实现
|
Web App开发 存储 监控
|
消息中间件 Web App开发 API
FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6
FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6
FreeRTOS介绍 和 将FreeRTOS移植到STM32F103C8T6
|
SQL Oracle 关系型数据库
Oracle19c静默部署文档
本文档详细介绍了如何在Linux环境下静默部署Oracle 19c数据库。内容涵盖系统基础配置、用户及目录创建、系统配置文件修改、数据库安装与配置、监听配置与启动,以及数据库的启动与关闭操作。此外,还提供了SQL*Plus的改进方法和Navicat远程连接Oracle的解决方案。通过步骤化的指导,帮助读者顺利完成Oracle 19c的安装与配置。文档适用于Oracle 21C及之前的版本,附带多张示意图,便于理解和操作
Oracle19c静默部署文档
|
人工智能 PyTorch 算法框架/工具
AI计算机视觉笔记二十二:基于 LeNet5 的手写数字识别及训练
本文介绍了使用PyTorch复现LeNet5模型并检测手写数字的过程。通过搭建PyTorch环境、安装相关库和下载MNIST数据集,实现了模型训练与测试。训练过程涉及创建虚拟环境、安装PyTorch及依赖库、准备数据集,并编写训练代码。最终模型在测试集上的准确率达到0.986,满足预期要求。此项目为后续在RK3568平台上部署模型奠定了基础。
|
缓存 UED 网络架构
网站404该怎么解决
网站404错误通常表示用户尝试访问的网页不存在或无法找到
2069 0
|
数据可视化 数据挖掘 API
matplotlib字体设置看这一篇就够了
matplotlib字体设置看这一篇就够了
784 3
|
算法 网络协议 新制造
在电子墨水屏标签领域,如何选择一款好的处理器?
电子墨水屏是近些年由台湾 eInk公司发展起来的一种超低功耗的数字显示技术,不同于传统的LCD,LED等主动发光的电子屏幕技术,墨水屏是一种被动式发光技术,这种屏幕仅在画面刷新过程中消耗很低的电流,在刷新完成之后屏幕完全不需要电力供应,可以实现零功耗。
|
Ubuntu Linux 网络安全
【VsCode远程开发】Windows SSH远程连接Linux服务器 - 无公网IP内网穿透(一)
【VsCode远程开发】Windows SSH远程连接Linux服务器 - 无公网IP内网穿透
737 0
|
机器学习/深度学习 资源调度 JavaScript
机器学习概念漂移检测方法(Aporia)
目前,有多种技术可用于机器学习检测概念漂移的方法。熟悉这些检测方法是为每个漂移和模型使用正确度量的关键。 在本文章中,回顾了四种类型的检测方法:统计、统计过程控制、基于时间窗口和上下文方法。