I2C controller core之Bit controller(05)
6 generate statemachine
1 -- port
cmd_ack : out std_logic; -- command completed 4 -- architecture
type states is (idle, start_a, start_b, start_c, start_d, start_e, stop_a, stop_b,
stop_c, stop_d, rd_a, rd_b, rd_c, rd_d, wr_a, wr_b, wr_c, wr_d);
signal c_state : states;
signal iscl_oen, isda_oen : std_logic; -- internal I2C lines
signal sda_chk : std_logic; -- check SDA status (multi-master arbitration) 11 -- statemachine
nxt_state_decoder : process (clk, nRst)
begin
if (nRst = '') then
c_state <= idle;
cmd_ack <= '';
iscl_oen <= '';
isda_oen <= '';
sda_chk <= '';
elsif (clk'event and clk = '') then
if (rst = '' or ial = '') then
c_state <= idle;
cmd_ack <= '';
iscl_oen <= '';
isda_oen <= '';
sda_chk <= '';
else
cmd_ack <= ''; -- default no acknowledge if (clk_en = '') then
case (c_state) is
-- idle
when idle =>
case cmd is
when I2C_CMD_START => c_state <= start_a;
when I2C_CMD_STOP => c_state <= stop_a;
when I2C_CMD_WRITE => c_state <= wr_a;
when I2C_CMD_READ => c_state <= rd_a;
when others => c_state <= idle; -- NOP command
end case; iscl_oen <= iscl_oen; -- keep SCL in same state
isda_oen <= isda_oen; -- keep SDA in same state
sda_chk <= ''; -- don't check SDA -- start
when start_a =>
c_state <= start_b;
iscl_oen <= iscl_oen; -- keep SCL in same state (for repeated start)
isda_oen <= ''; -- set SDA high
sda_chk <= ''; -- don't check SDA when start_b =>
c_state <= start_c;
iscl_oen <= ''; -- set SCL high
isda_oen <= ''; -- keep SDA high
sda_chk <= ''; -- don't check SDA when start_c =>
c_state <= start_d;
iscl_oen <= ''; -- keep SCL high
isda_oen <= ''; -- set SDA low
sda_chk <= ''; -- don't check SDA when start_d =>
c_state <= start_e;
iscl_oen <= ''; -- keep SCL high
isda_oen <= ''; -- keep SDA low
sda_chk <= ''; -- don't check SDA when start_e =>
c_state <= idle;
cmd_ack <= ''; -- command completed
iscl_oen <= ''; -- set SCL low
isda_oen <= ''; -- keep SDA low
sda_chk <= ''; -- don't check SDA -- stop
when stop_a =>
c_state <= stop_b;
iscl_oen <= ''; -- keep SCL low
isda_oen <= ''; -- set SDA low
sda_chk <= ''; -- don't check SDA when stop_b =>
c_state <= stop_c;
iscl_oen <= ''; -- set SCL high
isda_oen <= ''; -- keep SDA low
sda_chk <= ''; -- don't check SDA when stop_c =>
c_state <= stop_d;
iscl_oen <= ''; -- keep SCL high
isda_oen <= ''; -- keep SDA low
sda_chk <= ''; -- don't check SDA when stop_d =>
c_state <= idle;
cmd_ack <= ''; -- command completed
iscl_oen <= ''; -- keep SCL high
isda_oen <= ''; -- set SDA high
sda_chk <= ''; -- don't check SDA -- read
when rd_a =>
c_state <= rd_b;
iscl_oen <= ''; -- keep SCL low
isda_oen <= ''; -- tri-state SDA
sda_chk <= ''; -- don't check SDA when rd_b =>
c_state <= rd_c;
iscl_oen <= ''; -- set SCL high
isda_oen <= ''; -- tri-state SDA
sda_chk <= ''; -- don't check SDA when rd_c =>
c_state <= rd_d;
iscl_oen <= ''; -- keep SCL high
isda_oen <= ''; -- tri-state SDA
sda_chk <= ''; -- don't check SDA when rd_d =>
c_state <= idle;
cmd_ack <= ''; -- command completed
iscl_oen <= ''; -- set SCL low
isda_oen <= ''; -- tri-state SDA
sda_chk <= ''; -- don't check SDA -- write
when wr_a =>
c_state <= wr_b;
iscl_oen <= ''; -- keep SCL low
isda_oen <= din; -- set SDA
sda_chk <= ''; -- don't check SDA (SCL low) when wr_b =>
c_state <= wr_c;
iscl_oen <= ''; -- set SCL high
isda_oen <= din; -- keep SDA
sda_chk <= ''; -- don't check SDA yet
-- Allow some more time for SDA and SCL to settle when wr_c =>
c_state <= wr_d;
iscl_oen <= ''; -- keep SCL high
isda_oen <= din; -- keep SDA
sda_chk <= ''; -- check SDA when wr_d =>
c_state <= idle;
cmd_ack <= ''; -- command completed
iscl_oen <= ''; -- set SCL low
isda_oen <= din; -- keep SDA
sda_chk <= ''; -- don't check SDA (SCL low) when others => end case;
end if;
end if;
end if;
end process nxt_state_decoder;
I2C controller core之Bit controller(05)的更多相关文章
- I2C controller core之Bit controller(03)
FPGA proven, AISC proven, I2C controller core from OpenCores http://opencores.org/project,i2c Bit-co ...
- I2C controller core之Bit controller(01)
FPGA proven, AISC proven, I2C controller core from OpenCores http://opencores.org/project,i2c Bit-co ...
- I2C controller core之Bit controller(04)
4) detect start/stop condition START- falling edge on SDA while SCL is high; STOP - rising edge on ...
- I2C controller core之Bit controller(02)
4 generate clock and control signals 1 -- architecture signal iscl_oen, isda_oen : std_logic; -- int ...
- 一张图搞定OAuth2.0 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上 彻底关闭Excle进程的几个方法 (七)Net Core项目使用Controller之二
一张图搞定OAuth2.0 目录 1.引言 2.OAuth2.0是什么 3.OAuth2.0怎么写 回到顶部 1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常 ...
- ASP.NET Core MVC中Controller的Action,默认既支持HttpGet,又支持HttpPost
我们知道ASP.NET Core MVC中Controller的Action上可以声明HttpGet和HttpPost特性标签,来限制可以访问Action的Http请求类型(GET.POST等). 那 ...
- 阅读DMA Controller Core 官方手册
阅读DMA Controller Core 官方手册 DMA控制器框架图 怎样去设定一个DMA控制器 实例化DMA控制器 参数配置界面如下图所示: 对于width of the DMA length ...
- ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据
在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让 ...
- (六)Net Core项目使用Controller之一 c# log4net 不输出日志 .NET Standard库引用导致的FileNotFoundException探究 获取json串里的某个属性值 common.js 如何调用common.js js 筛选数据 Join 具体用法
(六)Net Core项目使用Controller之一 一.简介 1.当前最流行的开发模式是前后端分离,Controller作为后端的核心输出,是开发人员使用最多的技术点. 2.个人所在的团队已经选择 ...
随机推荐
- hdu2017 字符串统计【C++】
字符串统计 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- 用keil编写的 C51错误 *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START
可能原因: 替换工程的文件未先 remove该文件. 正常替换文件步骤: 1. 右键 欲 替换的文件,remove XXXXX.c from build ----> remove XXXX ...
- 使用JConsole观察分析Java程序的运行(转)
一.JConsole是什么 从Java 5开始 引入了JConsole.JConsole是一个内置Java性能分析器,可以从命令行或在GUI shell中运行.您可以轻松地使用JConsole(或者, ...
- vim中凝视多行python代码
在vim中凝视多行python代码比較麻烦,主要由下面几种方法: (1)将须要凝视的代码以文档字符串的形式呈现 (2)将须要凝视的代码以函数的形式呈现 (3)使用vim自身快捷键 我们主要使用第三种方 ...
- 从零開始学Xamarin.Forms(二) 环境搭建、创建项目
一.环境搭建 Windows下环境搭建: 1.下载并安装jdk.Android SDK和NDK.当然还须要 VS2013 update 2(VS2010.VS2012均可)以上. a. 最新 ...
- golang LMDB入门例子——尼玛,LMDB的文档真的是太少了
使用的是这个库:https://github.com/szferi/gomdb 安装: go get github.com/szferi/gomdb 代码: package main import ( ...
- bzoj1123 [POI2008]BLO——求割点子树相乘
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 思路倒是有的,不就是个乘法原理吗,可是不会写...代码能力... 写了一堆麻麻烦烦乱七 ...
- c++ 数据预处理(数据去噪,归一化)
正态分布3σ原则,把3倍方差之外的点设想为噪声数据来排除. 归一化,将数据经过处理之后限定到一定的范围内,一般都会将数据限定到[0,1]. #include <iostream>#incl ...
- 逻辑回归 C++
#include <iostream>#include <string>#include <fstream>#include <sstream>#inc ...
- 运行项目psychologicalTest
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 b ...