FLASH(M25P16)-RDID时序代码及仿真波形(内含M25P16仿真模型文件)
RDID
rdid即读电子签名,下图为rdid的时序图,代码通过线性序列机的方式实现。
因为m25p16手册中要求上升沿采样,可以采用spi的00和11模式,本文采用00模式,scl初始值为0。
(spi的四种模式可见https://blog.csdn.net/weixin_42263208/article/details/108803254),
RDID时序代码
module flash_rdid (input wire clk,input wire rst_n,output reg flash_scl,output reg flash_d,output reg flash_cs_n,input wire flash_q,output reg q);localparam RDID = 8'h9f;localparam T_half = 5;always @ (posedge clk) q <= flash_q;reg [8:0] cnt;always @ (posedge clk) beginif (rst_n == 0)cnt <= 0;else if(cnt == 321)cnt <= cnt;elsecnt <= cnt + 1'b1;end always @ (*) beginif (rst_n == 0) begin flash_scl = 0; flash_d = 0;flash_cs_n = 1;endelsecase (cnt)0 : begin flash_cs_n = 1;flash_scl = 0;flash_d = 0;end1 : begin flash_cs_n = 0;flash_d = RDID[7];end1 + T_half * 1 : begin flash_scl = 1;end1 + T_half * 2 : begin flash_scl = 0;flash_d = RDID[6];end 1 + T_half * 3 : begin flash_scl = 1;end1 + T_half * 4 : begin flash_scl = 0;flash_d = RDID[5];end 1 + T_half * 5 : begin flash_scl = 1;end1 + T_half * 6 : begin flash_scl = 0;flash_d = RDID[4];end 1 + T_half * 7 : begin flash_scl = 1;end1 + T_half * 8 : begin flash_scl = 0;flash_d = RDID[3];end 1 + T_half * 9 : begin flash_scl = 1;end1 + T_half * 10 : begin flash_scl = 0;flash_d = RDID[2];end 1 + T_half * 11 : begin flash_scl = 1;end1 + T_half * 12 : begin flash_scl = 0;flash_d = RDID[1];end 1 + T_half * 13 : begin flash_scl = 1;end1 + T_half * 14 : begin flash_scl = 0;flash_d = RDID[0];end 1 + T_half * 15 : begin flash_scl = 1;end1 + T_half * 16 : begin flash_scl = 0;flash_d = 0;end 1 + T_half * 17 : begin flash_scl = 1;end1 + T_half * 18 : begin flash_scl = 0;end1 + T_half * 19 : begin flash_scl = 1;end1 + T_half * 20 : begin flash_scl = 0;end1 + T_half * 21 : begin flash_scl = 1;end1 + T_half * 22 : begin flash_scl = 0;end1 + T_half * 23 : begin flash_scl = 1;end1 + T_half * 24 : begin flash_scl = 0;end1 + T_half * 25 : begin flash_scl = 1;end1 + T_half * 26 : begin flash_scl = 0;end1 + T_half * 27 : begin flash_scl = 1;end1 + T_half * 28 : begin flash_scl = 0;end1 + T_half * 29 : begin flash_scl = 1;end1 + T_half * 30 : begin flash_scl = 0;end1 + T_half * 31 : begin flash_scl = 1;end1 + T_half * 32 : begin flash_scl = 0;end1 + T_half * 33 : begin flash_scl = 1;end1 + T_half * 34 : begin flash_scl = 0;end1 + T_half * 35 : begin flash_scl = 1;end1 + T_half * 36 : begin flash_scl = 0;end1 + T_half * 37 : begin flash_scl = 1;end1 + T_half * 38 : begin flash_scl = 0;end1 + T_half * 39 : begin flash_scl = 1;end1 + T_half * 40 : begin flash_scl = 0;end1 + T_half * 41 : begin flash_scl = 1;end1 + T_half * 42 : begin flash_scl = 0;end1 + T_half * 43 : begin flash_scl = 1;end1 + T_half * 44 : begin flash_scl = 0;end1 + T_half * 45 : begin flash_scl = 1;end1 + T_half * 46 : begin flash_scl = 0;end1 + T_half * 47 : begin flash_scl = 1;end1 + T_half * 48 : begin flash_scl = 0;end1 + T_half * 49 : begin flash_scl = 1;end1 + T_half * 50 : begin flash_scl = 0;end1 + T_half * 51 : begin flash_scl = 1;end1 + T_half * 52 : begin flash_scl = 0;end1 + T_half * 53 : begin flash_scl = 1;end1 + T_half * 54 : begin flash_scl = 0;end1 + T_half * 55 : begin flash_scl = 1;end1 + T_half * 56 : begin flash_scl = 0;end1 + T_half * 57 : begin flash_scl = 1;end1 + T_half * 58 : begin flash_scl = 0;end1 + T_half * 59 : begin flash_scl = 1;end1 + T_half * 60 : begin flash_scl = 0;end1 + T_half * 61 : begin flash_scl = 1;end1 + T_half * 62 : begin flash_scl = 0;end1 + T_half * 63 : begin flash_scl = 1;end1 + T_half * 64 : begin flash_scl = 0;flash_cs_n = 1;enddefault : ;endcaseend
endmodule
仿真代码
`timescale 1ns/1ps
module flash_rdid_tb;reg clk;reg rst_n;wire flash_cs_n;wire flash_d;wire flash_scl;wire flash_q;wire q;flash_rdid flash_rdid_inst(.clk (clk),.rst_n (rst_n),.flash_scl (flash_scl),.flash_d (flash_d),.flash_cs_n (flash_cs_n),.flash_q (flash_q),.q (q));m25p16 m25p16_inst(.c (flash_scl),.data_in (flash_d),.s (flash_cs_n),.w (1'b1),.hold (1'b1),.data_out (flash_q)
);initial clk = 1;
always #10 clk = ~clk;initial beginrst_n = 0;#201rst_n = 1;repeat (500)@ (posedge clk);#200$stop;
end
endmodule
仿真图
完整工程:https://download.csdn.net/download/weixin_42263208/12890066
M25P16仿真模型文件:https://download.csdn.net/download/weixin_42263208/12889963
FLASH(M25P16)-RDID时序代码及仿真波形(内含M25P16仿真模型文件)相关推荐
- FLASH(M25P16)-页编程(PP)指令时序代码及仿真波形(内含M25P16仿真模型文件)
PP指令 pp是页编程指令:需要先打开写使能(0000_0110),发送PP指令号(0000_0010),后面给24位地址,然后接数据,时序图发送如下图所示. PP指令时序代码 //页编程(PP)指令 ...
- modelsim中仿真波形设置的保存
为了方便以后察看仿真结果,可以将仿真波形保存在.Wlf文件中: 一.保存过程: 1.完成仿真波形 2.切换到sim视窗 3.点击保存图标,可以直接保存为.wlf文件 二.打开过程 1.打开models ...
- HDLBits 系列(42)根据仿真波形来设计电路之时序逻辑
文章目录 前言 电路设计1 原题复现 题目解析 我的设计 电路设计2 原题复现 题目解析 我的设计 电路设计3 原题复现 题目解析 我的设计 电路设计4 原题复现 题目解析 我的设计 前言 上篇博文讨 ...
- 四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)
移位寄存器总结 一.前言 二.简单循环左移/右移/双向移位寄存器 2.1 简单循环左移/右移/双向移位寄存器 2.2 verilog代码 2.3 Testbench 2.4 仿真结果 三.逻辑移位与算 ...
- 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)
数字分频器设计 一.前言 二.偶数分频 2.1 触发器级联法 2.2 计数器法 2.3 verilog代码 2.4 Testbench 2.5 仿真结果 三.奇数分频 3.1 占空比非50%奇数分频 ...
- 序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)
序列检测器 一.前言 二.状态机法和寄存器法 2.1状态机法 2.11 使用状态机检测"1001" 2.12 verilog代码 2.13 testbench 2.14仿真结果 2 ...
- 线性反馈移位寄存器LFSR(斐波那契LFSR(多到一型)和伽罗瓦LFSR(一到多型)|verilog代码|Testbench|仿真结果)
线性反馈移位寄存器LFSR 一.前言 二.LFSR简介 三.斐波那契LFSR和伽罗瓦LFSR 3.1 斐波那契LFSR 3.1.1 斐波那契LFSR 3.1.2 verilog代码 3.1.3 Tes ...
- 七种计数器总结(格雷码计数器、环形计数器、约翰逊计数器、FLSR、简易时分秒数字秒表|verilog代码|Testbench|仿真结果)
七种计数器总结 一.可复位/置数计数器 1.1 可复位/置数计数器 1.2 Verilog代码 1.3 Testbench 1.4 仿真结果 二.双向(可加可减)计数器 2.1 双向(可加可减)计数器 ...
- 怎样使用Debussy+ModelSim快速查看前仿真波形
引子:ModelSim是HDL仿真软件,Debussy是波形查看软件:搭配使用,相当爽.此处所谓快速查看前仿真波形仅为抛砖引玉,大家不要拘泥于此.两款软件的功能都很强大,请自行研究. 注:本篇博文的软 ...
- 分享一个gui或app designer实时显示simulink仿真波形和实时进度的方法
首先在simulink中尝试了to workspace 模块,发现只有在仿真结束之后gui才能够调用数据绘图绘图,不能实现实时显示仿真波形的效果. 所以采用了to file 模块,生成.mat文件,格 ...
最新文章
- phpstorm遍历PHP数组,使用PHPStorm对齐数组的键值对
- python3下使用requests实现模拟用户登录 —— 基础篇(马蜂窝)
- 【AI视野·今日NLP 自然语言处理论文速览 第十六期】Tue, 29 Jun 2021
- php rsa aes混合加密,手动演示RSA和AES混合加密过程
- 如何在几天时间内快速理解一个陌生行业?
- 机器学习基础(十二)—— 数学基本理论拾遗
- 仿陶小铺S2B2C商城源码产品分析
- 某知名网络安全公司的渗透测试工程师面试题实战汇总
- JavaScript 之自定义播放器
- go浏览器java_GO浏览器JAVAWP版下载_GO浏览器JAVA2016最新版_GO浏览器JAVA1.2.2-华军软件园...
- Grub Rescue恢复
- 自制java虚拟机_《深入理解Android:Java虚拟机ART》 —1.2.3 准备模拟器和自制系统镜像...
- Eslint代码规范
- 免费http代理能用吗?
- 快手抖音视频号涨粉方法技巧
- 九月开始复习计算机考研,2019计算机考研复习不要盲目开始
- PHP定时执行计划任务
- 车载网络技术详解 —— 车载网络系统基础(✨您绝不可错过的呕心力作✨)
- Google I/O 见闻
- 初学Python:encode、decode和Unicode等