I2C VHDL程序
http://blog.sina.com.cn/s/blog_9bd80b7601012o9y.html
library ieee ;
use ieee.std_logic_1164.all ;
use ieee.std_logic_arith.all ;
use ieee.std_logic_unsigned.all ;
entity I2C_Control is
port (
CLKI :IN Std_logic ;
RST :IN Std_logic ;
Slave_add :in std_logic_vector(3 downto 0);
addr :in std_logic_vector(7 downto 0);
wr_rd :IN Std_logic ;
DAT1 :in std_logic_vector(7 downto 0);
Delay_Time :in integer range 0 to 255;
A :buffer std_logic_vector(2 downto 0);
WP :buffer std_logic;
SCL :buffer std_logic;
SDA :buffer std_logic
) ;
end I2C_Control ;
architecture Arch of I2C_Control is
type state1 is (Idle,Idle1, I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,Iok);
signal current_state,next_state : state1;
signal I2C_Sent :std_logic_vector(26 downto 0);
begin
I2C_Sent <= Slave_add & A & wr_rd &'0'& addr &'0'& DAT1&'0' ;
process(clki,RST)
begin
if RST = '1' then
current_state <= Idle;
elsif clki'event and clki = '0' then
current_state <= next_state;
end if;
end process;
process(clki)
variable i :integer range 0 to 63;
variable cnt :integer range 0 to 1023;
begin
if clki'event and clki = '1' then
A<="111";
case current_state is
when Idle =>
SCL <= '1'; SDA <= '1';
WP <= '1';
next_state <= Idle1;
when Idle1 =>
SCL <= '1'; SDA <= '1';
WP <= '0';
next_state <= I1;
when I1 =>
SDA <= '0';
next_state <= I2;
when I2 =>
SCL <= '0';
i :=26;
next_state <= I3;
when I3 =>
SCL <= '0';
SDA <= I2C_Sent(i);
next_state <= I4;
when I4 =>
SCL <= '1';
next_state <= I5;
when I5 =>
if i= 0 then
next_state <= I6;
else
i := i-1;
next_state <= I3;
end if;
when I6 =>
SCL <= '0';
next_state <= I7;
when I7 =>
SCL<= '1';
next_state <= I8;
when I8 =>
SDA <= '1';
next_state <= I9;
when I9 =>
WP<= '1'; --1
next_state <= I10;
WHEN I10 =>
if cnt = Delay_Time then
cnt := 0;
next_state <= Idle;
else
cnt := cnt +1;
end if;
when Iok =>
SCL <='1';
SDA <= '1';
next_state <= Iok;
when others =>
next_state <= Iok;
end case;
end if;
end process;
end Arch;
I2C VHDL程序的更多相关文章
- VHDL程序的库
VHDL库存储和放置了可被其他VHDL程序调用的数据定义.器件说明.程序包等资源.VHDL库的种类有很多,但最常见的库有IEEE标准库.WORK库.IEEE标准库主要包括STD_LOGIC_1164. ...
- 毕业设计预习:VHDL入门知识学习(一) VHDL程序基本结构
VHDL入门知识学习(一) VHDL程序基本结构 简介 VHDL程序基本结构 简介 概念: HDL-Hardware Description Language-硬件描述语言-描述硬件电路的功能.信号连 ...
- 基于BASYS2的VHDL程序——交通灯
请尊重作者版权,转载请注明原地址: http://www.cnblogs.com/connorzx/p/3676746.html 数电实验交通灯VHDL版,程序写的扩展性很差,待以后有时间进行优化. ...
- 基于BASYS2的VHDL程序与仿真——50%占空比8分频器
转帖请注明转自http://www.cnblogs.com/connorzx/p/3547673.html 一.新建工程 1.点击File->New Project, 2.点击Next 注:此处 ...
- Linux i2c 读写程序
/* This software uses a BSD license. Copyright (c) 2010, Sean Cross / chumby industriesAll rights re ...
- 基于BASYS2的VHDL程序——分频和数码管静态显示程序
转载请注明出处:http://www.cnblogs.com/connorzx/p/3633860.html 分频是基于计数器程序.由于FPGA的并行处理能力,根本不需要单片机式的中断指令,用起来很方 ...
- 基于BASYS2的VHDL程序与烧写——按键消抖程序
请尊重作者版权,转载请注明源地址http://www.cnblogs.com/connorzx/p/3548364.html 按键在按下的过程中通常会产生一段时间的抖动,为了消除这种抖动,一般采取两种 ...
- 基于BASYS2的VHDL程序——交通灯(状态机版)
请尊重作者版权,转载注明源地址:http://www.cnblogs.com/connorzx/p/3694618.html 使用了状态机,增加了可读性和用户体验. library IEEE; use ...
- 基于BASYS2的VHDL程序——数字钟(最终版)
转载请注明原地址:http://www.cnblogs.com/connorzx/p/3674178.html 调时电路正常工作.一切正常.发现做FPGA还是得从数电的思路思考,设置一个预置使能端,预 ...
随机推荐
- Python-day-21
1.请求周期 url> 路由 > 函数或类 > 返回字符串或者模板语言? Form表单提交: 提交 -> url > 函数或类中的方法 - .... HttpRespon ...
- CentOS7安装问题及解决方案记录
CentOS7系统已安装好: 一.我想要实现系统桌面化. 需要运行 yum 命令. 出现第一个error: 1.提示错误:can not find a valid baseurl 86_X64.... ...
- yum -y upgrade 和 yum -y update 区别
分别测试yum -y upgrade和yum -y update 升级前 系统版本: CentOS5.5 内核版本: 2.6.18-194.el5 升级前做过简单配置文件修改 yum -y upgra ...
- PPTP VPN 限制一个账号只允许一个用户来登录
创建auth-up文件 vi /etc/ppp/auth-up chmod a+x /etc/ppp/auth-up auth-up脚本内容如下 #!/bin/sh # get the usernam ...
- JavaScript流程控制语句
一.JavaScript分支语句 -alert() 弹出警告对话框 -prompt() 弹出输入框 1.if(){}else{} 栗子: var num=prompt("请输入电话号码 ...
- Android之listview && adapter
今天我们讲的也是非常重要的一个控件listview-最常用也是最难的 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...
- AutoCad2008 部分快捷键
编组开关: Ctrl+Shift+A 查看扩展属性命令: xdlist 加载新的菜单栏命令:menu
- 利用Jurassic在.net下运行js函数
static void Main(string[] args) { var eng = new Jurassic.ScriptEngine(); eng.Evaluate("function ...
- mssql
1.打开php.ini,将 ;extension=php_mssql.dll前面的分号(;)去掉,然后重启 Apache. 如果不行的话,进行第2步: 2.检查一下你的php安装目录下的ext下面有没 ...
- Codeforces 702C Cellular Network
题目:这里 题意:一条数轴上,有n个城市和m个塔,分别给出城市的位置和塔的位置,每个塔有个覆盖范围,问能将所有城市都覆盖的塔的最小范围是多少,一个城市只要被至少一个塔 覆盖就行. 可以利用贪心的思想模 ...