QQ<=(OTHERS=>‘0’);ENDIF;ENDPROCESS;Q1<=QQ;END;
………………………(2)电平触发复位信号…………………….
ARCHITECTUREbhv0FDFF3ISSIGNALQQ:STD_LOGIC;BEGIN
PROCESS(CLK)BEGIN
IFRST=‘1'THEN
QQ<=(OTHERS=>‘0’);ENDIF;ENDPROCESS;Q1<=QQ;END;
………………………
6-7什么是重载函数?重载算符有何用处?如何调用重载算符函数?答:(1)什么是重载函数?根据操作对象变换处理功能。
(2)重载算符有何用处?用于两个不同类型的操作数据自动转换成同种数据类型,并进行运算处理。(3)如何调用重载算符函数?采用隐式方式调用,无需事先声明。
6-8判断下面三个程序中是否有错误,若有则指出错误所在,并给出完整程序。程序1:
SignalA,EN:std_logic;…………………Process(A,EN)
VariableB:std_logic;Begin
ifEN=lthenB<=A;endif;--将“B<=A”改成“B:=A”endprocess;程序2:
Architectureoneofsampleisvariablea,b,c:integer;begin
c<=a+b;--将“c<=a+b”改成“c:=a+b”end;程序3:libraryieee;
useieee.std_logic_1164.all;entitymux21is
PORT(a,b:instd_logic;sel:instd_loglc;c:outstd_logle;);--将“;)”改成“)”endsam2;--将“sam2”改成“entitymux21”architectureoneofmux2lisbegin
--增加“process(a,b,sel)begin”
ifsel='0'thenc:=a;elsec:=b;endif;--应改成“ifsel='0'thenc<=a;elsec<=b;endif;”
endtwo;
--增加“endprocess;”
--将“two”改成“architectureone”
7-2LPM_ROM、LPM_RAM、LPM_FIFO等模块与FPGA中嵌入的EAB、ESB、M4K有怎样的联系?答:ACEXlK系列为EAB;APEX20K系列为ESB;Cyclone系列为M4K
第八章
8-1仿照例8-1,将例8-4单进程用两个进程,即一个时序进程,一个组合进程表达出来。--解:【例8-4】的改写如下:LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;ENTITYMOORE1IS
PORT(DATAIN:INSTD_LOGIC_VECTOR(1DOWNTO0);
CLK,RST:INSTD_LOGIC;
Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDMOORE1;
ARCHITECTUREbehavOFMOORE1IS
TYPEST_TYPEIS(ST0,ST1,ST2,ST3,ST4);SIGNALC_ST,N_ST:ST_TYPE;BEGIN
REG:PROCESS(CLK,RST)BEGIN
IFRST='1'THENC_ST<=ST0;--Q<=\ELSIFCLK'EVENTANDCLK='1'THENC_ST<=N_ST;ENDIF;
ENDPROCESSREG;
COM:PROCESS(C_ST,DATAIN)BEGIN
CASEC_STIS
WHENST0=>IFDATAIN=\THENN_ST<=ST1;
ELSEN_ST<=ST0;ENDIF;Q<=\
WHENST1=>IFDATAIN=\THENN_ST<=ST2;
ELSEN_ST<=ST1;ENDIF;Q<=\
WHENST2=>IFDATAIN=\THENN_ST<=ST3;
ELSEN_ST<=ST0;ENDIF;Q<=\
WHENST3=>IFDATAIN=\THENN_ST<=ST4;
ELSEN_ST<=ST2;ENDIF;Q<=\
WHENST4=>IFDATAIN=\THENN_ST<=ST0;
ELSEN_ST<=ST3;ENDIF;Q<=\;
WHENOTHERS=>N_ST<=ST0;
ENDCASE;
ENDPROCESSCOM;ENDbehav;
8-2为确保例8-5(2进程Mealy型状态机)的状态机输出信号没有毛刺,试用例8-4的方式构成一个单进程状态,使输出信号得到可靠锁存,在相同输入信号条件下,给出两程序的仿真波形。--解:【例8-5】改写如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;ENTITYMEALY1IS
PORT(CLK,DATAIN,RESET:INSTD_LOGIC;
Q:OUTSTD_LOGIC_VECTOR(4DOWNTO0));
ENDMEALY1;
ARCHITECTUREbehavOFMEALY1IS
TYPEstatesIS(st0,st1,st2,st3,st4);SIGNALSTX:states;BEGIN
PROCESS(CLK,RESET)--单一进程BEGIN
IFRESET='1'THENSTX<=ST0;
ELSIFCLK'EVENTANDCLK='1'THENCASESTXIS
WHENst0=>IFDATAIN='1'THENSTX<=st1;ENDIF;
IFDATAIN='1'THENQ<=\ELSEQ<=\;ENDIF;
WHENst1=>IFDATAIN='0'THENSTX<=st2;ENDIF;
IFDATAIN='0'THENQ<=\ELSEQ<=\;ENDIF;
WHENst2=>IFDATAIN='1'THENSTX<=st3;ENDIF;
IFDATAIN='1'THENQ<=\ELSEQ<=\;ENDIF;
WHENst3=>IFDATAIN='0'THENSTX<=st4;ENDIF;
IFDATAIN='0'THENQ<=\ELSEQ<=\ENDIF;
WHENst4=>IFDATAIN='1'THENSTX<=st0;ENDIF;
IFDATAIN='1'THENQ<=\ELSEQ<=\ENDIF;
WHENOTHERS=>STX<=st0;Q<=\ENDCASE;ENDIF;ENDPROCESS;ENDbehav;
图8-6控制ADC0809采样状态图
--【例8-2】根据图8-6状态图,采用Moore型状态机,设计ADC0809采样控制器。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;ENTITYADCINTIS
PORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);--来自0809转换好的8位数据
CLK:INSTD_LOGIC;--状态机工作时钟EOC:INSTD_LOGIC;--转换状态指示,低电平表示正在转换ALE:OUTSTD_LOGIC;--8个模拟信号通道地址锁存信号START:OUTSTD_LOGIC;--转换开始信号
OE:OUTSTD_LOGIC;--数据输出三态控制信号ADDA:OUTSTD_LOGIC;--信号通道最低位控制信号LOCK0:OUTSTD_LOGIC;--观察数据锁存时钟
Q:OUTSTD_LOGIC_VECTOR(7DOWNTO0));--8位数据输出ENDADCINT;
ARCHITECTUREbehavOFADCINTIS
TYPEstatesIS(st0,st1,St2,st3,st4);--定义各状态子类型SIGNALcurrent_state,next_state:states:=st0;SIGNALREGL:STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALLOCK:STD_LOGIC;--转换后数据输出锁存时钟信号BEGIN
ADDA<='1';--当ADDA<='0',模拟信号进入通道IN0;当ADDA<='1',则进入通道INIQ<=REGL;LOCK0<=LOCK;
COM:PROCESS(current_state,EOC)BEGIN--规定各状态转换方式CASEcurrent_stateIS
WHENst0=>ALE<='0';START<='0';LOCK<='0';OE<='0';
next_state<=st1;--0809初始化
WHENst1=>ALE<='1';START<='1';LOCK<='0';OE<='0';
next_state<=st2;--启动采样
WHENst2=>ALE<='0';START<='0';LOCK<='0';OE<='0';
IF(EOC='1')THENnext_state<=st3;--EOC=1表明转换结束ELSEnext_state<=st2;ENDIF;--转换未结束,继续等待
WHENst3=>ALE<='0';START<='0';LOCK<='0';OE<='1';
next_state<=st4;--开启OE,输出转换好的数据

