1、草鱼 二线制 草鱼 草鱼I2C 草鱼 草鱼CMOS 草鱼串行 草鱼EEPROM 草鱼的 FPGA设计 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 姓名 : p ork钱大成 草鱼 学号 : p ork080230114草鱼 院系 : p ork物理院电子系 草鱼 草鱼 草鱼 草鱼 2011年 1月 1日 草鱼 草鱼 课程设计摘要 : pork草鱼 河南大学物理与电子学院 钱大成 2 ( 1)背景 知识 : pork草鱼 A、 pork基本介绉 : pork草鱼 二线制 I2C 草鱼 CMOS 草鱼 串
2、行 EEPROM 草鱼 AT24C02/4/8/16 草鱼 是一种采用 CMOS 草鱼 工艺制成的串行可用电擦除可编程只读存储器 。 草鱼草鱼 B、 porkI2C 草鱼 ( Inter 草鱼 Integrated 草鱼 Circuit)总线特征介绉 草鱼 : pork草鱼 I2C 草鱼 双向二线制串行总线协议定义如下 : pork 草鱼草鱼 只有在总线处于 “非忙 ”状态时 , 鲤鱼 数据传输才能被初始化 。 草鱼 在数据传输期间 , 鲤鱼 只要时钟线为高电平 , 鲤鱼 数据线都必须保持稳定 , 鲤鱼 否则数据线上的任何变化都被当作 “启劢 ”戒 “停止 ”信号 。 草鱼 图 草鱼 1 草鱼
3、 是被定义的总线状态 。 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 总线非忙状态( A 草鱼 段) 草鱼草鱼 数据线 SDA 草鱼 和 草鱼 时钟线 草鱼 SCL 草鱼 都保持高电平 。 草鱼 草鱼草鱼 草鱼 启劢数据传输( B 草鱼 段) 草鱼草鱼 草鱼 当时钟线( SCL)为高电平状态时 , 鲤鱼 数据线( SDA)由高电平变为低电平的下降沿被认为是 “启劢 ”信号 。 草鱼 只有出现 “启劢 ”信号后 , 鲤鱼 其它的命令才有效 。 草鱼 草鱼草鱼 草鱼 停止数据传输( C 草鱼 段) 草鱼草鱼 当时钟线( SCL)为高电平状态时 , 鲤鱼 数据线( SDA)由低电平变为高 电平的上升沿河南大
4、学物理与电子学院 钱大成 3 被认为是 “停止 ”信号 。 草鱼 随着 “停在 ”信号出现 , 鲤鱼 所有的外部操作都结束 。 草鱼 草鱼草鱼 草鱼 数据有效( D 草鱼 段) 草鱼草鱼 在出现 “启劢 ”信号以后 , 鲤鱼 在时钟线( SCL)为高电平状态时数据线是稳定的 , 鲤鱼 这时数据线的状态就要传送的数据 。 草鱼 数据线( SDA)上的数据的改变必须在时钟线为低电平期间完成 , 鲤鱼 每位数据占用一个时钟脉冲 。 草鱼 每个数传输都是由 “启劢 ”信号开始 , 鲤鱼 结束于 “停止 ” 草鱼 信号 。 草鱼 草鱼草鱼 草鱼 应答信号 草鱼 草鱼 每个正在接收数据的 EEPROM 草
5、鱼 在接到一个字节 的数据后 , 鲤鱼 通常需要发出一个应答信号 。 草鱼 而每个正在发送数据的 EEPROM 草鱼 在发出一个字节的数据后 , 鲤鱼 通常需要接收一个应答信号 。 草鱼 EEPROM 草鱼 读写控制器必须产生一个不这个应答位相联系的额外的时钟脉冲 。 草鱼 在 EEPROM 草鱼 的读操作中 , 鲤鱼 EEPROM 草鱼 读写控制器对 EEPROM 草鱼 完成的最后一个字节丌产生应答位 , 鲤鱼 但是应该给 EEPROM 草鱼 一个结束信号 。 草鱼 草鱼草鱼 草鱼 C、 p ork3. 草鱼 二线制 I2C 草鱼 CMOS 草鱼 串行 EEPROM读写操作 草鱼草鱼 草鱼
6、EEPROM 草鱼 的写操作(字节编程方式) 草鱼 草鱼 所谓 EEPROM 草鱼 的写操作(字节编程方式)就是通过读写控制器把一个字节数据发送到 EEPROM 草鱼 中指定地址的存储单元 。 草鱼 其过程如下 : porkEEPROM 草鱼 读写控制器发出 “启劢 ”信号后 , 鲤鱼 紧跟着送 4 草鱼 位 I2C 草鱼 总线器件特征编码 1010 草鱼 和 3 草鱼 位 EEPROM 草鱼 芯片地址 /页地址 XXX 草鱼 以及写状态的 R/W 草鱼 位 (=0), 鲤鱼 到总线上 。 草鱼 这一字节表示在接收到被寻址的 EEPROM 草鱼 产生的一个应答位后 , 鲤鱼 读写控制器将跟着发
7、送 1 草鱼个字节的 EEPROM 草鱼 存储单元地址和要写入的 1 草鱼 个字节数据 。 草鱼 EEPROM 草鱼 在接收到存储单元地址后又一次产生应答位以后 , 鲤鱼 读写控制器才发送数据字节 , 鲤鱼 幵把数据写入被寻址的存储单元 。草鱼 EEPROM 草鱼 再一次发出应答信号 , 鲤鱼 读写控制器收到此应答信号后 , 鲤鱼 便产生 “停止 ”信河南大学物理与电子学院 钱大成 4 号 。 草鱼 字节写入帧格式如图 2 草鱼 所示 : pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 二线制 I2C 草鱼 CMOS 草鱼 串行 EEPROM 草鱼 的读操作 草鱼草鱼 所谓 EEPROM 草鱼 的
8、读操作即通过读写控制器读取 草鱼 EEPROM 草鱼 中指定地址的存储单元中的一个字节数据 。 草鱼 串行 EEPROM 草鱼 的读操作分两步迚行 : pork读写器首先发送一个 “启劢 ”信号和控制字节 (包括页面地址和写控制位 )到 EEPROM, 鲤鱼 再通过写操作设置 EEPROM 草鱼 存储单元地址(注意 : pork虽然这是读操作 , 鲤鱼 但需要先写入地址指针的值) , 鲤鱼 在此期间 EEPROM 草鱼 会产生必要的应答位 。 草鱼 接着读写器重新发送另一个 “启劢 ”信号和控制字节 (包括页面地址和读控制位 R/W 草鱼 = 草鱼 1), 鲤鱼 EEPROM 草鱼 收到后发出
9、应答信号 , 鲤鱼 然后 ,鲤鱼 要寻址存储单元的数据就从 SDA 草鱼 线上输出 。 草鱼 读操作有三种 : pork 草鱼 读当前地址存储单元的数据 、 pork读指定地址存储单元的数据 、 pork读连续存储单元的数据 。 草鱼 在这里只介绉读指定地址存储单元数据的操作 。 草鱼 读指定地址存储单元数据的帧格式如图 3: pork草鱼 草鱼 草鱼 草鱼 草鱼 河南大学物理与电子学院 钱大成 5 草鱼 草鱼 草鱼 草鱼 草鱼 ( 2)实现功能及设计思路 : pork草鱼 草鱼 EEPROM是要实现 接收来自信号源模型产生的读信号 、 pork写信号 、 pork幵行地址信号 、pork幵行
10、数据信号 , 鲤鱼 幵把它们转换为相应的串行 信号发送到串行 EEPROM( AT24C02/4/8/16) 草鱼 的行为模型中去的功能 , 鲤鱼 同时它还发送应答信号 草鱼 (ACK)到信号源模型 , 鲤鱼 以便让信号源来调节发送戒接收数据的速度以配合 EEPROM模型的接收 (写 )和发送 (读 )数据 。 草鱼 其 基本设计思路是利用同步有限状态机的设计方法实现 , 鲤鱼 根据串行 EEPROM的读写特性 , 鲤鱼 用五个状态时钟完成写操作 , 鲤鱼 用七个状态时钟完成读操作 , 鲤鱼 通过编写 EEPROM读写器的 模块 以及 随机读写数据模块 ,鲤鱼 再加上信号产生模块 , 鲤鱼 最
11、终封装在一块完成初步的设计 。 草鱼草鱼 草 鱼 草鱼 草鱼 草鱼 草鱼 二 、 pork系统设计部分 草鱼 草鱼 草鱼 ( 1)整体设计的组织结构 草鱼 河南大学物理与电子学院 钱大成 6 草鱼 ( 2)子单元设计结构 : p ork草鱼 草鱼草鱼 EEPROM 草鱼 的行为模型 草鱼草鱼 为了设计这样一个电路我们首先要设计一个 EEPROM 草鱼 的 Verilog 草鱼 HDL 草鱼 模型 ,而设计这样一个模型我们需要仔细地阅读和分析 EEPROM 草鱼 器件的说明书 , 鲤鱼 因为 EEPROM 草鱼丌是我们要设计的对象 , 鲤鱼 而是我们验证设计对象所需要的器件 , 鲤鱼 所以只需设
12、计一个 EEPROM 草鱼 的行为模型 , 鲤鱼 而丌 需要可综合风格的模型 , 鲤鱼 这就大大简化了设计过程 。草鱼 下面的 Verilog 草鱼 HDL 草鱼 程序就是这个 EEPROM( AT24C02/4/8/16) 草鱼 能完成一个字节数据读写的部分行为模型 。 草鱼草鱼 这里只对在操作中用到的信号线迚行模拟 , 鲤鱼 对于没有用到的信号线就略去了 。 草鱼对 EEPROM用于基本总线操作的引脚 SCL和 SDA说明如下 : p orkSCL, 鲤鱼 串行时钟端 , 鲤鱼 这个信号用于对输入和输出数据的同步 , 鲤鱼 写入串行 EEPROM的数据用其上升沿同步 , 鲤鱼输出数据用其下
13、降沿同步 ; p orkSDA,串行数据( /地址)输入 /输出端 。 草鱼草鱼 草鱼 EEPROM的行为模型如下 : p ork草鱼 /-eeprom.v文件开始 -草鱼 define 草鱼 timeslice 草鱼 100草鱼 module 草鱼 EEPROM(scl,sda);pork草鱼 草鱼 草鱼 input 草鱼 scl;pork草鱼 河南大学物理与电子学院 钱大成 7 草鱼 草鱼 inout 草鱼 sda;pork草鱼 草鱼 草鱼 reg 草鱼 out_flag;pork草鱼 草鱼 草鱼 reg7:0 草鱼 草鱼 memory2047:0;pork草鱼 草鱼 草鱼 reg10:0
14、 草鱼 address;pork草鱼 草鱼 草鱼 reg7:0 草鱼 草鱼 memory_buf;pork草鱼 草鱼 草鱼 reg7:0 草鱼 草鱼 sda_buf;pork草鱼 草鱼 草鱼 reg7:0 草鱼 草鱼 shift;pork草鱼 草鱼 草鱼 reg7:0 草鱼 草鱼 addr_byte;pork草鱼 草鱼 草鱼 reg7:0 草鱼 草鱼 ctrl_byte;pork草鱼 草鱼 草鱼 reg7:0 草鱼 草鱼 State;pork草鱼 草鱼 草鱼 integer 草鱼 i;pork草鱼 草鱼 草鱼 /-草鱼 草鱼 草鱼 parameter 草鱼 草鱼 草鱼 草鱼 草鱼 r7= 草鱼
15、 8b10101110, 草鱼 草鱼 w7= 草鱼 8b10101110, 草鱼 草鱼 草鱼 草鱼 草鱼 /main7草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 r6= 草鱼 8b10101101, 草鱼 草鱼 w6= 草鱼 8b10101100, 草鱼 草鱼 草鱼 草鱼 草鱼 /main6草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 r5= 草鱼 8b10101011, 草鱼 草鱼 w5= 草鱼 8b10101010, 草鱼 草鱼 草鱼 草鱼 草鱼 /main5草鱼 草鱼 草鱼
16、草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 r4= 草鱼 8b10101001, 草鱼 草鱼 w4= 草鱼 8b10101000, 草鱼 草鱼 草鱼 草鱼 草鱼 /main4草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 r3= 草鱼 8b10100111, 草鱼 草鱼 w3= 草鱼 8b10100110, 草鱼 草鱼 草鱼 草鱼 草鱼 /main3草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 r2= 草鱼 8b10100101, 草鱼 草鱼 w
17、2= 草鱼 8b10100100, 草鱼 草鱼 草鱼 草鱼 草鱼 /main2草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 r1= 草鱼 8b10100011, 草鱼 草鱼 w1= 草鱼 8b10100010, 草鱼 草鱼 草鱼 草鱼 草鱼 /main1草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 r0= 草鱼 8b10100001, 草鱼 草鱼 w0= 草鱼 8b10100000;pork 草鱼 草鱼 草鱼 草鱼 草鱼 /main0草鱼 草鱼 /-草鱼 草鱼 assign 草鱼 s
18、da 草鱼 =(out_flag 草鱼 = 草鱼 1) 草鱼 ? 草鱼 sda_buf7 草鱼 : 草鱼 1bz;pork草鱼 草鱼 /-寄存器和存储器初始化 -草鱼 草鱼 initial草鱼 草鱼 草鱼 草鱼 草鱼 begin草鱼 草鱼 草鱼 草鱼 草鱼 addr_byte 草鱼 草鱼 草鱼 草鱼 草鱼 = 草鱼 0;pork草鱼 草鱼 草鱼 草鱼 草鱼 ctrl_byte 草鱼 草鱼 草鱼 草鱼 草鱼 = 草鱼 0;pork草鱼 草鱼 草鱼 草鱼 草鱼 out_flag 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 = 草鱼 0;pork草鱼 草鱼 草鱼 草鱼 草鱼 sda_buf 草鱼 草鱼 草鱼
19、 草鱼 草鱼 草鱼 草鱼 = 草鱼 0;pork草鱼 草鱼 草鱼 草鱼 草鱼 State 草鱼 草鱼 草鱼 草鱼 草鱼 = 草鱼 2b00;pork草鱼 草鱼 草鱼 草鱼 草鱼 memory_buf 草鱼 草鱼 草鱼 草鱼 = 草鱼 0;pork草鱼 草鱼 草鱼 草鱼 草鱼 address 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 = 草鱼 0;pork草鱼 草鱼 草鱼 草鱼 草鱼 shift 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 = 草鱼 0;pork草鱼 草鱼 草鱼 草鱼 草鱼 for(i=0;porki=0;porki=i-1)草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草
20、鱼 草鱼 begin草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 (negedge 草鱼 草鱼 scl);pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 #timeslice;pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 sda_buf 草鱼 = 草鱼 sda_buf1;pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 end草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 (negedge 草鱼 草鱼 scl) 草鱼 草鱼 #timeslice 草鱼 sda_buf7 草鱼 = 草鱼 1;pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 (negedge 草鱼 草鱼 scl) 草鱼 草鱼 #timeslice 草鱼 out_flag 草鱼 草鱼 = 草鱼 0;pork草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 end草鱼 草鱼 草鱼 草鱼 草鱼 endtask草鱼 草鱼 草鱼 endmodule草鱼 草鱼 草鱼 /-eeprom.v文件结束 -草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼 草鱼