参考TLC5615基于verilog HDL实现SPI时序

下面参考TLC5615 DAC芯片,用verilog HDL实现了SPI时序,便于大家参考,下面将代码整理如下,具体请参考注释。

module spi_test(
input           wire        sclk,//系统时钟,50MHz
input           wire        rstn,//系统复位output       reg     spi_cs,//SPI片选,低电平有效
output      reg     spi_clk,//1MHz//SPI时钟
output      reg     spi_d//SPI数据
);parameter SCLKCNT=5'd24;//分频系数,50M->1M
parameter NEGFLAGCNT=4'd9;//发送10比特,计数值reg      [4:0]           sclk_cnt;//
reg         [3:0]           neg_cnt;
reg         neg_flag;reg            spi_cs_reg;
reg         spi_clk_reg;
reg         [9:0]    shift_buf;//移位寄存器,用于SPI数据输出
reg         end_flag;//仅发送一个10位的数据//产生分频计数
always@(posedge sclk or negedge rstn)
beginif(rstn==1'b0)sclk_cnt<=5'd0;else if(sclk_cnt==SCLKCNT)sclk_cnt<=5'd0;elsesclk_cnt<=sclk_cnt+1'b1;
end//产生SPI 1MHz时钟信号
always@(posedge sclk or negedge rstn)
beginif(rstn==1'b0)spi_clk_reg<=1'b0;else if(sclk_cnt==SCLKCNT)spi_clk_reg<=~spi_clk_reg;
end//产生SPI 1MHz时钟的下降沿标识信号
always@(posedge sclk or negedge rstn)
beginif(rstn==1'b0)neg_flag<=1'b0;else if(sclk_cnt==SCLKCNT&&spi_clk_reg==1'b1)neg_flag<=1'b1;elseneg_flag<=1'b0;
end//产生下降沿标识信号的计数信号
always@(posedge sclk or negedge rstn)
beginif(rstn==1'b0)neg_cnt<=4'd0;else if(neg_flag==1'b1&&neg_cnt==NEGFLAGCNT)neg_cnt<=4'd0;else if(neg_flag==1'b1)neg_cnt<=neg_cnt+1'b1;
end//产生SPI的片选信号
always@(posedge sclk or negedge rstn)
beginif(rstn==1'b0)beginspi_cs_reg<=1'b1;end_flag<=1'b0;endelse if(sclk_cnt==5'd1&&end_flag==1'b0)beginspi_cs_reg<=1'b0;endelse if(neg_flag==1'b1&&neg_cnt==NEGFLAGCNT)beginspi_cs_reg<=1'b1;end_flag<=1'b1;end
end//产生SPI的数据移位信号
always@(posedge sclk or negedge rstn)
beginif(rstn==1'b0)shift_buf<=10'b10_1010_0101;else if(spi_cs_reg==1'b0&&neg_flag==1'b1)shift_buf<={shift_buf[8:0],1'b0};//采用移位的方式输出SPI数据
end//所有SPI信号同步控制
always@(posedge sclk or negedge rstn)
beginif(rstn==1'b0)spi_cs<=1'b1;else if(spi_cs_reg==1'b0)spi_cs<=1'b0;elsespi_cs<=1'b1;
endalways@(posedge sclk or negedge rstn)
beginif(rstn==1'b0)spi_clk<=1'b0;else if(spi_cs_reg==1'b0)spi_clk<=spi_clk_reg;elsespi_clk<=1'b0;
endalways@(posedge sclk or negedge rstn)
beginif(rstn==1'b0)spi_d<=1'b0;else if(spi_cs_reg==1'b0)spi_d<=shift_buf[9];elsespi_d<=1'b0;
endendmodule

下面是仿真时序图,在SPI时钟上升沿采样数据。

参考TLC5615基于verilog HDL实现SPI时序相关推荐

  1. 基于Verilog HDL的数字秒表、波形发送器等设计

    基于Verilog HDL的数字秒表设计 一.EDA 二.基于Verilog HDL的数字秒表设计 1. 用Verilog HDL设计一个数字跑表,所需引脚和功能如下所示: 2.代码示例 3. 结果: ...

  2. Verilog HDL组合逻辑与时序逻辑区别

    1.1 Verilog HDL组合逻辑与时序逻辑区别 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Verilog HDL组合逻辑与时序逻辑区别: 5)结束语. 1.1 ...

  3. 基于Verilog HDL的数字时钟

    目录 一.实验目的 二.实验概述 三.实验过程 一.实验目的 1.学习相关的设计方法及原理 2.学习设计方法 二.实验概述 基于Verilog HDL设计一个时钟 三.实验过程 新建一个工程 选择芯片 ...

  4. matlab4fsk软件解调代码,4fsk调制与解调基于Verilog HDL语言

    [实例简介] 4fsk调制与解调基于Verilog HDL语言 [实例截图] [核心代码] 4fsk调制与解调基于VerilogHDL语言 └── kechengsheji ├── dac0832(1 ...

  5. (多图) 基于Verilog HDL的FIR数字滤波器设计与仿真

    引言:数字滤波器是语音与图像处理.模式识别.雷达信号处理.频谱分析等应用中的一种基本的处理部件,它能满足波器对幅度和相位特性的严格要求,避免模拟滤波器所无法克服的电压漂移.温度漂移和噪声等问题.有限冲 ...

  6. 基于Verilog HDL与虚拟实验平台的【计算机组成】与CPU实验第三章:三态门和多路器

    1判断(2分) 数字逻辑电路有两大种类型,组合逻辑电路和时序逻辑电路,组合逻辑电路"没有记忆",输出由输入决定,时序逻辑电路"有记忆",输出由当前输入和以前的状 ...

  7. 基于Verilog HDL与虚拟实验平台的【计算机组成】与CPU实验第四章:七段译码器

    1单选(2分) 2-4译码器有____位输入,位输出,在输出的所有位中,只有其中1位有效,通常在计算机里用作, 有一些译码器设有一个和多个使能控制输入端,又成为片选端,用来控制允许译码或禁止译码. A ...

  8. 基于Verilog HDL 和FPGA的寻线小车设计代码

    刚进实验室的第一个项目--做一个寻线小车,我就用FPGA芯片尝试做了一个. 用到的零件有:车模一个.一块L298N驱动模块.一块cyclone IV芯片(具体型号是EP4CE6E22C8N).四个电机 ...

  9. 【Verilog HDL学习之路】第二章 Verilog HDL的设计方法学——层次建模

    2 Verilog HDL的设计方法学--层次建模 重要的思想: 在语文教学中,应该先掌握核心方法论,再用正确的方法论去做题目,这样能够逐渐加深对于方法论的理解,做题的速度和准确率也会越来越高. 在V ...

  10. 异步FIFO基本原理(基于Verilog的简单实现)

    参考文献: [1]彭莉, 秦建业, 付宇卓. 异步FIFO的设计与验证[J]. 计算机工程与应用, 2005, 41(3):4. [2]魏芳, 刘志军, 马克杰. 基于Verilog HDL的异步FI ...

最新文章

  1. 如何高效利用开源项目增加实战经验?程序员如何做副业?这些你关心的问题一次讲清楚!...
  2. 论文目录用word怎么自动生成或插入?
  3. Linux系统的常用命令的使用
  4. C/C++ 位操作 总结
  5. 浅谈MySQL数据库中的锁与事务
  6. SoapUI简介和入门实例解析
  7. 特征筛选1——根据方差筛选(单变量筛选)
  8. android 获取mac地址
  9. Leetcode 刷题笔记(二十) ——回溯算法篇之分割、子集、全排列问题
  10. Avro, Protocol Buffers 、Thrift的联系与区别
  11. paip.提升用户体验以及效率----编程语言趋势以及第四代语言4GL
  12. 一文读懂人工智能、机器学习、深度学习、强化学习的关系(必看)
  13. mysql中数据库改名字_MySQL数据库改名字
  14. 怎么把计算机模式重置,Windows10 WinRE模式下如何重置系统
  15. H.264(H264)视频文件的制作
  16. {转}tbl语言简介
  17. Linux、MacOS本地调用STF远程设备(stf.sh、stf-connect.js、stf-disconnect.js)
  18. [蓝桥杯] 剪邮票 (Python 实现)
  19. android LayoutInflate.inflate源码分析及使用区分
  20. C++priority_queue模拟实现与仿函数讲解

热门文章

  1. 华为交换机不同VLAN间通信的两种主流解决方案,一分钟快速掌握
  2. 动图ps在html不动,教你如何用ps把动态图片加到静态图片上
  3. python实现排序算法lowb三人组之插入排序
  4. 【coq】函数语言设计 笔记 11 - rel
  5. 信息化15年规划推动中国信息化步入深水区
  6. 场景图生成论文阅读笔记 之 PCPL
  7. 萌新-以ijcai19为模板的latex排版总结
  8. 从浙大计算机到字节算法岗!
  9. dither技术的原理及应用
  10. 【html】【微信小程序】将图片压缩,文件上传的方法