- 相关推荐
EDA技术与应用课后习题答案
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<="0000";
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="10" THEN N_ST<=ST1;
ELSE N_ST<=ST0; END IF;
Q<="1001";
WHEN ST1=> IF DATAIN="11" THEN N_ST<=ST2;
ELSE N_ST<=ST1 ;END IF;
Q<="0101";
WHEN ST2=> IF DATAIN="01" THEN N_ST<=ST3;
ELSE N_ST<=ST0 ;END IF;
Q<="1100";
WHEN ST3=> IF DATAIN="00" THEN N_ST<=ST4;
ELSE N_ST<=ST2; END IF;
Q<="0010";
WHEN ST4=>IF DATAIN="11" THEN N_ST<=ST0;
ELSE N_ST<=ST3 ;END IF;
Q<="1001" ;
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<="10000";
ELSE Q<="01010" ; END IF;
WHEN st1=> IF DATAIN='0' THEN STX<=st2; END IF;
IF DATAIN='0' THEN Q<="10111";
ELSE Q<="10100" ; END IF;
WHEN st2=> IF DATAIN='1' THEN STX<=st3; END IF;
IF DATAIN='1' THEN Q<="10101";
ELSE Q<="10011" ; END IF;
WHEN st3=> IF DATAIN='0' THEN STX<=st4; END IF;
IF DATAIN='0' THEN Q<="11011";
ELSE Q<="01001"; END IF ;
WHEN st4=> IF DATAIN='1' THEN STX<=st0; END IF;
IF DATAIN='1' THEN Q<="11101";
ELSE Q<="01101"; END IF;
WHEN OTHERS=> STX<=st0; Q<="00000";
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位数据