1-3 什么是综合?有哪些类型?综合在电子设计自动化中的地位是什么?
1-4 在EDA技术中,自顶向下的设计方法的重要意义是什么?
1-3 答:(1)综合,就字面含义应该是把抽象的实体结合成单个或统一的实体。在电子设计领域中,综合的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
(2)类型,①从自然语言转换到VHDL语言算法表示,即自然语言综。②从算法表示转换到寄存器传输级(Register Transport Level,RLT)表述,即从行为域到结构域的综合,即行为综合。③从RLT级表述转换到逻辑门(包括触发器)的表述,即逻辑综合。④从逻辑门表示转换到版图级表述(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合。
(3)在电子设计自动化中是核心地位。综合器具有更复杂的工作环境。综合器在接受VHDL程序并准备对其综合前,必须获得与最终实现设计电路硬件特征相关的工艺库的信息,以及获得优化综合的诸多约束条件。根据工艺库和约束条件,将VHDL程序转化成电路实现的相关信息。
1-4 答:在EDA技术应用中,自顶向下的设计方法,就是在整个设计流程中各设计环节逐步求精的过程。
1-5 IP在EDA技术的应用和发展中的意义是什么?
1-6 叙述EDA的FPGA/CPLD设计流程,以及涉及的EDA工具及其在整个流程中的作用。
1-5 答:IP和具有规范的接口协议,良好的可移植与可测性,为系统开发提供了可靠的保证。
1-6 答:①1.设计输入(原理图/HDL文本编辑);2.综合;3.适配;4.时序仿真与功能仿真;5.编辑下载;6.硬件测试。
②基于FPGA/CPLD的EDA设计流程中所涉及的EDA工具有:设计输入编辑器(作用:接受不同的设计输入表达方式,如原理图输入方式,状态图输入方式,波形输入方式以及HDL的文本输入方式。);HDL综合器(作用:HDL综合器根据工艺库和约束条件信息,将设计输入编辑器提供的信息转化为目标器件硬件结构细节的信息,并在数字电路设计技术,化简优化算法以及计算机软件等复杂结体进行优化处理);仿真器(作用:行为模型的表达,电子系统的建模,逻辑电路的验证及门级系统的验证);适配器(作用:完成目标系统在器件上的布局和布线);下载器(作用:把设计结果信息下载到对应的实际器件,实现硬件设计)。
2-2 什么是基于乘积项的可编程逻辑结构?什么是基于查找表的可编程逻辑结构?
2-5 解释编程与配置这两个概念。
2-2 答:(1)GAL、CPLD之类都是基于乘积项的可编程结构;即包含有可编程与阵列和固定的或阵列的PAL(可编程阵列逻辑)器件构成。
(2)FPGA(现场可编程门阵列)是基于查找表的可编程逻辑结构。FPGA(Cyclone/Cyclone II)系列器件主要由逻辑阵列块LAB、嵌入式存储器块(EAB)、I/O单元、嵌入式硬件乘法器和PLL等模块构成。
2-5 答:(1)编程:基于电可擦除存储单元的EEPROM或Flash技术。CPLD一股使用此技术进行编程。CPLD被编程后改变了电可擦除存储单元中的信息,掉电后可保存。电可擦除编程工艺的优点是编程后信息不会因掉电而丢失,但编程次数有限,编程的速度不快。
(2) 配置:基于SRAM查找表的编程单元。编程信息是保存在SRAM中的,SRAM在掉电后编程信息立即丢失,在下次上电后,还需要重新载入编程信息。大部分FPGA采用该种编程工艺。该类器件的编程一般称为配置。对于SRAM型FPGA来说,配置次数无限,且速度快;在加电时可随时更改逻辑;下载信息的保密性也不如电可擦除的编程。
3-3 试分别用IF_THEN语句,WHEN_ELSE和CASE语句的表达式写出4选1多路选择器的VHDL程序,选通控制端有4个输入:S0.S1.S2.S3。当且仅当S0=时:Y=A;S1=0时:Y=B;S2=0时:Y=C;S3=0时:Y=D。
3-4 (1),(2)
3-3 解:LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux41 IS
PORT (a,b,c,d: IN STD_LOGIC;
s0: IN STD_LOGIC;
s1: IN STD_LOGIC;
y: OUT STD_LOGIC);
END ENTITY mux41;
ARCHITECTURE case_mux41 OF mux41 IS
SIGNAL s0s1 : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
s0s1<=s1&s0;
PROCESS(s0s1,a,b,c,d)
BEGIN
CASE s0s1 IS
WHEN "00" => y <= a;
WHEN "01" => y <= b;
WHEN "10" => y <= c;
WHEN "11" => y <= d;
WHEN OTHERS =>NULL;
END CASE;
END PROCESS;
END ARCHITECTURE case_mux41;
3-4 解:IBRARY IEEE; --1位二进制全减器顺层设计描述
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY f_suber IS
PORT(xin,yin,sub_in: IN STD_LOGIC;
sub_out,diff_out: OUT STD_LOGIC);
END ENTITY f_suber;
ARCHITECTURE fs1 OF f_suber IS
COMPONENT h_suber --调用半减器声明语句
PORT(x, y: IN STD_LOGIC;
diff,s_out: OUT STD_LOGIC);
END COMPONENT;
SIGNAL a,b,c: STD_LOGIC; --定义1个信号作为内部的连接线。
BEGIN
u1: h_suber PORT MAP(x=>xin,y=>yin, diff=>a, s_out=>b);
u2: h_suber PORT MAP(x=>a, y=>sub_in, diff=>diff_out,s_out=>c);
sub_out <= c OR b;
END ARCHITECTURE fs1;
(2):
LIBRARY IEEE; --1位二进制全减器顺层设计描述
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY f_suber IS
PORT(xin,yin,sub_in: IN STD_LOGIC;
sub_out,diff_out: OUT STD_LOGIC);
END ENTITY f_suber;
ARCHITECTURE fs1 OF f_suber IS
COMPONENT h_suber --调用半减器声明语句
PORT(x, y: IN STD_LOGIC;
diff,s_out: OUT STD_LOGIC);
END COMPONENT;
SIGNAL a,b,c: STD_LOGIC; --定义1个信号作为内部的连接线。
BEGIN
u1: h_suber PORT MAP(x=>xin,y=>yin, diff=>a, s_out=>b);
u2: h_suber PORT MAP(x=>a, y=>sub_in, diff=>diff_out,s_out=>c);
sub_out <= c OR b;
END ARCHITECTURE fs1;
3-5 用VHDL设计一个3-8译码器,要求分别用顺序赋值语句,case语句,if_else语句或移位操作符来完成。比较着四种方式中,哪一种醉节省逻辑资源。
3-14 用赋值语句设计一个7人投票表决器。
3-5 解(1):顺序赋值语句
3到8译码器设计(顺序赋值语句实现)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY decoder3to8 IS
port(DIN: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
DOUT: OUT BIT_VECTOR(7 DOWNTO 0));
END decoder3to8;
ARCHITECTURE behave OF decoder3to8 IS
BEGIN
WITH CONV_INTEGER(DIN) SELECT
DOUT<="00000001" WHEN 0,
"00000010" WHEN 1,
"00001000" WHEN 3,
"00010000" WHEN 4,
"00100000" WHEN 5,
"01000000" WHEN 6,
"10000000" WHEN 7,
UNAFFECTED WHEN OTHERS;
END behave;
(2):case语句
3到8译码器设计(case语句实现)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY decoder3to8 IS
port(DIN: IN
STD_LOGIC_VECTOR(2 DOWNTO 0);
DOUT: OUT BIT_VECTOR(7 DOWNTO 0));
END decoder3to8;
ARCHITECTURE behave OF decoder3to8 IS
BEGIN
PROCESS (DIN)
BEGIN
CASE CONV_INTEGER(DIN) IS
WHEN 0 => DOUT<="00000001";
WHEN 1 => DOUT<="00000010";
WHEN 2 => DOUT<="00000100";
WHEN 3 => DOUT<="00001000";
WHEN 4 => DOUT<="00010000";
WHEN 5 => DOUT<="00100000";
WHEN 6 => DOUT<="01000000";
WHEN 7 => DOUT<="10000000";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END behave;
(3):if_else语句
3到8译码器设计(if_else语句实现)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY decoder3to8 IS
port( DIN: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
DOUT: OUT BIT_VECTOR(7 DOWNTO 0));
END decoder3to8;
ARCHITECTURE behave OF decoder3to8 IS
BEGIN
PROCESS (DIN)
BEGIN
IF CONV_INTEGER(DIN)=0 THEN DOUT<="00000001";
ELSIF CONV_INTEGER(DIN)=1 THEN DOUT<="00000010";
ELSIF CONV_INTEGER(DIN)=2 THEN DOUT<="00000100";
ELSIF CONV_INTEGER(DIN)=3 THEN DOUT<="00001000";
ELSIF CONV_INTEGER(DIN)=4 THEN DOUT<="00010000";
ELSIF CONV_INTEGER(DIN)=5 THEN DOUT<="00100000";
ELSIF CONV_INTEGER(DIN)=6 THEN DOUT<="01000000";
ELSIF CONV_INTEGER(DIN)=7 THEN DOUT<="10000000";
END IF;
END PROCESS;
END behave;
(4):移位操作符
3到8译码器设计(移位操作实现)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY decoder3to8 IS
port( DIN: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
DOUT: OUT BIT_VECTOR(7 DOWNTO 0));
END decoder3to8;
ARCHITECTURE behave OF decoder3to8 IS
BEGIN
DOUT<="00000001" SLL CONV_INTEGER(DIN);
END behave;
3-14 解:LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY vote_7 IS
PORT( DIN:
IN STD_LOGIC_VECTOR(6 DOWNTO 0);
G_4: OUT STD_LOGIC;
CNTH: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END vote_7;
ARCHITECTURE BHV OF vote_7 IS
BEGIN
PROCESS(DIN)
VARIABLE Q: STD_LOGIC_VECTOR(2 DOWNTO 0);
BEGIN
Q:="000";
FOR n IN 0 TO 6 LOOP
IF(DIN(n)='1') THEN Q:=Q+1; END IF;
END LOOP;
CNTH<=Q;
IF Q>=4 THEN G_4<='1'; ELSE G_4<='0'; END IF;
END PROCESS;
END BHV;
4-1 归纳利用Quartus II进行VHDL文本输入设计的流程:从文件输入一直到硬件功能测试。P96~P110
答:1 建立工作库文件夹和编辑设计文件;2 创建工程;3 编译前设置;4 全程编译;5 时序仿真;6 引脚锁定;7 配置文件下载;8 打开SignalTap II编辑窗口;9 调入SignalTap II的待测信号;10 SignalTap II参数设置;11 SignalTap II参数设置文件存盘;12 带有SignalTap II测试信息的编译下载;13 启动SignalTap II进行采样与分析;14 SignalTap II的其他设置和控制方法。
5-1 在VHDL设计中,给时序电路清0(复位)有两种不同方法,它们是什么?如何实现?
5-7 用VHDL设计一个功能类似74LS160的计数器。
5-8 给出含有异步清0和计数使能的16位二进制加减可控计数器的VHDL描述。
5-1.答:
同步复位和异步复位。同步复位是指与 时钟同步 ,当复位信号有效之后,出现时钟有效边沿时才对电路模块进行复位操作;而异步复位与 时钟信号 无关,只要复位信号有效,无论这时时钟信号是什么样,都对电路模块进行复位操作。
同步复位 D触发器 :
IF clock'event AND clock='1' THEN
IF reset_n='0' THEN q <= (OTHERS => '0');
ELSE q <= d;
END IF;
END IF;
异步复位D触发器:
IF reset_n='0' THEN q <= (OTHERS => '0');
ELSIF clock'event AND clock='1' THEN q <= d;
END IF;
5-7.答:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT10 IS
PORT(CLK,RST,EN,LOAD : IN STD_LOGIC;
DATA : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT : OUT STD_LOGIC);
ARCHITECTURE behav OF CNT10 IS
BEGIN
PROCESS(CLK,RST,EN,LOAD)
VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST='0' THEN Q:=(OTHERS =>'0');
ELSIF CLK'EVENT AND CLK='1' THEN
IF EN='1' THEN
IF LOAD='0' THEN Q:=DATA;
ELSE
IF Q<9 THEN Q:=Q+1;
ELSE Q:=(OTHERS=>'0');
END IF;
END IF;
END IF;
END IF;
IF Q=9 THEN COUT<='1';
ELSE COUT<='0';
END IF;
DOUT<=Q;
END PROCESS;
5-8.答:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADD_SUB_LOAD_16 IS
PORT (CLK,RST,ADD_EN,SUB_EN,LOAD : IN STD_LOGIC;
DATA:IN STD_LOGIC_VECTOR(15 DOWNTO 0) ;
CQ : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ;
COUT:OUTSTD_LOGIC);
EN D ENTITY ADD_SUB_LOAD_16;
ARCHITECTUREA_S_16OFADD_SUB_LOAD_16IS
BEGIN
PROCESS(CLK,RST,ADD_EN,SUB_EN,LOAD)
VARIABLECQI:STD_LOGIC_VECTOR(15DOWNTO0);
VARIABLELS_LOAD:
STD_LOGIC;
BEGINLS_LOAD:=LOAD;
IFRST='1'THENCQI:=(OTHERS=>'0');
ELSIF LOAD='1'THENCQI:=DATA;--LS_LOAD:='0';
ELSIF CLK'EVENTANDCLK='1'THEN
IF ADD_EN='1'THEN
IF CQI<16#FFFF#THECQI:=CQI+1;
ELSE CQI:=(OTHERS=>'0');
EN D IF;
I F CQI=16#FFFF#THENCOUT<='1';
ELSE COUT<='0';
END IF;
END IF;
IF SUB_EN='1'THEN
IF CQI>0 THEN CQI:=CQI-1;
ELSE CQI:=(OTHERS => '1');
END IF;
IF CQI=0 THEN COUT<='1';
IF CQI=0 THEN COUT<='1';
IF CQI=0THENCOUT<='1';
CQ<=CQI;
ENDPROCESS;
END ARCHITECTURE A_S_16;
关键词:
作业