第9讲 存储器与状态机设计_第1页
第9讲 存储器与状态机设计_第2页
第9讲 存储器与状态机设计_第3页
第9讲 存储器与状态机设计_第4页
第9讲 存储器与状态机设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、讲授:戴正科讲授:戴正科EDA技术技术 E D A 技技 术术 课课 程程 教教 学学讲授:戴正科2021-11-6湖南文理学院电气与信息工程学院讲授:戴正科讲授:戴正科EDA技术技术第第 九九 讲讲 存储器与状态机设计存储器与状态机设计 教学目的教学目的:使学生掌握存储器与状态机的设计方法。使学生掌握存储器与状态机的设计方法。 教学重点教学重点:存储器与状态机逻辑电路设计(存储器与状态机逻辑电路设计(SRAMSRAM与与A/DA/D转换控制)转换控制) 教学难点教学难点: A/DA/D转换控制。转换控制。 教学方法教学方法:讲授法、计算机辅助法。讲授法、计算机辅助法。 课时计划课时计划:2

2、2学时学时 使用教材使用教材:EDAEDA技术及应用谭会生等西安:西安电子科技大学出版社技术及应用谭会生等西安:西安电子科技大学出版社 主要参考文献主要参考文献: 1 1 徐光辉等徐光辉等CPLD/FPGACPLD/FPGA的开发和应用的开发和应用MM北京:电子工业出版社北京:电子工业出版社 2 2 侯伯亨等侯伯亨等.VHDL.VHDL硬件描述语言与数字逻辑电路设计硬件描述语言与数字逻辑电路设计M.M.西安:西安电子科技大学出版社西安:西安电子科技大学出版社 3 3 http:/http:/ 4 4 周立功等周立功等SOPCSOPC嵌入式系统基础教程嵌入式系统基础教程MM北京:北京航空航天大学

3、出版社北京:北京航空航天大学出版社讲授:戴正科讲授:戴正科EDA技术技术课题:课题:存储器与状态机设计存储器与状态机设计一、一、ROM的的VHDL设计设计二、二、SRAM的的VHDL设计设计三、三、FIFO的的VHDL设计设计四、状态机的四、状态机的VHDL设计设计六、作业六、作业五五 、课堂小结、课堂小结讲授:戴正科讲授:戴正科EDA技术技术一、一、ROM的的VHDL设计设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ROM4 IS PORT(EN:IN STD_LOGIC;

4、ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY ROM4;ARCHITECTURE ART OF ROM4 IS BEGIN PROCESS(EN,ADDR) BEGIN IF EN=1 THEN CASE ADDR IS WHEN 00000000=DOUTDOUTDOUTDOUTDOUT= 00000000; END CASE; END IF; END PROCESS;END ARCHITECTURE ART;讲授:戴正科讲授:戴正科EDA技术技术二、二、SRAM的

5、的VHDL设计设计-8x8位双口位双口RAMLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SRAM IS GENERIC(WIDTH:INTEGER:=8; DEPTH:INTEGER:=8; ADDER:INTEGER:=3); PORT(DATAIN:IN STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); DATAOUT:OUT STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0);

6、 CLOCK:IN STD_LOGIC; WE,RE:IN STD_LOGIC; WADD:IN STD_LOGIC_VECTOR(ADDER-1 DOWNTO 0); RADD:IN STD_LOGIC_VECTOR(ADDER-1 DOWNTO 0);END ENTITY SRAM;ARCHITECTURE ART OF SRAM IS TYPE MEM IS ARRAY(0 TO DEPTH-1) OF STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); SIGNAL RAMTMP:MEM; BEGIN讲授:戴正科讲授:戴正科EDA技术技术-写进程写进程 PROCES

7、S(CLOCK) BEGIN IF (CLOCKEVENT AND CLOCK=1) THEN IF(WE=1)THEN RAMTMP(CONV_INTEGER(WADD)=DATAIN; END IF; END IF; END PROCESS;-读进程读进程 PROCESS(CLOCK) BEGIN IF(CLOCKEVENT AND CLOCK=1)THEN IF (RE=1) THEN DATAOUT=RAMTMP(CONV_INTEGER(RADD); END IF; END IF; END PROCESS;END ARCHITECTURE ART;二、二、SRAM的的VHDL设计设计

8、讲授:戴正科讲授:戴正科EDA技术技术三、三、FIFO的的VHDL设计设计- REG_FIFO .VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY REG_FIFO IS GENERIC(WIDTH:INTEGER:=8; DEPTH:INTEGER:=8; ADDR:INTEGER:=3); PORT(DATAIN:IN STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); DATAOUT:OUT ST

9、D_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); ACLR:IN STD_LOGIC; CLOCK:IN STD_LOGIC; WE:IN STD_LOGIC; RE:IN STD_LOGIC; FF:OUT STD_LOGIC;-满标志满标志 EF:OUT STD_LOGIC);-空标志空标志END ENTITY REG_FIFO;讲授:戴正科讲授:戴正科EDA技术技术三、三、FIFO的的VHDL设计设计ARCHITECTURE ART OF REG_FIFO IS TYPE MEM IS ARRAY(DEPTH-1 DOWNTO 0) OF STD_LOGIC_VECTO

10、R(WIDTH-1 DOWNTO 0); SIGNAL RAMTMP:MEM; SIGNAL WADD:STD_LOGIC_VECTOR(ADDR-1 DOWNTO 0); SIGNAL RADD:STD_LOGIC_VECTOR(ADDR-1 DOWNTO 0); -SIGNAL WORDS:STD_LOGIC_VECTOR(ADDR-1 DOWNTO 0); SIGNAL W,W1,R,R1:INTEGER RANGE 0 TO 8; BEGIN讲授:戴正科讲授:戴正科EDA技术技术三、三、FIFO的的VHDL设计设计WRITE_POINTER:PROCESS(ACLR,CLOCK) IS

11、BEGIN IF (ACLR=0) THEN WADD0); ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (WE=1) THEN -IF (WADD=WORDS) THEN IF (WADD=7) THEN WADD0); ELSE WADD=WADD+1; END IF; END IF; END IF; W=CONV_INTEGER(WADD); W1=W-1;END PROCESS WRITE_POINTER;-写操作进程写操作进程WRITE_RAM:PROCESS(CLOCK) ISBEGIN IF (CLOCKEVENT AND CLOCK=1) TH

12、EN IF (WE=1) THEN RAMTMP(CONV_INTEGER(WADD)=DATAIN; END IF; END IF;END PROCESS WRITE_RAM;-写指针修改进程写指针修改进程讲授:戴正科讲授:戴正科EDA技术技术三、三、FIFO的的VHDL设计设计-读指针修改读指针修改READ_POINIER:PROCESS(ACLR,CLOCK) ISBEGIN IF (ACLR=0) THEN RADD0); ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (RE=1) THEN -IF (RADD=WORDS) THEN IF (RADD=

13、7) THEN RADD0); ELSE RADD=RADD+1; END IF; END IF; END IF; R=CONV_INTEGER(RADD); R1=R-1;END PROCESS READ_POINIER;-读操作进程读操作进程READ_RAM:PROCESS(CLOCK)BEGIN IF (CLOCKEVENT AND CLOCK=1) THEN IF (RE=1) THEN DATAOUT=RAMTMP(CONV_INTEGER(RADD); END IF; END IF;END PROCESS READ_RAM;讲授:戴正科讲授:戴正科EDA技术技术三、三、FIFO的的

14、VHDL设计设计-产生满标志进程产生满标志进程FFLAG:PROCESS(ACLR,CLOCK)BEGIN IF (ACLR=0) THEN FF=0; ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (WE=1 AND RE=0) THEN -IF (WADD=RADD-1) OR (WADD=DEPTH-1) AND (RADD=0) THEN IF(W=R1)OR(WADD=CONV_STD_LOGIC_VECTOR(DEPTH-1,3) AND (RADD=000) THEN FF=1; END IF; ELSE FF=0; END IF; END IF;

15、END PROCESS FFLAG;讲授:戴正科讲授:戴正科EDA技术技术三、三、FIFO的的VHDL设计设计-产生空标志进程产生空标志进程EFLAG:PROCESS(ACLR,CLOCK) BEGIN IF (ACLR=0) THEN EF=0; ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (RE=1 AND WE=0) THEN -IF (WADD=RADD+1) OR (RADD=DEPTH-1)AND(WADD=0) THEN IF(R=W1)OR(RADD=CONV_STD_LOGIC_VECTOR(DEPTH-1,3) AND (WADD=000)

16、 THEN EF=1; END IF; ELSE EF=0; END IF; END IF;END PROCESS EFLAG;END ARCHITECTURE ART;讲授:戴正科讲授:戴正科EDA技术技术三、三、FIFO的的VHDL设计设计仿真结果:仿真结果:空标志空标志满标志满标志讲授:戴正科讲授:戴正科EDA技术技术四、状态机的四、状态机的VHDL设计设计v典型的状态机典型的状态机:摩尔摩尔(MOORE)状态机状态机和和米立米立(MEALY)状态机状态机。摩尔状态机摩尔状态机:输出输出只是只是当前状态值当前状态值的函数,并且仅在的函数,并且仅在时钟时钟 边沿边沿到来时才发生变化到来时才

17、发生变化。米立状态机米立状态机:输出则是输出则是当前状态值当前状态值、当前输出值当前输出值和和当前输当前输 入值入值的函数。的函数。注:对于这两类状态机,控制定序都取决于注:对于这两类状态机,控制定序都取决于当前状态当前状态和和输入信号输入信号。大多数实用的状态机都是。大多数实用的状态机都是同步的时序电路同步的时序电路,由时钟信号触发状态的转换。时钟信号同所有的的边沿由时钟信号触发状态的转换。时钟信号同所有的的边沿触发的状态寄存器和输出寄存器相连,这使得状态的改触发的状态寄存器和输出寄存器相连,这使得状态的改变发生在时钟的上升沿。变发生在时钟的上升沿。 此外,还利用此外,还利用组合逻辑的传播延

18、迟组合逻辑的传播延迟实现状态机存储实现状态机存储功能的异步状态机,这样的状态机难于设计并且容易发功能的异步状态机,这样的状态机难于设计并且容易发生故障,所以一般用生故障,所以一般用同步时序状态机同步时序状态机。讲授:戴正科讲授:戴正科EDA技术技术四、状态机的四、状态机的VHDL设计设计 【例】【例】 基于状态机的基于状态机的ADC0809与与SRAM6264的通信控制器的设计。的通信控制器的设计。下图是该控制器下图是该控制器ADTOSRAM与与ADC0809及及SRAM6264接口示意图。接口示意图。STARTADC0809DIN7.0DIN7.0EOCEOCADTOSRAM通信控制器SRA

19、M6264ADC0809ADDRESS12.0RAM_DIN7.0WRWRRDRDADDAADDRESS12.0RAM_DIN7.0SRAM6264CSCSCLKRSTSTARTOEADDAALEOEALE讲授:戴正科讲授:戴正科EDA技术技术四、状态机的四、状态机的VHDL设计设计 【例】【例】 基于状态机的基于状态机的ADC0809与与SRAM6264的通信控制器的设计。的通信控制器的设计。-VHDL源程序源程序ADTOSRAM.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTIT

20、Y ADTOSRAM IS PORT( -ADC0809接口信号接口信号 DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -0809转换数据输入口转换数据输入口 CLK,EOC:IN STD_LOGIC; -CLK:状态机工作时钟;:状态机工作时钟;EOC:转换结束状态信号:转换结束状态信号 RST:IN STD_LOGIC; -系统复位信号系统复位信号 ALE:OUT STD_LOGIC; -0809采样通道选择地址锁存信号采样通道选择地址锁存信号 START:OUT STD_LOGIC; -0809采样启动信号,上升沿有效采样启动信号,上升沿有效 OE:OUT S

21、TD_LOGIC;-转换数据输出使能,接转换数据输出使能,接0809的的ENABLE(PIN 9) ADDA:OUT STD_LOGIC; -0809采样通道地址最低位采样通道地址最低位 -SRAM 6264接口信号接口信号 CS:OUT STD_LOGIC; -6264片选控制信号,低电平有效片选控制信号,低电平有效 RD,WR:OUT STD_LOGIC;-6264读读/写控制信号,低电平有效写控制信号,低电平有效 RAM_DIN:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-6264数据写入端口数据写入端口 ADDRESS:OUT STD_LOGIC_VECTOR(

22、12 DOWNTO 0);-地址输出端口地址输出端口END ENTITY ADTOSRAM;讲授:戴正科讲授:戴正科EDA技术技术四、状态机的四、状态机的VHDL设计设计 【例】【例】 基于状态机的基于状态机的ADC0809与与SRAM6264的通信控制器的设计。的通信控制器的设计。-VHDL源程序源程序ADTOSRAM.VHDARCHITECTURE ART OF ADTOSRAM ISTYPE AD_STATES IS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7);-A/D转换状态定义转换状态定义TYPE WRIT_STATES IS (START_WRITE,WRIT

23、E1,WRITE2,WRITE3,WRITE_END); -SRAM数据写入控制状态定义数据写入控制状态定义SIGNAL RAM_CURRENT_STATE,RAM_NEXT_STATE:WRIT_STATES; SIGNAL ADC_CURRENT_STATE,ADC_NEXT_STATE:AD_STATES;SIGNAL ADC_END:STD_LOGIC; -0809数据转换结束并锁存标志位,高电平有效数据转换结束并锁存标志位,高电平有效SIGNAL LOCK:STD_LOGIC; -转换后数据输出锁存信号转换后数据输出锁存信号SIGNAL ENABLE:STD_LOGIC; -A/D转

24、换允许信号,高电平有效转换允许信号,高电平有效SIGNAL ADDRES_PLUS:STD_LOGIC;-SRAM地址加地址加1时钟信号时钟信号SIGNAL ADC_DATA:STD_LOGIC_VECTOR(7 DOWNTO 0);-转换数据读入锁存器转换数据读入锁存器SIGNAL ADDRES_CNT:STD_LOGIC_VECTOR(12 DOWNTO 0);-SRAM地址锁存器地址锁存器BEGIN ADDA=1;-ADDA=1,ADDB=0,ADDC=0选选A/D采样通道为采样通道为IN-1 RD=1; 讲授:戴正科讲授:戴正科EDA技术技术四、状态机的四、状态机的VHDL设计设计 【

25、例】【例】 基于状态机的基于状态机的ADC0809与与SRAM6264的通信控制器的设计。的通信控制器的设计。-VHDL源程序源程序ADTOSRAM.VHD-ADC0809采样控制状态机采样控制状态机 ADC:PROCESS(ADC_CURRENT_STATE,EOC,ENABLE) -A/D转换状态机组合电路进程转换状态机组合电路进程BEGIN IF (RST=1) THEN ADC_NEXT_STATEALE=0;START=0;OE=0;LOCK=0;ADC_END=0;-A/D转换初始化转换初始化 IF (ENABLE=1) THEN ADC_NEXT_STATE=ST1;-允许转换,

26、转下一状态允许转换,转下一状态 ELSE ADC_NEXT_STATEALE=1;START=0;OE=0;LOCK=0;ADC_END=0; ADC_NEXT_STATEALE=1;START=1;OE=0;LOCK=0;ADC_END=0; ADC_NEXT_STATEALE=1;START=1;OE=0;LOCK=0;ADC_END=0;-延迟一个脉冲周期延迟一个脉冲周期 IF (EOC=0) THEN ADC_NEXT_STATE=ST4; ELSE ADC_NEXT_STATEALE=0;START=0;OE=0;LOCK=0;ADC_END=0; IF(EOC=0)THEN ADC

27、_NEXT_STATE=ST5;-转换结束,转下一状态转换结束,转下一状态 ELSE ADC_NEXT_STATEALE=0;START=0;OE=1;LOCK=1;ADC_END=1; ADC_NEXT_STATEALE=0;START=0;OE=1;LOCK=1;ADC_END=1; ADC_NEXT_STATEALE=0;START=0;OE=1;LOCK=1;ADC_END=1; ADC_NEXT_STATEADC_NEXT_STATE=ST0;-所有闲置状态导入初始态所有闲置状态导入初始态 END CASE; END IF;END PROCESS ADC;讲授:戴正科讲授:戴正科ED

28、A技术技术四、状态机的四、状态机的VHDL设计设计 【例】【例】 基于状态机的基于状态机的ADC0809与与SRAM6264的通信控制器的设计。的通信控制器的设计。-VHDL源程序源程序ADTOSRAM.VHDAD_STATE:PROCESS(CLK) -A/D转换状态机时序电路进程转换状态机时序电路进程BEGIN IF(CLKEVENT AND CLK=1)THEN ADC_CURRENT_STATE=ADC_NEXT_STATE;-在时钟上升沿,转至下一状态在时钟上升沿,转至下一状态 END IF;END PROCESS AD_STATE;-由信号由信号CURRENT_STATE将当前状态

29、值带出此进程将当前状态值带出此进程DATA_LOCK:PROCESS(LOCK) BEGIN-此进程中,在此进程中,在LOCK的上升沿,将转换好的数据锁入锁存器的上升沿,将转换好的数据锁入锁存器ADC_DATA中中 IF (LOCK=1AND LOCKEVENT) THEN ADC_DATA=DIN; END IF;END PROCESS DATA_LOCK;-SRAM数据写入控制状态机数据写入控制状态机WRIT_STATE:PROCESS(CLK,RST)-SRAM写入控制状态机时序电路进程写入控制状态机时序电路进程BEGIN IF RST=1 THEN RAM_CURRENT_STATE=START_WRITE;-系统复位系统复位 ELSIF(CLKEVENT AND CLK=1) THEN RAM_CURRENT_STATECS=1;WR=1;ADDRES_PLUS=0; IF (ADDRES_CNT=1111111111111) THEN -数据写入初始化数据写入初始化 ENABLE=0; -SRAM地址计数器已满,禁止地址计数器已满,禁止A/D转换转换 RAM_NEXT_STATE=START_WRI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论