VHDL作业与答案2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VHDL作业与答案2
第5章PPT课件作业
1.VHDL程序⼀般包含⼏个组成部分?各部分的作⽤是什么?
实体,结构体,库,程序包,配置
实体:⽤于描述所设计系统的外部接⼝特性;即该设计实体对外的输⼊、输出端⼝数量和端⼝特性。
结构体:⽤于描述实体所代表的系统内部的结构和⾏为;它描述设计实体的结构、⾏为、元件及内部连接关系。
库:存放已经编译的实体、构造体、程序包集合和配置。
程序包:存放各设计模块都能共享的数据类型、常数和⼦程序库;
配置:实体对应多个结构体时,从与某个实体对应的多个结构体中选定⼀个作为具体实现。
2.端⼝模式有哪⼏种?buffer类型与inout类型的端⼝有什么区别?
Out, in, inout, buffer
out (输出):只能被赋值,⽤于不能反馈的输出;
in (输⼊):只能读,⽤于时钟输⼊、控制输⼊单向数据输⼊;
inout(输⼊输出) :既可读⼜可被赋值,被读的值是端⼝输⼊值⽽不是被赋值,作为双向端⼝。
buffer(缓冲):类似于输出,但可以读,读的值是被赋值,⽤做内部反馈⽤,不能作为双向端⼝使⽤。
3.下列标识符中,哪些是⾮法的?
Led3coder_ _1 end port std_machine2adder decoder*8
and_2_ _decoder_1 and2 and_2and_ _2 and-2
4.指出下⾯的实体描述中存在的四处语法错误并改正
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux21a IS
PORT( a, b, s : IN BIT ;
y : OUT BIT ;) ; (1.删除括号内的分号)
END ENTITY mux; (2.改为mux21a)
ARCHITECTURE one OF mux21a IS
BEGIN
PROCESS(a,b,s)
Begin
if s=‘0’then y<=a ;
else y<=b ;
end if ;
end process (结束少了⼀个分号)END ARCHITECTURE none ; (none改为one)
5.写出下图所⽰的设计实体mux41的实体声明。
所有端⼝都采⽤bit或
bit_vector类型。
6.表达式C<=A+B中,A、B、C的数据类型都是STD_LOGIC_VECTOR,是否能直接进
⾏加法运算?说明原因和解决⽅法。
答:不能直接进⾏加法运算。
因为+号只能对整数类型进⾏直接相加,如果要对STD_LOGIC_VECTOR数据类型进⾏+法操作,需要调⽤运算符重载,即在程序的开头打开IEEE.STD_LOGIC_UNSIGNED.ALL程序包,或
者把STD_LOGIC_VECTOR数据类型改为整数类型。
7.能把任意⼀种进制的值向⼀整数类型的对象赋值吗?如果能,怎样做?
答:能。
见书上P322页
8.判断下列VHDL的数值表⽰是否合法,如果有误指出原因(P322)
16#0FA# 10#12F#8#789# 8#356# 2#0101010#
9.数据类型BIT,INTEGER,BOOLEAN分别定义在那个库中?哪些库和程序
包总是可见的?
答:BIT,INTEGER,BOOLEAN分别定义在STD库的STANDARD程序包中(见书上P324-325)
WORK库,STD库总是可见的(P316-317)
10.习题3-1,3-2,3-6(P92)
答:3-6考试有此种类型的程序题。
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY DFF3 IS
PORT ( CLK0,CL : IN STD_LOGIC ;
OUT1 : OUT STD_LOGIC);
END ;
ARCHITECTURE bhv OF DFF3 IS
SIGNAL Q : STD_LOGIC ;(此处只能定义信号)
BEGIN
PROCESS (CLK0)
BEGIN
IF CLK0'EVENT AND CLK0 ='1' THEN
Q <= Q NOR CL;
END IF;
END PROCESS ;
OUT1<= NOT Q;
END ;
11.VHDL语⾔数据对象有哪⼏种?作⽤范围如何?对其赋初值作⽤有何不同?答:VHDL语⾔数据对象有信号,变量,常量。
要回答的特别详细
12.判断下⾯三个程序中是否有错误,若有则指出错误所在。
程序1:signal a,en: std_logic ;
process(a,en)
variable b: std_logic;
begin
if en=1 then b<=a ; (错误2处。
1. en 为std_logic
类型,此类型赋值为en=‘1’;2. b
为变量,变量赋值采⽤:= )
end if ;
end process ;
程序2:architecture one of sample is
variable a,b,c: integer ;(结构体⾥⾯不能定义变量,
只能定义信号)
begin
c<=a+b ;
end architecture one;
程序3:library ieee;
Use ieee.std_logic_1164.all;
Entity mux21 is
Port (a, b : in std_logic;
sel: in std_logic;
c : out std_logic);
end Entity sam2;(1. sam2改为mux21)
architecture one of sample is(2. sample改为mux21)
begin
process(a,b.sel) (6.if语句应该放在process 中)
begin
if sel=‘0’then c:=a; (3.端⼝赋值采⽤<= ,改为c<=a)
else c:=b; (4.端⼝赋值采⽤<= ,改为c<=b)
end if;
end process ;
end architecture two; (5. two改为mux21)
13.在VHDL中,如何描述时钟信号上升沿和下降沿?请分别列举两种不同的⽅法
14.叙述进程语句的语法格式,并说明各组成部分的功能和作⽤。
(回答要详细)
process[(敏感信号表)]
[进程说明部分]
begin
{顺序处理语句}
end process [标号];
1.敏感信号表内为信号列表,该表内的信号的变化将引起进程的执⾏。
多数
VHDL综合器要求敏感信号表必须列出本进程中所有输⼊信号名。
2.进程说明⽤来定义在该进程中需要⽤到的局部量,如变量、常数等,在此处
定义的变量是局部量,只能在该进程中使⽤,其他地⽅不能使⽤。
特别强调在进程说明部分只能定义局部变量,不能定义信号和共享变量。
3.顺序描述语句是⼀段顺序执⾏的语句,具体描述进程的⾏为.如:信号赋值,
变量赋值,if语句,case语句等。
15.进程的敏感信号表具有什么作⽤?列出敏感信号时应注意什么?(回答要详细)答:敏感信号表中有多个敏感信号时,其中任⼀个信号的变化都会引起进程启动,写敏感信号表时,尽量将在进程中被读取
的信号列全。
若⽆敏感信号表,就必须放⼀个WAIT语句在
进程内作为进程启动语句
16.进程设计要点是什么? (回答要详细)
PROCESS为⼀⽆限循环语句
PROCESS中的顺序语句具有明显的顺序/并⾏运⾏双重性进程内部只能加载顺序语句,但进程本⾝是并⾏语句出现在结构体中,它与其他并⾏结构或进程之间在结构体中是并⾏运⾏的
进程语句本⾝是并⾏语句
⼀个进程中只允许描述对应于⼀个时钟信号的同步时序逻辑
进程必须由敏感信号的变化来启动敏感信号表中有多个敏感信号时,其中任⼀个信号的变化都会引起进程启动,写敏感信号表时,尽量将在进程中被读取的信号列全。
⽆敏感信号表,就必须放⼀WAIT语句在进程内作为进程启动语句
信号是多个进程间的通信线在结构体中多个进程可以并⾏运⾏,多个进程之间的通信是通过信号来实现。
因此,在任⼀进程的进程说明部分不允许定义信号
第6章PPT课件作业
1.顺序语句和并⾏语句分别有哪些?顺序语句和并⾏语句主要有什么区别?
2.⽤IF和when-else语句编写全加器(⾃⼰结合PPT,编程实现。
)
3.⽤元件例化法实现4位加法器。
(⾃⼰结合2位加法器的⽅法,编程实现。
)
4.阅读下⾯的程序,分析其实现的逻辑功能,并说明是时序逻辑还是组合逻辑
library ieee;
Use ieee.std_logic_1164.all;
Entity decoder is
Port (a : in std_logic_vector(9 downto 0);
c : out integer range 0 to 9);
end Entity decoder ;
architecture one of decoder is
begin
with a select
c<=0 when “0000000001” ,
1 when “0000000010” ,
2 when “0000000100” ,
3 when “0000001000” ,
4 when “0000010000” ,
5 when “0000100000” ,
6 when “0001000000” ,
7 when “0010000000” ,
8 when “010*******” ,
9 when “1000000000” ,
0 when others ;
end architecture one;
组合电路:译码电路。
从低位到⾼位依次判断10位2进制数的哪⼀位是⾼电平,并输出⾼电平所在数据位置。
5.结构体的描述⽅式有⼏种⽅式?各有什么特点?
1.⾏为描述⽅式:只需描述输⼊与输出的⾏为,不关注具体的电路实现,⼀
般通过⼀组顺序的VHDL进程来反映设计的功能和算法;
2.数据流描述⽅式:这种描述将数据看成从设计的输⼊端到输出端,通过并
⾏语句表⽰这些数据形式的改变,即信号到信号的数据流动的路径和形式进⾏描述;
3.结构描述⽅式:多⽤在多层次的设计中,通过调⽤库中得元件或已经设计
好的元件,进⾏组合来完成实体功能的描述,它只表⽰元件和元件之间的互连.
6.下⾯是三⼈表决器的VHDL描述,分析其实现机制,并说明三个不同的结构体分别⽤
了什么描述⽅法。
library ieee;
Use ieee.std_logic_1164.all;
Entity voter3 is
Port (a,b,c : in bit;
m : out bit);
end Entity voter3 ;
结构体描述⽅法1:(属于结构体的数据流描述⽅式。
)
architecture one of voter3 is
begin
with a&b&c select
m<=’1’when “110”|“101”|“011”|“111”,’0’ when others;
end architecture one;
结构体描述⽅法2:(采⽤了进程,属于结构体的⾏为描述⽅式)
architecture two of voter3 is
begin
process(a,b,c)
constant lookuptable :bit_vector(0 to 7):= “00010111”;
variable index: natural;]
begin
index:=0;
if a=’1’ then index:= index+1; end if ;
if b=’1’ then index:= index+2; end if ;
if c=’1’ then index:= index+4; end if ;
m
end process;
end architecture two;
结构体描述⽅法3:(采⽤元件例化,调⽤了其他元件,属于结构体的结构描述⽅式)architecture three of voter3 is
component and2 port (in1,in2: in bit; out1: out
bit);
end component;
component or2 port (in1,in2,in3: in bit; out1: out bit);
end component;
signal w1,w2,w3:bit;
begin
gate1: and2 port map (a,b,w1);
gate2: and2 port map (b,c,w2);
gate3: and2 port map (a,c,w3);
gate4: or3 port map (w1,w2,w3,m);
end architecture three;
第8章PPT课件作业
1.设计⼀个⽐较电路,当输⼊的8421BCD码值⼤于4时,输出为1,否则输出为0
(⾃⼰编写。
)
LIBRARY IEEE; --8421⽐较电路⽅法1
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY compara IS
PORT (a: IN STD_LOGIC_VECTOR(3 DOWNTO 0); Y : OUT STD_LOGIC );
END ENTITY compara;
ARCHITECTURE one OF compara IS
BEGIN
process(a)
begin
if ((a>4)and (a<=9)) then y<='1';
else y<='0';
end if;
end process;
END ARCHITECTURE one;
LIBRARY IEEE; ----8421⽐较电路⽅法2
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY compara2 IS
PORT (a: IN STD_LOGIC_VECTOR(3 DOWNTO 0); Y : OUT STD_LOGIC );
END ENTITY compara2;
ARCHITECTURE one OF compara2 IS
BEGIN
process(a)
begin
if a="0000" then y<='0';
elsif a="0001" then y<='0';
elsif a="0010" then y<='0';
elsif a="0011" then y<='0';
elsif a="0100" then y<='0';
elsif a="0101" then y<='1';
elsif a="0110" then y<='1';
elsif a="0111" then y<='1';
elsif a="1000" then y<='1';
elsif a="1001" then y<='1';
elsif a="1010" then y<='0';
elsif a="1011" then y<='0';
elsif a="1100" then y<='0';
elsif a="1101" then y<='0';
elsif a="1110" then y<='0';
else y<='0';
end if;
end process;
END ARCHITECTURE one;
2.编程实现3-8译码器。
(结合数码管译码器的⽅法,查询资料编写)
3.编程实现2个数相加的加法器。
其中加数和被加数均为4位⼆进制数。
(结合PPT的位加法器,编程实现)
4.8位右移寄存器(⾃⼰编写。
)。