资源预览内容
第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
第9页 / 共22页
第10页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
讲授:伍宗富讲授:伍宗富EDA技术技术 E D A 技技 术术 课课 程程 教教 学学讲授:伍宗富7/26/2024湖南文理学院电气与信息工程学院讲授:伍宗富讲授:伍宗富EDA技术技术第第 九九 讲讲 存储器与状态机设计存储器与状态机设计1.1. 教学目的教学目的:使学生掌握存储器与状态机的设计方法。使学生掌握存储器与状态机的设计方法。 2.2. 教学重点教学重点:存储器与状态机逻辑电路设计(存储器与状态机逻辑电路设计(SRAMSRAM与与A/DA/D转换控制)转换控制)3.3. 教学难点教学难点: A/DA/D转换控制。转换控制。4.4. 教学方法教学方法:讲授法、计算机辅助法。讲授法、计算机辅助法。5.5. 课时计划课时计划:2 2学时学时6.6. 使用教材使用教材:EDAEDA技术及应用谭会生等西安:西安电子科技大学出版社技术及应用谭会生等西安:西安电子科技大学出版社 7.7. 主要参考文献主要参考文献: 8.8. 1 1 徐光辉等徐光辉等CPLD/FPGACPLD/FPGA的开发和应用的开发和应用 MM北京:电子工业出版社北京:电子工业出版社9.9. 2 2 侯伯亨等侯伯亨等. .VHDLVHDL硬件描述语言与数字逻辑电路设计硬件描述语言与数字逻辑电路设计 M.M.西安:西安电子科技大学出版社西安:西安电子科技大学出版社10.10. 3 3 http:/www.altera.comhttp:/www.altera.com11.11. 4 4 周立功等周立功等SOPCSOPC嵌入式系统基础教程嵌入式系统基础教程 MM北京:北京航空航天大学出版社北京:北京航空航天大学出版社讲授:伍宗富讲授:伍宗富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; 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的的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); 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技术技术-写进程写进程 PROCESS(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设计设计讲授:伍宗富讲授:伍宗富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 STD_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_VECTOR(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) ISBEGIN 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) THEN 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=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的的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;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) 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)状态机状态机。摩尔状态机摩尔状态机:输出输出只是只是当前状态值当前状态值的函数,并且仅在的函数,并且仅在时钟时钟 边沿边沿到来时才发生变化到来时才发生变化。米立状态机米立状态机:输出则是输出则是当前状态值当前状态值、当前输出值当前输出值和和当前输当前输 入值入值的函数。的函数。注:对于这两类状态机,控制定序都取决于注:对于这两类状态机,控制定序都取决于当前状态当前状态和和输入信号输入信号。大多数实用的状态机都是。大多数实用的状态机都是同步的时序电路同步的时序电路,由时钟信号触发状态的转换。时钟信号同所有的的边沿由时钟信号触发状态的转换。时钟信号同所有的的边沿触发的状态寄存器和输出寄存器相连,这使得状态的改触发的状态寄存器和输出寄存器相连,这使得状态的改变发生在时钟的上升沿。变发生在时钟的上升沿。 此外,还利用此外,还利用组合逻辑的传播延迟组合逻辑的传播延迟实现状态机存储实现状态机存储功能的异步状态机,这样的状态机难于设计并且容易发功能的异步状态机,这样的状态机难于设计并且容易发生故障,所以一般用生故障,所以一般用同步时序状态机同步时序状态机。讲授:伍宗富讲授:伍宗富EDA技术技术四、状态机的四、状态机的VHDL设计设计 【例】【例】 基于状态机的基于状态机的ADC0809与与SRAM6264的通信控制器的设计。的通信控制器的设计。下图是该控制器下图是该控制器ADTOSRAM与与ADC0809及及SRAM6264接口示意图。接口示意图。讲授:伍宗富讲授:伍宗富EDA技术技术四、状态机的四、状态机的VHDL设计设计 【例】【例】 基于状态机的基于状态机的ADC0809与与SRAM6264的通信控制器的设计。的通信控制器的设计。-VHDL源程序源程序ADTOSRAM.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY 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 STD_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(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,WRITE1,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转换允许信号,高电平有效转换允许信号,高电平有效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设计设计 【例】【例】 基于状态机的基于状态机的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;-允许转换,转下一状态允许转换,转下一状态 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_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;讲授:伍宗富讲授:伍宗富EDA技术技术四、状态机的四、状态机的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将当前状态值带出此进程将当前状态值带出此进程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_WRITE; ELSE ENABLE=1; -SRAM地址计数器未满,允许地址计数器未满,允许A/D转换转换 RAM_NEXT_STATECS=1;WR=1;ADDRES_PLUS=0;ENABLE=1;-判断判断A/D转换周期是否结束转换周期是否结束 IF (ADC_END=1)THEN RAM_NEXT_STATE=WRITE2;-已结束已结束 ELSE RAM_NEXT_STATECS=0;WR=1;-打开打开SRAM片选信号片选信号 ENABLE=0;-禁止禁止A/D转换转换 ADDRES_PLUS=0;ADDRESS=ADDRES_CNT;-输出输出13位地址位地址 RAM_DIN=ADC_DATA; -8位已转换好的数据输向位已转换好的数据输向SRAM数据口数据口 RAM_NEXT_STATECS=0;WR=0; -打开写允许信号打开写允许信号 ENABLE=0; -仍然禁止仍然禁止A/D转换转换 ADDRES_PLUS=1; -产生地址加产生地址加1时钟上升沿,使地址计数器加时钟上升沿,使地址计数器加1 RAM_NEXT_STATECS=1;WR=1; ENABLE=1; -打开打开A/D转换允许开关转换允许开关 ADDRES_PLUS=0; -地址加地址加1时钟脉冲结束时钟脉冲结束 RAM_NEXT_STATE RAM_NEXT_STATE=START_WRITE; END CASE;END PROCESS RAM_WRITE;COUNTER:PROCESS(ADDRES_PLUS) -地址计数器加地址计数器加1进程进程BEGIN IF(RST=1)THEN ADDRES_CNT=0000000000000;-计数器复位计数器复位 ELSIF(ADDRES_PLUSEVENT AND ADDRES_PLUS=1)THEN ADDRES_CNT=ADDRES_CNT+1; END IF;END PROCESS COUNTER;END ARCHITECTURE ART;讲授:伍宗富讲授:伍宗富EDA技术技术课堂小结课堂小结一、一、ROM的的VHDL设计设计二、二、SRAM的的VHDL设计设计三、三、FIFO的的VHDL设计设计四、状态机的四、状态机的VHDL设计设计讲授:伍宗富讲授:伍宗富EDA技术技术课外作业:课外作业: 上机调试上机调试
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号