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. 【Codeforces 467C】George and Job

    [链接] 我是链接,点我呀:) [题意] 让你从1..n这n个数字中 选出来k个不相交的长度为m的区间 然后这个k个区间的和最大 求出这k个区间的和的最大值 [题解] 设dp[i][j]表示前i个数字 ...

  2. 【codeforces 510C】Fox And Names

    [题目链接]:http://codeforces.com/contest/510/problem/C [题意] 给你n个字符串; 问你要怎么修改字典序; (即原本是a,b,c..z现在你可以修改每个字 ...

  3. Java基础学习总结(36)——Java注释模板

    代码注释是对代码设计者.代码阅读者以及系统间调用提供了有效的帮助,最大限度的提高团队开发合作效率增强系统的可维护性.我们追求简化,不是为了写注释而写注释. (快速使用请直接看六.七.八) 一.原则: ...

  4. BZOJ——T 1800: [Ahoi2009]fly 飞行棋

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1767  Solved: 1395[Submit][Status][Discuss] Descripti ...

  5. Spring MVC-表单(Form)标签-下拉框(Dropdown)示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_dropdown.htm 说明:示例基于Spring MVC 4.1.6. 以下示 ...

  6. 开源GIS软件 2

    Android上的导航软件 AndNav AndNav 是一款 Android 手机上的 GPS导航软件(非开源).软件支持GPS定位信息,目的地查询,道路建议管理,导航提示等功能,十分强大的一款软件 ...

  7. qt on android之GPS信号的获取

    0.      写在最前面 本人參考安晓辉大侠的一篇博文后.做了Qt on android的GSP相关的实验.为了后面不时之需.故而记录下来. 1.      Qt on Android GPS系统流 ...

  8. [RxJS] Throttling vs Debouncing

    DebounceTime: It's like delay, but passes only the most recent value from each burst of emissions. T ...

  9. Android动态逆向分析工具ZjDroid--脱壳神器

    项目地址:https://github.com/BaiduSecurityLabs/ZjDroid 前提条件: 1.Root手机一部 2.须要通过Xposed installer( http://dl ...

  10. Android之——常见Bug及其解决方式

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46942139 1.android.view.WindowManager$BadTo ...