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. (ccf)201703-3markdown

    #include<iostream> #include<memory.h> #include<stack> #include<string> #incl ...

  2. 从NLP任务中文本向量的降维问题,引出LSH(Locality Sensitive Hash 局部敏感哈希)算法及其思想的讨论

    1. 引言 - 近似近邻搜索被提出所在的时代背景和挑战 0x1:从NN(Neighbor Search)说起 ANN的前身技术是NN(Neighbor Search),简单地说,最近邻检索就是根据数据 ...

  3. Hibernate基于注解annotation的配置

    Annotation在框架中是越来越受欢迎了,因为annotation的配置比起XML的配置来说方便了很多,不需要大量的XML来书写,方便简单了很多,只要几个annotation的配置,就可以完成我们 ...

  4. 从头认识java-15.6 队列(Queue)

    这一章节我们来讨论一下队列(Queue). 1.什么是队列? 队列是一种特殊的线性表,特殊之处在于它仅仅同意在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样.队列是 ...

  5. Latex 排版技巧 1——数学公式对齐

    在我们排版数学推导式时,非常多时候我们希望可以让公式的等号对齐 这样更接近人的数学推导习惯 例如以下图效果图 使用 begin{aligned} end{aligned}将所需对齐的数学公式代码块包起 ...

  6. OC第六课

    主要内容:Block(Block语法.Block使用.Block实现数组排序) 一.Block语法 Block:块语法.本质上是匿名函数(没有函数名称的函数),和函数指针非常相似 函数回想: 实现了某 ...

  7. songtzu的创业产品的经历

    我的产品是关于卡通头像的东东,也有点照片处理app的感觉.你可能会想到脸萌.或者足迹.可是.我自觉得,我比这两者想做的东西要好. 以下的两张是站点首页的效果图. 图片版权与肖像权全部,非授权不得使用. ...

  8. C++ 句柄类的原理以及设计

    句柄类存在的意义是为了弥补将派生类对象赋给基类对象时发生的切片效应.比如以下的程序: multimap<Base> basket; Base base; Derived derive; b ...

  9. UVa 1584 Circular Sequence(环形串最小字典序)

    题意  给你一个环形串   输出它以某一位为起点顺时针得到串的最小字典序 直接模拟   每次后移一位比較字典序就可以  注意不能用strcpy(s+1,s)这样后移  strcpy复制地址不能有重叠部 ...

  10. 查看tensorflow pb模型文件的节点信息

    查看tensorflow pb模型文件的节点信息: import tensorflow as tf with tf.Session() as sess: with open('./quantized_ ...