QQ<=(OTHERS=>‘0’);
END IF; END PROCESS; Q1<=QQ; END;
……………………… (2)电平触发复位信号 …………………….
ARCHITECTURE bhv 0F DFF3 IS SIGNAL QQ:STD_LOGIC; BEGIN
PROCESS(CLK) BEGIN
IF RST=‘1' THEN
QQ<=(OTHERS=>‘0’);
END IF; END PROCESS; Q1<=QQ; END;
………………………
6-7 什么是重载函数?重载算符有何用处?如何调用重载算符函数? 答:(1)什么是重载函数? 根据操作对象变换处理功能。
(2)重载算符有何用处? 用于两个不同类型的操作数据自动转换成同种数据类型,并进行运算处理。 (3)如何调用重载算符函数?采用隐式方式调用,无需事先声明。
6-8 判断下面三个程序中是否有错误,若有则指出错误所在,并给出完整程序。 程序1:
Signal A,EN : std_logic; ………………… Process(A, EN)
Variable B: std_log ic; Begin
if EN=l then B<=A; end if; --将?B<=A?改成?B:=A? end process; 程序2:
Architecture one of sample is variable a,b,c:integer; begin
c<=a+b; --将?c<=a+b?改成?c:=a+b? end; 程序3:
library ieee;
use ieee.std_logic_1164.all; entity mux21 is
PORT(a,b:in std_logic; sel:in std_loglc;c:out std_logle;); --将?;)?改成?)? end sam2; --将?sam2?改成?entity mux21? architecture one of mux2l is begin
--增加?process(a,b,sel) begin?
if sel= '0' then c:=a; else c:=b; end if; --应改成?if sel= '0' then c<=a; else c<=b; end if;?
--增加?end process;?
end two; --将?two?改成?architecture one?
7-2 LPM_ROM、LPM_RAM、LPM_FIFO等模块与FPGA中嵌入的EAB、ESB、M4K有怎样的联系? 答:ACEXlK系列为EAB;APEX20K系列为ESB;Cyclone系列为M4K
第八章
8-1仿照例8-1,将例8-4单进程用两个进程,即一个时序进程,一个组合进程表达出来。 --解:【例8-4】的改写如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY MOORE1 IS
PORT(DATAIN: IN STD_LOGIC_VECTOR(1 DOWNTO 0); CLK,RST: IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END MOORE1;
ARCHITECTURE behav OF MOORE1 IS
TYPE ST_TYPE IS (ST0,ST1,ST2,ST3,ST4); SIGNAL C_ST,N_ST: ST_TYPE; BEGIN
REG: PROCESS(CLK,RST) BEGIN
IF RST='1' THEN C_ST<=ST0; -- Q<=\ ELSIF CLK'EVENT AND CLK='1' THEN C_ST<=N_ST; END IF;
END PROCESS REG;
COM: PROCESS(C_ST,DATAIN) BEGIN
CASE C_ST IS
WHEN ST0=> IF DATAIN=\ ELSE N_ST<=ST0; END IF; Q<=\
WHEN ST1=> IF DATAIN=\ ELSE N_ST<=ST1 ;END IF; Q<=\
WHEN ST2=> IF DATAIN=\ ELSE N_ST<=ST0 ;END IF; Q<=\
WHEN ST3=> IF DATAIN=\ ELSE N_ST<=ST2; END IF; Q<=\
WHEN ST4=>IF DATAIN=\ ELSE N_ST<=ST3 ;END IF; Q<=\ WHEN OTHERS=> N_ST<=ST0;
END CASE;
END PROCESS COM; END behav;
8-2为确保例8-5(2进程Mealy型状态机)的状态机输出信号没有毛刺,试用例8-4的方式构成一个单进程状态,使输出信号得到可靠锁存,在相同输入信号条件下,给出两程序的仿真波形。 --解:【例8-5】改写如下: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY MEALY1 IS
PORT(CLK,DATAIN,RESET: IN STD_LOGIC;
Q:OUT STD_LOGIC_VECTOR(4 DOWNTO 0)); END MEALY1;
ARCHITECTURE behav OF MEALY1 IS
TYPE states IS (st0,st1,st2,st3,st4); SIGNAL STX: states; BEGIN
PROCESS(CLK,RESET) --单一进程 BEGIN
IF RESET='1' THEN STX<=ST0;
ELSIF CLK'EVENT AND CLK='1' THEN CASE STX IS
WHEN st0=> IF DATAIN='1' THEN STX<=st1; END IF; IF DATAIN='1' THEN Q<=\
ELSE Q<=\ WHEN st1=> IF DATAIN='0' THEN STX<=st2; END IF; IF DATAIN='0' THEN Q<=\
ELSE Q<=\ WHEN st2=> IF DATAIN='1' THEN STX<=st3; END IF; IF DATAIN='1' THEN Q<=\
ELSE Q<=\ WHEN st3=> IF DATAIN='0' THEN STX<=st4; END IF; IF DATAIN='0' THEN Q<=\
ELSE Q<=\ WHEN st4=> IF DATAIN='1' THEN STX<=st0; END IF; IF DATAIN='1' THEN Q<=\
ELSE Q<=\ WHEN OTHERS=> STX<=st0; Q<=\ END CASE; END IF; END PROCESS; END behav;
图8-6控制ADC0809采样状态图
-- 【例8-2】根据图8-6状态图,采用Moore型状态机,设计ADC0809采样控制器。 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY ADCINT IS
PORT(D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); --来自0809转换好的8位数据 CLK: IN STD_LOGIC; --状态机工作时钟
EOC: IN STD_LOGIC; --转换状态指示,低电平表示正在转换 ALE:OUT STD_LOGIC; --8个模拟信号通道地址锁存信号 START:OUT STD_LOGIC; --转换开始信号
OE:OUT STD_LOGIC; --数据输出三态控制信号 ADDA:OUT STD_LOGIC; --信号通道最低位控制信号 LOCK0:OUT STD_LOGIC; --观察数据锁存时钟
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8位数据输出 END ADCINT;
ARCHITECTURE behav OF ADCINT IS
TYPE states IS(st0,st1,St2,st3,st4); --定义各状态子类型 SIGNAL current_state,next_state: states:=st0; SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK: STD_LOGIC;--转换后数据输出锁存时钟信号 BEGIN
ADDA<='1';--当ADDA<='0',模拟信号进入通道IN0;当ADDA<='1',则进入通道INI Q<=REGL;LOCK0<=LOCK;
COM: PROCESS(current_state,EOC) BEGIN --规定各状态转换方式 CASE current_state IS
WHEN st0=> ALE<='0';START<='0';LOCK<='0';OE<='0'; next_state<=st1; --0809初始化
WHEN st1=> ALE<='1';START<='1';LOCK<='0';OE<='0'; next_state<=st2 ;--启动采样
WHEN st2=> ALE<='0';START<='0';LOCK<='0'; OE<='0';
IF(EOC='1') THEN next_state<=st3;--EOC=1表明转换结束 ELSE next_state<=st2; END IF; --转换未结束,继续等待 WHEN st3=> ALE<='0';START<='0';LOCK<='0';OE<='1';
next_state<=st4;--开启OE,输出转换好的数据

