spi 回环
///tx 极性0 (sclk信号线空闲时为低电平)
/// 相位0 (在sclk信号线第一个跳变沿进行采样)
`timescale 1ns / 1ps//两个从机 8'd01 8'd02
module top(input clk ,input rst_n,input [7:0] addr ,input valid,input [15:0]data ,output reg mosi ,output reg [1:0]cs , //相当于是有2个从机 引脚约束的话是有2个output reg sclk );
parameter CLK_DIV=100;
parameter IDEL = 2'b01;
parameter BUSY = 2'b10;
parameter cong1= 2'b01;
parameter cong2= 2'b10;
reg [1:0] state;
reg fin ;
reg d ;
reg [10:0]cunt1;
reg [9:0] cunt ;
reg [4:0] cunt_b;
//将valid信号延长
always @(posedge clk or negedge rst_n) beginif(state==IDEL)beginif(valid==1)d<=1;elsed<=d;endelsed<=0;
end
always @(posedge clk or negedge rst_n) beginif(state==IDEL)beginif(d==1)cunt1<=cunt1+1;elsecunt1<=cunt1;endelsecunt1<=0;
end
//状态的转移
always @(posedge clk ) beginif(!rst_n)state<=IDEL;else if(state==IDEL&&cunt1==200)state<=BUSY;else if(state==BUSY&&fin==1)state<=IDEL;elsestate<=state;
end
//产生一个计数器对时钟周期计数
always @(posedge clk ) beginif(state==IDEL)cunt<=0;else beginif(cunt==CLK_DIV-1)cunt<=0;elsecunt<=cunt+1;end
end
//对sclk计数
always @(posedge clk ) beginif(state==IDEL)cunt_b<=0;else beginif(cunt==CLK_DIV-1)cunt_b<=cunt_b+1;elsecunt_b<=cunt_b;end
end
//sclk的产生
always @(posedge clk ) beginif(state==IDEL)sclk<=0;else if(fin==1)sclk<=0;else beginif(cunt<CLK_DIV/2)sclk<=1;elsesclk<=0;end
end//fin产生
always @(posedge clk) beginif(cunt==CLK_DIV-1&&cunt_b==15)fin<=1;elsefin<=0;
end
//cs的产生
always @(posedge clk ) beginif(addr==8'd01)cs<=2'b01;else if(addr==8'd02) //(state==BUSY||d==1)这个条件也可以不要 相当于只要选中一直拉高cs<=2'b10;elsecs<=0;
end
//对mosi的输出
always @(posedge clk ) beginif(state==IDEL)mosi<=0;else case (cunt_b)0:mosi <=data[0] ;1:mosi <=data[1] ;2:mosi <=data[2] ; 3:mosi <=data[3] ;4:mosi <=data[4] ;5:mosi <=data[5] ;6:mosi <=data[6] ;7:mosi <=data[7] ;8:mosi <=data[8] ;9:mosi <=data[9] ;10:mosi<=data[10] ; 11:mosi<=data[11] ;12:mosi<=data[12] ;13:mosi<=data[13] ;14:mosi<=data[14] ;15:mosi<=data[15] ;default:mosi<=0; endcase
end
endmodule///rx
`timescale 1ns / 1ps
module rx_spi(input clk ,input rst_n,input mosi ,input sclk ,input cs , //一位宽 例化的时候比如这个是从机连线就是cs[1]output reg [15:0]data ,output valid );
reg [1:0] sclk_t;
reg [7:0] cunt_b;//对sclk_t缓存
always @(posedge clk or negedge rst_n) beginif(cs==1)sclk_t<={sclk_t[0],sclk};elsesclk_t<=2'b00;
end
//对2'b10 这个下降沿计数
always @(posedge clk ) beginif(!rst_n)cunt_b<=0;else if(cs==1&&sclk_t==2'b10)cunt_b<=cunt_b+1;elsecunt_b<=cunt_b;
end
//valid的产生
assign valid=(cs==1&&cunt_b==15);
//data的补充
always @(posedge clk ) beginif(cs==1) beginif(sclk_t==2'b10)case (cunt_b)0:data[0]<=mosi; 1:data[1]<=mosi;2:data[2]<=mosi;3:data[3]<=mosi;4:data[4]<=mosi;5:data[5]<=mosi;6:data[6]<=mosi;7:data[7]<=mosi;8:data[8]<=mosi;9:data[9]<=mosi;10:data[10]<=mosi;11:data[11]<=mosi;12:data[12]<=mosi;13:data[13]<=mosi;14:data[14]<=mosi;15:data[15]<=mosi;default: data=data;endcaseelse data<=data;endelsedata<=0;
end
endmodule
//tb仿真激励文件
`timescale 1ns / 1ps
module tb();
reg clk ;///
reg rst_n;///
reg [7:0] addr ;///
reg valid;///
reg [15:0] data ;///
wire mosi ;
wire [1:0] cs ;
wire sclk ;
initial beginclk=1 ;rst_n<=0 ;#100rst_n<=1 ;#100addr<=8'd02;valid<=1;data<=16'h1234;#20valid<=0;
endalways #10 clk=~clk ;
top u_top(/*input */.clk (clk ),/*input */.rst_n(rst_n),/*input [7:0] */.addr (addr ),/*input */.valid(valid),/*input [15:0]*/.data (data ),/*output reg */.mosi (mosi ),/*output reg [1:0]*/.cs (cs ),/*output reg */.sclk (sclk ));
rx_spi u_rx1(/*input */.clk (clk ),/*input */.rst_n(rst_n),/*input */.mosi (mosi ),/*input */.sclk (sclk ),/*input */.cs (cs[1]), //一位宽 例化的时候比如这个是从机连线就是cs[1]/*output [7:0]*/.data ( ),/*output */.valid( ) );
endmodule
仿真波形图
采样跳变沿笔记
相关文章:

spi 回环
///tx 极性0 (sclk信号线空闲时为低电平) /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …...

数据库审计工具--Yearning 3.1.9普民的使用指南
1 页面登录 登录地址:18000 (不要勾选LDAP) 2 修改用户密码 3 DML/DDL工单申请及审批 工单申请 根据需要选择【DML/DDL/查询】中的一种进行工单申请 填写工单信息提交SQL检测报错修改sql语句重新进行SQL检测,如检测失败可以进行SQL美化后…...
JAVA接口代码示例
public class VehicleExample {// 定义接口public interface Vehicle {void start(); // 启动车辆void stop(); // 停止车辆void status();// 检查车辆状态}public interface InnerVehicleExample {void student();}// 实现接口的类:Carpublic static class Car imp…...
【Android】Proxyman 抓 HTTP 数据包
前言 抓包(Packet Capture)是指在网络通信中截取、分析数据包的过程。 抓包通常用于网络调试、性能优化、安全分析等工作,可以帮助开发者或运维人员查看网络请求的详细内容,包括请求的URL、请求头、响应状态、数据内容等信息。 …...

基于Java Springboot活力健身馆管理系统
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…...
Excel SUMIFS
SUMIFS 是 Excel 中一个非常强大的函数,用于根据多个条件对数值区域进行求和。它是 SUMIF 函数的升级版,能够处理多个条件,使得数据分析变得更加精确和方便。 SUMIFS 函数的语法 excel 复制代码 SUMIFS(sum_range, criteria_range1, criteri…...
复制Qt项目后常见问题解决
前言 很多时候因为我们不想在原有的重要代码上作修改,常常将代码复制一份。今天讨论的就是代码复制后,复制的代码运行不正常或出错的问题。 第一个问题:图片等资源文件运行时加载失败 当我将程序运行起来后,我发现有些图片没有显…...
C#-WPF 常见类型转换方法(持续更新)
目录 一、普通类型转换 1、Convert类 2、Parse(转String) 3、TryParse(转String) 4、ToString(转String) 5、int转double 6、自定义类型的显示/隐式转换 二、byte[]转ImageSource 方法一 方法二 一、普通类型转换 1、Convert类 提供了一种安全的方式来执行类型转换&…...

Path does not exist: file:/D:/pythonProject/spark/main/datas/input/u.data
出现标题中的错误原因可能是: 1.文件路径书写错误; 2.文件本身不存在。 从图中可以看出,数据源文件是存在的,但是读取不到文件,说明代码中的文件路径写错了,从报错的结果可以看出,python在D:/…...

物联网——UNIX时间戳、BKP备份寄存器、RTC时钟
RTC时钟 Unix时间戳 UTC/GMT 时间戳转换 时间戳转换 BKP简介 RTC框图 RTC基本结构 硬件供电电路 RTC操作注意事项 接线图(读写备份寄存器和实时时钟)...

力扣 LeetCode 94. 二叉树的中序遍历(Day6:二叉树)
解题思路: 方法一:递归(左中右) class Solution {List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {recur(root);return res;}public void recur(TreeNode root…...
删除缓存之后,浏览器显示登录新设备
小小记录一下问题,清c盘正好就遇到了【答案AI生成】 清除c盘缓存,浏览器所有页面都需要重新登录,并在登录之后显示登录了新设备是为什么,是因为鉴权更新了就算新设备吗? 回答 清除C盘缓存后,浏览器所有页…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04目录1. Alopex: A Computational Framework for Enabling On-Device Function Calls with LLMs摘要:研究背景&…...

Stable diffusion详细讲解
🌺系列文章推荐🌺 扩散模型系列文章正在持续的更新,更新节奏如下,先更新SD模型讲解,再更新相关的微调方法文章,敬请期待!!!(本文及其之前的文章均已更新&…...

软件工程期末复习-用例建模
1、为什么需要用例建模 2、用例建模的表示 3、一个例子,ATM用例图 4、什么是用例? 5、用例包含的软件需求 6、参与者的定义 7、交互<->关联 8、用例建模的步骤 9、确定参与者 10、参与者检查项 11、MINILibrary...

【Golang】——Gin 框架中的表单处理与数据绑定
在 Web 应用开发中,表单是用户与服务器交互的重要手段。Gin 框架对表单处理提供了高效便捷的支持,包括数据绑定、验证等功能。在本篇博客中,我们将详细介绍如何使用 Gin 框架处理表单数据,涵盖基础操作与进阶技巧,帮助…...
hive-内部表外部表-详细介绍
1、表类型介绍 内部表: 表面来看,我们建的所有的表,默认都是内部表,内部表又叫做管理表,它的位置也很固定/user/hive/warehouse下面。 外部表: 创建的时候需要加关键字external 修饰,而且&a…...

Windows系统 ElasticSearch,分词器、Kibana安装
目录 1.wins安装ElasticSearch1.下载es安装包2.下载分词器3.注意事项4.学会看报错日志 2.将 elasticsearch 以服务的方式安装安装ES解压到根盘符下,如C或E盘等,因为 E:\Program Files文件夹下的都是默认的只读权限,所以换到没有只读权限&…...

黑马智数Day10
项目背景说明 后台管理部分使用的技术栈是Vue2,前台可视化部分使用的技术栈是Vue3 前台可视化项目不是独立存在,而是和后台管理项目共享同一个登录页面 微前端的好处 微前端是一种前端架构模式,它将大型单体应用程序分解为小的、松散耦合的…...

网络传输:网卡、IP、网关、子网掩码、MAC、ARP、路由器、NAT、交换机
目录 网卡IP网络地址主机地址子网子网掩码网关默认网关 MACARPARP抓包分析 路由器NATNAPT 交换机 网卡 网卡(Network Interface Card,简称NIC),也称网络适配器。 OSI模型: 1、网卡工作在OSI模型的最后两层,物理层和数据链路层。物…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
ArcPy扩展模块的使用(3)
管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...