资源描述
附带:
一.问答题
1信号赋值语句在什么情况下作为并行语句?在什么情况下作顺序语句?信号赋值和变量赋值符号分别是什么?两种赋值符号有什么区别?
l 信号赋值语句在进程外作并行语句,并发执行,与语句所处的位置无关。信号赋值语句在进程内或子程序内做顺序语句,按顺序执行,与语句所处的位置有关。
l 信号赋值符号为“<=”变量赋值用“:=”。信号赋值符号用于信号赋值动作,不立即生效。变量,赋值符号用于变量赋值动作,立即生效。
2进程的敏感信号表指的是什么?简述敏感信号表在进程中的作用?
l 进程的“敏感信号表”也称敏感表,是进程的激活条件,可由一个或多个信号组成,各信号间以“,”号分隔。当敏感信号表中的任一个信号有事件发生,即发生任意变化,此时,进程被激活,进程中的语句将从上到下逐句执行一遍,当最后一条语句执行完毕之后,进程即进入等待挂起状态,直到下一次敏感表中的信号有事件发生,进程再次被激活,如此循环往复。
3什么是库、程序包、子程序、过程调用和函数调用?
l 库和程序包用来描述和保存元件、类型说明和子程序等,以便在其它设计中通过其目录可查询、调用。子程序由过程和函数组成。在子程序调用过程中,过程能返回多个变量,函数只能返回一个变量。若子程序调用的是一个过程,就称为过程调用,若子程序调用的是一个函数,则称为函数调用。过程调用、函数调用都是子程序调用。
二.改错题
1.已知sel为STD_LOGIC_VECTOR(1 DOWNTO 0)类型的信号,而a、b、c、d、q均为STD_LOGIC类型的信号,请判断下面给出的CASE语句程序片段:
l CASE sel IS
l WHEN“00”=>q<=a;
l WHEN“01”=>q<=b;
l WHEN“10”=>q<=c;
l WHEN“11”=>q<=d;
l END CASE;
l 答案:CASE语句缺“WHEN OTHERS”语句。
2. 已知data_in1, data_in2为STD_LOGIC_VECTOR(15 DOWNTO 0) 类型的输入端口,data_out为STD_LOGIC_VECTOR(15 DOWNTO 0)类型的输出端口,add_sub为STD_LOGIC类型的输入端口,请判断下面给出的程序片段:
l LIBRARY IEEE;
l USE IEEE.STD_LOGIC_1164.ALL;
l ENTITY add IS
l PORT(data_in1, data_in2:IN INTEGER;
l data_out:OUT INTEGER);
l END add;
l ARCHTECTURE add_arch OF add IS
l CONSTANT a:INTEGER<=2;
l BEGIN
l data_out<=( data_in1+ data_in2) * a;
l END addsub_arch;
答案:常量声明时赋初值的“<=”符号应改用“:=”符号。
3. 已知Q为STD_LOGIC类型的输出端口,请判断下面的程序片段:
l ARCHITECTURE test_arch OF test IS
l BEGIN
l SIGNAL B:STD_LOGIC;
l Q<= B;
END test_arch
答案:信号SIGNAL的声明语句应该放在BEGIN语句之前。
4. 已知A和Q均为BIT类型的信号,请判断下面的程序片段:
l ARCHITECTURE archtest OF test IS
l BEGIN
l CASE A IS
l WHEN ‘0’=>Q<=‘1’;
l WHEN ‘1’=>Q<=‘0’;
l END CASE;
l END archtest;
答案:CASE语句应该存在于进程PROCESS内。
三.程序设计
1@4位二进制并行加法器的源程序ADDER4B.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER4B IS --4位二进制并行加法器
PORT(CIN:IN STD_LOGIC; --低位进位
A: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --4位加数
B: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --4位被加数
S: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); --4位和
CONT: OUT STD_LOGIC);
END ADDER4B;
ARCHITECTURE ART OF ADDER4B IS
SIGNAL SINT:STD_LOGIC_VECTOR(4 DOWNTO 0);
SIGNAL AA,BB: STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
AA<='0'& A; --将4位加数矢量扩为5位,为进位提供空间
BB<='0'& B; --将4位被加数矢量扩为5位,为进位提供空间
SINT<=AA+BB+CIN ;
S<=SINT(3 DOWNTO 0);
CONT<=SINT(4);
END ART;
2@ 8位二进制加法器的源程序ADDER8B.VHD
LIBRARY IEEE;
USE IEEE_STD.LOGIC_1164.ALL;
USE IEEE_STD.LOGIC_UNSIGNED.ALL:
ENTITY ADDER8B IS
--由4位二进制并行加法器级联而成的8位二进制加法器
PORT(CIN:IN STD_LOGIC;
A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
S:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
COUT:OUT STD_LOGIC);
END ADDER8B;
ARCHICTURE ART OF ADDER8B IS
COMPONENET ADDER4B
--对要调用的元件ADDER4B的界面端口进行定义
PORT(CIN:IN STD_LOGIC;
A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
CONT:OUT STD_LOGIC);
END COMPONENT ;
SIGNAL CARRY_OUT:STD_LOGIC; --4位加法器的进位标志
BEGIN
U1:ADDER4B --例化(安装)一个4位二进制加法器U1
PORT MAP(CIN=>CIN,A=>A(3 DOWNTO 0),B=>B(3 DOWNTO0),
S=>S(3 DOWNTO 0),COUT=>CARRY_OUT);
U2:ADDER4B --例化(安装)一个4位二进制加法器U2
PORT MAP(CIN=>CARRY_OUT,A=>A(7 DOWNTO 4),B=>B(7 DOWNTO 4),
S=>S (7 DOWNTO 4);CONT=>CONT);
END ART;
3.@触发器和缓冲器
D触发器:Process(clk)
begin
if(clk’event and clk=‘1’) then
q <= d;
end if;
end process;
缓冲器:Process(clk)
begin
if(clk=‘1’) then
q <= d;
end if;
end process;
T触发器:Process(clk)
begin
if(clk’event and clk=‘1’) then
if(t = ‘1’) then
q <= not(q);
else
q <= q;
end if;
end if;
end process;
4.@16位锁存器的源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG16B IS --16位锁存器
PORT (CLK:IN STD_LOGIC; --锁存信号
CLR:IN STD_LOGIC; --清零信号
D:IN STD_LOGIC_VECTOR (8 DOWNTO 0) --8位数据输入
Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));--16位数据输出
END REG16B;
ARCHITECTURE ART OF REG16B IS
SIGNAL R16S:STD_LOGIC_VECTOR(15 DOWNTO 0);
--16位寄存器设置
BEGIN
PROCESS (CLK,CLR)
BEGIN
IF CLR = '1' THEN R16S<= "0000000000000000";
--异步复位信号
ELSIF CLK'EVENT AND CLK = '1' THEN
--时钟到来时,锁存输入值
R16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);
--右移低8位
R16S(15 DOWNTO 7)<=D;
--将输入锁到高能位
END IF;
END PROCESS;
Q<=R16S;
END ART;
5@8位右移寄存器的源程序SREG8B.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; --8位右移寄存器
ENTITY SREG8B IS
PORT (CLK:IN STD_LOGIC; LOAD :IN STD _LOGIC;
BIN:IN STD_LOGIC_VECTOR(7DOWNTO 0);
QB:OUT STD_LOGIC );
END SREG8B;
ARCHITECTURE ART OF SREG8B IS
SIGNAL REG8B:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS (CLK,LOAD)
BEGIN
IF CLK'EVENT AND CLK= '1' THEN
IF LOAD = '1' THEN REG8<=DIN; --装载新数据
ELSE REG8(6 DOWNTO0)<=REG8(7 DOWNTO 1);--数据右移
END IF;
END IF;
END PROCESS;
QB<= REG8 (0); --输出最低位
END ART;
6@8位乘法器的源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; --8位乘法器顶层设计
ENTITY MULTI8X8 IS
PORT(CLK:IN STD_LOGIC;
START:IN STD_LOGIC;
--乘法启动信号,高电平复位与加载,低电平运算
A:IN STD_LOGIC_VECTOR(7 DOWNTO 0); --8位被乘数
B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); --8位乘数
ARIEND:OUT STD_LOGIC; --乘法运算结束标志位
DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));--16位乘积输出
END MULTI8X8;
ARCHITECTURE ART OF MULTI8X8 IS
COMPONENT ARICTL --待调用的乘法控制器端口定义
PORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;
CLKOUT:OUT STD_LOGIC;RSTALL:OUT STD_LOGIC;
ARIEND:OUT STD_LOGIC);
END COMPONENT;
COMPONENT ANDARITH --待调用的控制与门端口定义
PORT(ABIN:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
DOUT:OUT_STD_LOGIC_VECTOR( 7 DOWNTO 0) );
END COMPONENT;
COMPONENT ADDER8B --待调用的8位加法器端口定义
COMPONENT SREG8B --待调用的8位右移寄存器端口定义
...
COMPONENT REG16B --待调用的16右移寄存器端口定义
...
SIGNAL GNDINT:STD_LOGIC;
SIGNAL INTCLK:STD_LOGIC;
SIGNAL RSTALL:STD_LOGIC;
SIGNAL QB:STD_LOGIC;
SIGNAL ANDSD:STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL DTBIN:STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL DTBOUT:STD_LOGIC_VECTOR(15 DOWNTO 0);
BEGIN
DOUT<=DTBOUT;GNDINT<= '0';
U1:ARICTL PORT MAP(CLK=>CLK, START=>START,
CLKOUT=>INTCLK, RSTALL=>RSTALL, ARIEND=>ARIEND);
U2:SREG8B PORT MAP(CLK=>INTCLK, LOAD=>RSTALL.
DIN=>B, QB=>QB);
U3:ANDARITH PORT MAP(ABIN=>QB,DIN=>A,DOUT=>ANDSD);
U4:ADDER8B PORT
MAP(CIN=>GNDINT,A=>DTBOUT(15 DOWNTO 8),
B=>ANDSD, S=>DTBIN(7 DOWNTO 0),COUT =>DTBIN(8));
U5:REG16B PORT MAP(CLK =>INTCLK,CLR=>RSTALL,
D=>DTBIN, Q=>DTBOUT);
END ART;
7@有时钟使能的十进制计数器的源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; --有时钟使能的十进制计数器
ENTITY CNT10 IS
PORT (CLK:IN STD_LOGIC; --计数时钟信号
CLR:IN STD_LOGIC; --清零信号
END:IN STD_LOGIC; --计数使能信号
CQ:OUT INTEGER RANGE 0 TO 15; --4位计数结果输出
CARRY_OUT:OUT STD_LOGIC); --计数进位
END CNT10;
ARCHITECTURE ART OF CNT10 IS
SIGNAL CQI :INTEGER RANGE 0 TO 15;
BEGIN
PROCESS(CLK,CLR,ENA)
BEGIN
IF CLR= '1' THEN CQI<= 0; --计数器异步清零
ELSIF CLK'EVENT AND CLK= '1' THEN
IF ENA= '1' THEN
IF CQI<9 THEN CQI<=CQI+1;
ELSE CQI<=0;END IF; --等于9,则计数器清零
END IF;
END IF;
END PROCESS;
PROCESS (CQI)
BEGIN
IF CQI=9 THEN CARRY_OUT<= '1'; --进位输出
ELSE CARRY_OUT<= '0';END IF;
END PROCESS;
CQ<=CQI;
END ART;
8@) 六进制计数器的源程序CNT6.VHD(十进制计数器的源程序
CNT10.VHD与此类似)
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT6 IS
PORT (CLK:IN STD_LOGIC;
CLR:IN STD_LOGIC;
ENA: IN STD_LOGIC;
CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
CARRY_OUT: OUT STD_LOGIC );
END CNT6;
ARCHITECTURE ART OF CNT6 IS
SIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(CLK,CLR,ENA)
BEGIN
IF CLR='1' THEN CQI<="0000";
ELSIF CLK'EVENT AND CLK='1' THEN
IF ENA='1' THEN
IF CQI=“0101” THEN CQI<=“0000”;
ELSE CQI<=CQI+'1';END IF;
END IF;
END IF;
END PROCESS;
PROCESS(CQI)
BEGIN
IF CQI=“0000” THEN CARRY_OUT<='1';
ELSE CARRY_OUT<='0';END IF;
END PROCESS;
CQ<=CQI;
END ART;
9@十进制计数器
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY count10 IS
PORT(clk: IN STD_LOGIC;
seg: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END count10;
ARCHITECTURE a1 OF count10 IS
signal sec: STD_LOGIC;
signal q : STD_LOGIC_VECTOR(21 DOWNTO 0);
signal num: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
process(clk) ----get 1 hz clock pulse
begin
if clk'event and clk='1' then q<=q+1; end if;
sec<=q(21); --get 1 hz clock pulse
end process;
timing: process(sec) begin
if sec'event and sec='1' then
if num<9 then num<=num+1; else num<="0000"; end if;
end if;
end process;
B1: block --bcd-7segs
Begin --gfedcba
seg<= "0111111" when num=0 else
"0000110" when num=1 else
"1011011" when num=2 else
"1001111" when num=3 else
"1100110" when num=4 else
"1101101" when num=5 else
"1111101" when num=6 else
"0000111" when num=7 else
"1111111" when num=8 else
"1101111" when num=9 else
"0000000";
end block;
END a1;
10@4MHz到1Hz的分频器
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY count IS
PORT( clk: in STD_LOGIC;
q: out STD_LOGIC;
END count;
ARCHITECTURE a OF count IS
signal tmp: STD_LOGIC_vector(21 downto 0);
Begin
process(clk) begin
if clk'event and clk='1' then tmp<=tmp+1;end if;
end process;
q<=tmp(21);
END a;
11@与门
ENTITY shili2 is
port (
input1 : in std_logic;
inptu2 : in std_logic;
output1 : out std_logic
);
end entity;
architecture one of shili2 is
begin
output1<=input1 and input2;
end entity;
12@.四输入与门电路
library ieee;
use ieee.std_logic_1164.all;
entity and4 is
port(a,b,c,d:in std_logic;
y:out std_logic;
end and4;
architecture and4_1 of and4 is
begin
y<= a and b and c and d;
end nand4_1;
法二(与非门):
library ieee;
use ieee.std_logic_1164.all
entity nand4 is
port(a.b,c,d:in std_logic;
y:out std_logic);
end nand4;
architecture nand4_2 of nand4 si
begin
p1:process(a,b,c,d)
variable tmp:std_logic_vector(3 downto 0);
begin
tmp:=a&b&c&d;
case tmp is
when"0000"=>y<='1';
when"0001"=>y<='1';
when"0010"=>y<='1';
when"0011"=>y<='1';
when"0100"=>y<='1';
when"0101"=>y<='1';
when"0110"=>y<='1';
when"0111"=>y<='1';
when"1000"=>y<='1';
when"1001"=>y<='1';
when"1010"=>y<='1';
when"1011"=>y<='1';
when"1100"=>y<='1';
when"1101"=>y<='1';
when"1110"=>y<='1';
when"1111"=>y<='1';
when others=>y<='x';
end case;
end process;
end nand4_2;
13@四位全加器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity add is
port(a,b:in std_logic_vector(3 downto 0);
cin:in std_logic;
s:out std_logic_vector(3 downto 0);
cout:out std_logic);
end add;
architecture beh of add is
begin
process(a,b,cin)
ariable x:std_logic_vector(3 downto 0);
variable m,n,l:integer;
begin
m:=conv_integer(a);
n:=conv_integer(b);
l:=m+n+conv_integer(cin);
x:=conv_std_logic_vector(l,4);
s<=x(3 downto 0);
cout<=x(3);
end process;
end beh;
14@N位移位寄存器:page70
15@8位通用寄存器:page137
16@串入串出移位寄存器:page138
17@10位计数器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT10 IS
PORT ( CLK ,clr : IN STD_LOGIC ;
CQ : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 ));
END ENTITY CNT10;
ARCHITECTURE ONE OF CNT10 IS
BEGIN
PROCESS ( CLK , clr )
VARIABLE LCQ : STD_LOGIC_VECTOR ( 3 DOWNTO 0 );
BEGIN
IF RST = ‘1’ THEN LCQ := “0000”;
ELSIF CLK’EVENT AND CLK = ‘1’ THEN
IF LCQ < 9 THEN LCQ := LCQ + 1;
ELSE LCQ := “0000” ;
END IF; END IF;
CQ <= LCQ ;
END PROCESS;
END ARCHITECTURE ONE;
18@八位串行二进制全加器
use ieee.std_logic_1164.all;
entity product_adder_subtracter is
port(
a,b:in std_logic_vector(7 downto 0);
s:out std_logic_vector(8 downto 0));
end;
architecture behavioral of product_adder_subtracter is
begin
behavior:process(a,b) is
variable carry_in:std_logic;
variable carry_out:std_logic;
variable op2:std_logic_vector(b'range);
begin
op2:=b;
end if;
for index in 0 to 7 loop
carry_in:=carry_out;
s(index)<=a(index) xor op2(index)xor carry_in ;
carry_out:=(a(index)and op2(index))
or(carry_in and (a(index) xor op2(index)));
end loop;
s(8)<=a(7) xor op2(7) xor carry_out;
end process;
end;
EDA知识要点:
1、 目前流行的HDL语言有那些?;
2、 什么是ASIC。
3、 VHDL是由什么机构制定并公布的。
4、 VHDL的两大类基本描述语句是什么。
5、 MAX+PLUSⅡ平台上,原理图、仿真波形文件、VHDL文件的扩展名 是什么?
6、 结构体常见的功能语句有那些?
7、 子程序分为那两类,其结构为什么。
8、 信号与变量的赋值有何区别?。
9、 可编程器件分为哪些类?
10、 VHDL中常见的库有那些?。
11、 不完整的条件语句与完整的条件语句生成的电路有何区别
12、 VHDL的标识符由什么构成。
13、 VHDL中预定义数据类型有那些?。
14、 CASE语句使用当中的注意事项。
15、 目前国际上较大的PLD器件制造公司有那几家公司。
16、 VHDL数据对象有什么
17、 赋值语句分哪些类,分别写出一句赋值语句。
18、 实现时序电路和逻辑组合电路分别用什么语句实现,分别写出他们的一般表式。
19、 简述元件例化语句组成及语句格式。
20、 数据对象有哪些种,分别写出定义这些数据对象的一般表述格式。
21、 简述进程语句的使用要点?
22、 写出VHDL常用的顺序语句的名称。
23、 简述VHDL逻辑操作符的种类及所允许的操作数的数据类型。
24、 EDA技术的含义。
25、 VHDL语言中的逻辑操作符有那些?
26、 目前较流行的集成EDA开发环境(软件)有那些?
27、 简述EDA技术的CPLD/FPGA的设计流程。
28、 写出实体中的PORT语句结构并说明其作用。
29、 简述EDA技术经历了那几个发展阶段。
30、 写出元件例化语句语句格式,并说明其作用。
31、 试比较图形输入法和文本输入法有何优缺点?
32、 结构体的语言格式与作用。
33、 写出PROCESS语句结构的一般表达格式?
34、 EDA技术常用的输入方法有?
35、 什么是实体和结构体,其功能是什么?,
36、 MAX+pulsⅡ的编辑窗口有那几种,分别是什么?
37、 MAX+pulsⅡ的原理图输入法、文本输入法、波形输入法生成的文件扩展名为?
38、 VHDL的操作符有那几大类?每一类的操作符分别是什么?每一类操作符可以对那些数据进行操作(运算)?
39、 VHDL中如没有特别的说明算术操作符‘ + ’号对应的操作数为什么类型
40、 可编程器件(PLD)分为哪两类
41、 标准逻辑位数据类型常用的数值有哪几种?
42、 在VHDL语言中常见的的数据类型有那些?
43、 完整的条件语句将产生什么电路,不完整的条件语句将产生什么电路。
44、 信号和变量有什么区别?
45、 VHDL作为工业标准,是由那个机构制定并公布的。
46、 实体部分的端口模式有四个类型。
47、 从执行方式看VHDL的基本描述语句包括哪两大基本描述语句?
48、 VHDL文件存盘时,其主文件名应与实体名一致,扩展名应为什呢
49、 硬件描述语言(HDL)的种类很多?
50、 简述元件例化语句的语句格式及关联方法。
EDA综合设计设计题
1、用两种以上的按照下图设计一个四选一多路选择器
2、使用元件例化语句编写下图所示的顶层文件,其中adder_1为一个由原理图输入法设计的完整的设计实体。
3、已知4位全加器电路原理图如下,请用元件例化语句编写其程序。
4、用VHDL语言编写下图所示的七段显示译码器。
5、用VHDL设计一个三位十进制的,带有使能控制端口enable、异步清零端口rst、同步预置控制端口load和预置数据输入端口date的计数器。
6、编写一个D触
展开阅读全文