参考TLC5615基于verilog HDL实现SPI时序
参考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时序相关推荐
- 基于Verilog HDL的数字秒表、波形发送器等设计
基于Verilog HDL的数字秒表设计 一.EDA 二.基于Verilog HDL的数字秒表设计 1. 用Verilog HDL设计一个数字跑表,所需引脚和功能如下所示: 2.代码示例 3. 结果: ...
- Verilog HDL组合逻辑与时序逻辑区别
1.1 Verilog HDL组合逻辑与时序逻辑区别 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Verilog HDL组合逻辑与时序逻辑区别: 5)结束语. 1.1 ...
- 基于Verilog HDL的数字时钟
目录 一.实验目的 二.实验概述 三.实验过程 一.实验目的 1.学习相关的设计方法及原理 2.学习设计方法 二.实验概述 基于Verilog HDL设计一个时钟 三.实验过程 新建一个工程 选择芯片 ...
- matlab4fsk软件解调代码,4fsk调制与解调基于Verilog HDL语言
[实例简介] 4fsk调制与解调基于Verilog HDL语言 [实例截图] [核心代码] 4fsk调制与解调基于VerilogHDL语言 └── kechengsheji ├── dac0832(1 ...
- (多图) 基于Verilog HDL的FIR数字滤波器设计与仿真
引言:数字滤波器是语音与图像处理.模式识别.雷达信号处理.频谱分析等应用中的一种基本的处理部件,它能满足波器对幅度和相位特性的严格要求,避免模拟滤波器所无法克服的电压漂移.温度漂移和噪声等问题.有限冲 ...
- 基于Verilog HDL与虚拟实验平台的【计算机组成】与CPU实验第三章:三态门和多路器
1判断(2分) 数字逻辑电路有两大种类型,组合逻辑电路和时序逻辑电路,组合逻辑电路"没有记忆",输出由输入决定,时序逻辑电路"有记忆",输出由当前输入和以前的状 ...
- 基于Verilog HDL与虚拟实验平台的【计算机组成】与CPU实验第四章:七段译码器
1单选(2分) 2-4译码器有____位输入,位输出,在输出的所有位中,只有其中1位有效,通常在计算机里用作, 有一些译码器设有一个和多个使能控制输入端,又成为片选端,用来控制允许译码或禁止译码. A ...
- 基于Verilog HDL 和FPGA的寻线小车设计代码
刚进实验室的第一个项目--做一个寻线小车,我就用FPGA芯片尝试做了一个. 用到的零件有:车模一个.一块L298N驱动模块.一块cyclone IV芯片(具体型号是EP4CE6E22C8N).四个电机 ...
- 【Verilog HDL学习之路】第二章 Verilog HDL的设计方法学——层次建模
2 Verilog HDL的设计方法学--层次建模 重要的思想: 在语文教学中,应该先掌握核心方法论,再用正确的方法论去做题目,这样能够逐渐加深对于方法论的理解,做题的速度和准确率也会越来越高. 在V ...
- 异步FIFO基本原理(基于Verilog的简单实现)
参考文献: [1]彭莉, 秦建业, 付宇卓. 异步FIFO的设计与验证[J]. 计算机工程与应用, 2005, 41(3):4. [2]魏芳, 刘志军, 马克杰. 基于Verilog HDL的异步FI ...
最新文章
- 如何高效利用开源项目增加实战经验?程序员如何做副业?这些你关心的问题一次讲清楚!...
- 论文目录用word怎么自动生成或插入?
- Linux系统的常用命令的使用
- C/C++ 位操作 总结
- 浅谈MySQL数据库中的锁与事务
- SoapUI简介和入门实例解析
- 特征筛选1——根据方差筛选(单变量筛选)
- android 获取mac地址
- Leetcode 刷题笔记(二十) ——回溯算法篇之分割、子集、全排列问题
- Avro, Protocol Buffers 、Thrift的联系与区别
- paip.提升用户体验以及效率----编程语言趋势以及第四代语言4GL
- 一文读懂人工智能、机器学习、深度学习、强化学习的关系(必看)
- mysql中数据库改名字_MySQL数据库改名字
- 怎么把计算机模式重置,Windows10 WinRE模式下如何重置系统
- H.264(H264)视频文件的制作
- {转}tbl语言简介
- Linux、MacOS本地调用STF远程设备(stf.sh、stf-connect.js、stf-disconnect.js)
- [蓝桥杯] 剪邮票 (Python 实现)
- android LayoutInflate.inflate源码分析及使用区分
- C++priority_queue模拟实现与仿函数讲解