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)的更多相关文章

  1. I2C controller core之Bit controller(03)

    FPGA proven, AISC proven, I2C controller core from OpenCores http://opencores.org/project,i2c Bit-co ...

  2. I2C controller core之Bit controller(01)

    FPGA proven, AISC proven, I2C controller core from OpenCores http://opencores.org/project,i2c Bit-co ...

  3. I2C controller core之Bit controller(04)

    4) detect start/stop condition START- falling edge on SDA while SCL is high;  STOP -  rising edge on ...

  4. I2C controller core之Bit controller(02)

    4 generate clock and control signals 1 -- architecture signal iscl_oen, isda_oen : std_logic; -- int ...

  5. 一张图搞定OAuth2.0 在Office应用中打开WPF窗体并且让子窗体显示在Office应用上 彻底关闭Excle进程的几个方法 (七)Net Core项目使用Controller之二

    一张图搞定OAuth2.0   目录 1.引言 2.OAuth2.0是什么 3.OAuth2.0怎么写 回到顶部 1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常 ...

  6. ASP.NET Core MVC中Controller的Action,默认既支持HttpGet,又支持HttpPost

    我们知道ASP.NET Core MVC中Controller的Action上可以声明HttpGet和HttpPost特性标签,来限制可以访问Action的Http请求类型(GET.POST等). 那 ...

  7. 阅读DMA Controller Core 官方手册

    阅读DMA Controller Core 官方手册 DMA控制器框架图 怎样去设定一个DMA控制器 实例化DMA控制器 参数配置界面如下图所示: 对于width of the DMA length ...

  8. ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据

    在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让 ...

  9. (六)Net Core项目使用Controller之一 c# log4net 不输出日志 .NET Standard库引用导致的FileNotFoundException探究 获取json串里的某个属性值 common.js 如何调用common.js js 筛选数据 Join 具体用法

    (六)Net Core项目使用Controller之一 一.简介 1.当前最流行的开发模式是前后端分离,Controller作为后端的核心输出,是开发人员使用最多的技术点. 2.个人所在的团队已经选择 ...

随机推荐

  1. redis 和 memcached的区别

    redis和memcached的区别   Redis 和 Memcache 都是基于内存的数据存储系统.Memcached是高性能分布式内存缓存服务:Redis是一个开源的key-value存储系统. ...

  2. 学习Android

    =========================================today start to learn Android================= 我们学习需要的软件: jd ...

  3. STM32串口IAP实验笔记

    STM32的IAP功能确实方便,以前对此如何实现有所了解,但是一直没去测试,这两天来练了下,可谓困难重重,搞了两天问题也一一解决,下面做些简要的笔记 IAP就是在线应用编程,方便程序升级,可以不用打开 ...

  4. 一个电商项目的Web服务化改造3:改进方案の规范和约定、单表、单一职责

         最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA.      有点挑战,做完了,会有很大进步. 上一篇,我们描述了原有项目中的问题.  或者说是,本篇的基本 ...

  5. 【Codeforces 225C】Barcode

    [链接] 我是链接,点我呀:) [题意] 让你把每一列都染成一样的颜色 要求连续相同颜色的列的长度都大于等于x小于等于y 问你最少的染色次数 [题解] 先求出每一列染成#或者.需要染色多少次 设f[0 ...

  6. springCloud学习-服务消费者(Feign)

    1.简介 Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单.使用Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解.Fei ...

  7. [bzoj1598][Usaco08Mar]牛跑步_A*_Dijkstra

    牛跑步 bzoj-1598 题目大意:给你n个点,m条边的有向图.求从1到n的严格的第k短路. 注释:$1\le n\le 1000$,$1\le m \le 10,000$,$1\le k \le ...

  8. ZOJ 3213

    /* ZOJ 3213 好吧,看过那种括号表示法后,就崩溃了,实在受不了.情况复杂,写了两天,人也有点傻X了,只能放弃,转而用最小表示法. 最小表示法不难写: 1)首先,要承认路径上有格子不选的情况, ...

  9. 史上最全opencv源代码解读,opencv源代码具体解读文件夹

    本博原创,如有转载请注明本博网址http://blog.csdn.net/ding977921830/article/details/46799043. opencv源代码主要是基于adaboost算 ...

  10. luogu1268 树的重量

    题目大意 给出一棵树上每两个叶子节点之间的距离,求树的总边权和. 题解 定义节点a到b的简单路径长度为[a,b],树中节点c要到达路径[a,b]所要经过的距离为dist(c, [a,b]),在树中,与 ...