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. hdu2017 字符串统计【C++】

    字符串统计 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. 用keil编写的 C51错误 *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL SYMBOL: ?C_START

    可能原因: 替换工程的文件未先 remove该文件. 正常替换文件步骤: 1. 右键 欲 替换的文件,remove  XXXXX.c from build  ----> remove  XXXX ...

  3. 使用JConsole观察分析Java程序的运行(转)

    一.JConsole是什么 从Java 5开始 引入了JConsole.JConsole是一个内置Java性能分析器,可以从命令行或在GUI shell中运行.您可以轻松地使用JConsole(或者, ...

  4. vim中凝视多行python代码

    在vim中凝视多行python代码比較麻烦,主要由下面几种方法: (1)将须要凝视的代码以文档字符串的形式呈现 (2)将须要凝视的代码以函数的形式呈现 (3)使用vim自身快捷键 我们主要使用第三种方 ...

  5. 从零開始学Xamarin.Forms(二) 环境搭建、创建项目

    一.环境搭建 Windows下环境搭建:     1.下载并安装jdk.Android SDK和NDK.当然还须要 VS2013 update 2(VS2010.VS2012均可)以上. a.  最新 ...

  6. golang LMDB入门例子——尼玛,LMDB的文档真的是太少了

    使用的是这个库:https://github.com/szferi/gomdb 安装: go get github.com/szferi/gomdb 代码: package main import ( ...

  7. bzoj1123 [POI2008]BLO——求割点子树相乘

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 思路倒是有的,不就是个乘法原理吗,可是不会写...代码能力... 写了一堆麻麻烦烦乱七 ...

  8. c++ 数据预处理(数据去噪,归一化)

    正态分布3σ原则,把3倍方差之外的点设想为噪声数据来排除. 归一化,将数据经过处理之后限定到一定的范围内,一般都会将数据限定到[0,1]. #include <iostream>#incl ...

  9. 逻辑回归 C++

    #include <iostream>#include <string>#include <fstream>#include <sstream>#inc ...

  10. 运行项目psychologicalTest

    [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 b ...