考试题最后整理.docx

上传人:b****6 文档编号:8500238 上传时间:2023-01-31 格式:DOCX 页数:17 大小:28.76KB
下载 相关 举报
考试题最后整理.docx_第1页
第1页 / 共17页
考试题最后整理.docx_第2页
第2页 / 共17页
考试题最后整理.docx_第3页
第3页 / 共17页
考试题最后整理.docx_第4页
第4页 / 共17页
考试题最后整理.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

考试题最后整理.docx

《考试题最后整理.docx》由会员分享,可在线阅读,更多相关《考试题最后整理.docx(17页珍藏版)》请在冰豆网上搜索。

考试题最后整理.docx

考试题最后整理

复习思考题

考试时,由老师随机抽取试题,题目的范围如下所示,实际考试题目在以下题目基础上稍作修改,口试内容主要是围绕所做题目进行。

考试时间:

90分钟。

1、什么叫异步清零?

同步清零?

用VHDL语言如何表示?

同步是指与时钟同步,即时钟触发条件满足时检测清零信号是否有效,有效则在下一个时间周期的触发条件下,执行清零,异步是清零信号有效时,无视触发脉冲,立即清零。

Process(cr,clk)

Begin

Ifcr=’0’then

Count<=(others=>’0’);

elsif(clk’eventandclk=’0’)then

顺序语句;

Endif;

Endif;

Endprocess;

2、用Case语句和IF语句描述电路时应注意什么问题?

If和case语句是VHDL里边两个非常重要的语句,如何用好她们来描述逻辑电路和时序电路是学会VHDL编程重要的一步。

if和case语句有一定的相关性,也有一定的区别。

相同的地方是他们可以实现几乎一样的功能。

下面主要介绍一下她们之间的区别。

If语句每个分支之间是有优先级的,综合得到的电路是类似级联的结构。

Case语句每个分支是平等的,综合得到的电路则是一个多路选择器。

因此,多个ifelseif语句综合得到的逻辑电路延时往往比case语句要大。

一些初学者在一开始往往喜欢用ifelsif语句,因为这种语法表达起来更加直接,但是在运行速度比较关键的项目中,使用case语句的效果会更好。

下面的例子给出了if语句和case语句的综合结果

If语句综合结果

Case语句综合结果

有关if,case语句另外一个值得一提的东西是在用if或者case语句做逻辑电路的时候,必须为信号设置默认值。

有两种方法,第一种方法是在if,case语句之前对目标信号进行赋值,采用这种方法,就不必专门写else或者whenothers语句对信号进行默认赋值。

第二种方法就是在else或者whenothers语句中对信号进行默认条件下的赋值。

如果违反了上述规则,那么会在综合电路的时候形成一个transparentlatch,也就是电平触发的锁存器,这对电路的时序分析等会造成很大的麻烦。

在时序电路中,如果没有在else语句或者whenothers语句中对信号赋值,那么综合工具会认为寄存器保持当前输入。

从电路图上看,即把寄存器的输出接回寄存器的输入。

CASE语句的结构如下:

CASE表达式IS

When选择值=>顺序语句;

When选择值=>顺序语句;

...

ENDCASE;

注意事项:

1、条件句中的选择值必在表达式的取值范围内。

2、除非所有条件句中的选择值能完全覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用“OTHER”表示。

3、CASE语句中每一条件句的选择值只能出现一次,不能有相同选择值的条件语句出现。

4、CSAE语句执行中必须选中且只能选中所列条件语句中的一条。

IF语句根据指定的条件来确定语句执行顺序,共有3种类型。

1、用于门闩控制的IF语句

书写格式:

IF条件THEN

<顺序处理语句>

ENDIF;

条件成立,顺序处理语句执行,否则不执行。

2、用于二选一控制的IF语句

书写格式:

IF条件THEN

<顺序处理语句甲>

ELSE

<顺序处理语句乙>

ENDIF;

当条件满足时,执行顺序语句甲;条件不成立时,执行顺序语句乙。

3、IF语句

IF条件1THEN

<顺序语句1>;

ELSEIF条件2THEN

<顺序语句2>;

……

ELSEIF条件nTHEN

<顺序语句n>;

ELSE

<顺序语句n+1>;

ENDIF;

3、试用VHDL语言描述一个M=100的二进制计数器.

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitym100is

port(

CLK:

instd_logic;

EN:

instd_logic;

CR:

instd_logic;

Q:

outstd_logic_vector(6downto0);

OC:

outstd_logic

);

endm100;

architecturearc_m100ofm100is

signalcount:

std_logic_vector(6downto0);

begin

process(CR,CLK,EN)

begin

ifCR='0'then

count<=(others=>'0');

elsifclk'eventandclk='1'then

ifEN='1'andcount<99then

count<=count+1;

elsifEN='1'andcount=99then

count<="0000000";

endif;

endif;

endprocess;

process(count)

begin

ifcount=99then

OC<='1';

else

OC<='0';

endif;

endprocess;

Q<=count;

endarchitecturearc_m100;

4、试用VHDL语言描述一个M=24的十进制计数器

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitym24is

port(

CLK:

instd_logic;

QL:

outstd_logic_vector(3downto0);

QH:

outstd_logic_vector(3downto0);

OC:

outstd_logic

);

endm24;

architecturebehavofm24is

signalcouL:

std_logic_vector(3downto0);

signalcouH:

std_logic_vector(3downto0);

begin

process(CLK)

begin

ifclk'eventandclk='1'then

if(couL=3andcouH=2)then

couL<="0000";

couH<="0000";

elsifcouL=9then

couL<="0000";

couH<=couH+1;

else

couL<=couL+1;

endif;

endif;

endprocess;

process

begin

if(couL=3andcouH=2)then

OC<='1';

else

OC<='0';

endif;

endprocess;

QL<=couL;

QH<=couH;

endbehav;

5、试用VHDL语言描述一个分频器,要求fi=5KHz,fout=50Hz

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityfenpinqiis

port(

clk:

instd_logic;

clk_out:

outstd_logic

);

endfenpinqi;

architecturearcoffenpinqiis

signalcou:

std_logic_vector(6downto0);

begin

process(clk)

begin

ifclk'eventandclk='1'then

ifcou=99then

cou<=(others=>'0');

else

cou<=cou+1;

endif;

endif;

endprocess;

process(cou)

begin

ifcou=99then

clk_out<='1';

else

clk_out<='0';

endif;

endprocess;

endarc;

6、试用VHDL语言设计一个序列码发生器,要求反复产生00110111序列码

libraryIEEE;

useIEEE.STD_LOGIC_1164.all;

entityxulieis

port(

clk:

inSTD_LOGIC;

res:

inSTD_LOGIC;

Q:

outSTD_LOGIC

);

endxulie;

architecturertlofxulieis

signaltemp:

std_logic_vector(7downto0);

begin

process(res,clk)

begin

if(res='1')then

temp<="00110111";

elsif(clk'eventandclk='1')then

temp<=temp(7downto0)&temp(7);

endif;

Q<=temp(0);

endprocess;

endrtl;

7、如何设置仿真结束时间?

8、下载前顶层原理图要做那些操作?

9、如何观察分频器输入输出波形?

10、已知计数器模值,如何设置计数器的位数?

2^n-1

11、试用VHDL语言中的CASE语句编写一个三--八译码器;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYtest1IS

PORT(

in1,in2,in3:

INSTD_LOGIC;

Result:

OUTSTD_LOGIC_VECTOR(7DOWNTO0)

);

ENDtest1;

ARCHITECTUREaOFtest1IS

SIGNALtemp:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

temp<=in1&in2&in3;

PROCESS(temp)

BEGIN

CASEtempIS

WHEN"000"=>Result<="11111110";

WHEN"001"=>Result<="11111101";

WHEN"010"=>Result<="11111011";

WHEN"011"=>Result<="11110111";

WHEN"100"=>Result<="11101111";

WHEN"101"=>Result<="11011111";

WHEN"110"=>Result<="10111111";

WHEN"111"=>Result<="01111111";

WHENOTHERS=>Result<="11111111";

ENDCASE;

ENDPROCESS;

ENDa;

12、试用VHDL语言编写一个3位乘法器;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYmulti3IS

PORT(

A,B:

INSTD_LOGIC_VECTOR(2DOWNTO0);

Y:

OUTSTD_LOGIC_VECTOR(5DOWNTO0)

);

ENDmulti3;

ARCHITECTUREaOFmulti3IS

SIGNALtemp1:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALtemp2:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALtemp3:

STD_LOGIC_VECTOR(4DOWNTO0);

BEGIN

temp1<=AWHENB(0)='1'ELSE"000";

temp2<=(A&'0')WHENB

(1)='1'ELSE"0000";

temp3<=(A&"00")WHENB

(2)='1'ELSE"00000";

Y<=temp1+temp2+('0'&temp3);

ENDa;

13、试用VHDL语言编写一个七段共阴数码显示译码器;

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityymqis

port(

num:

instd_logic_vector(3downto0);

dout:

outstd_logic_vector(6downto0)

);

endymq;

architecturea1ofymqis

begin

withnumselect

dout<="1111110"when"0000",

"0110000"when"0001",

"1101101"when"0010",

"1111001"when"0011",

"0110011"when"0100",

"1011011"when"0101",

"1011111"when"0110",

"1110000"when"0111",

"1111111"when"1000",

"1111011"when"1001",

"0000000"whenothers;

enda1;

14、试用VHDL语言编写一个4选1多路选择器;

libraryieee;

useieee.std_logic_1164.all;

entitybxyis

port(

d:

instd_logic_vector(7downto0);

s:

instd_logic_vector(2downto0);

y:

outstd_logic);

endbxy;

architecturebehofbxyis

begin

process(s)

begin

casesis

when"000"=>y<=d(0);

when"001"=>y<=d

(1);

when"010"=>y<=d

(2);

when"011"=>y<=d(3);

when"100"=>y<=d(4);

when"101"=>y<=d(5);

when"110"=>y<=d(6);

whenothers=>y<=d(7);

endcase;

endprocess;

endbeh;

15、试用VHDL语言编写一个4位二进制加法器。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityadd4is

port(

a,b:

instd_logic_vector(3downto0);

ci:

instd_logic;

sum:

outstd_logic_vector(3downto0);

co:

outstd_logic

);

endadd4;

architecturearcofadd4is

signals:

std_logic_vector(4downto0);

begin

s<=('0'&a)+('0'&b)+("0000"&ci);

sum<=s(3downto0);

co<=s(4);

endarc;

16、试用VHDL语言编写八选一数据选择器程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYEIGHT_XUAN_1IS

PORT(

ST:

INSTD_LOGIC;

A:

INSTD_LOGIC_VECTOR(2DOWNTO0);

D:

INSTD_LOGIC_VECTOR(7DOWNTO0);

Q:

OUTSTD_LOGIC

);

END;

ARCHITECTUREHBVOFEIGHT_XUAN_1IS

SIGNALQ1:

STD_LOGIC;

BEGIN

PROCESS(A)

BEGIN

IFST='1'THEN

Q1<='0';

ELSECASEAIS

WHEN"000"=>Q1<=D(0);

WHEN"001"=>Q1<=D

(1);

WHEN"010"=>Q1<=D

(2);

WHEN"011"=>Q1<=D(3);

WHEN"100"=>Q1<=D(4);

WHEN"101"=>Q1<=D(5);

WHEN"110"=>Q1<=D(6);

WHEN"111"=>Q1<=D(7);

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

ENDPROCESS;

Q<=Q1;

ENDHBV;

17、试用VHDL语言编写一个同步复位的4位二进制加法计数器

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycountis

port(

clk:

instd_logic;

cr:

instd_logic;

q:

outstd_logic_vector(3downto0);

oc:

outstd_logic

);

endcount;

architecturearcofcountis

signalcou:

std_logic_vector(3downto0);

begin

process(cr,clk)

begin

waituntilclk'eventandclk='1';

ifcr='0'then

cou<=(others=>'0');

else

cou<=cou-1;

endif;

endprocess;

q<=cou;

process(cou)

begin

ifcou=15then

oc<='1';

else

oc<='0';

endif;

endprocess;

endarchitecturearc;

18、试用VHDL语言编写一个一位全加器电路

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityfulladderis

port(a,b,ci:

instd_logic;

co,s:

outstd_logic);

endfulladder;

architectureaddstroffulladderis

begin

s<=axorbxorci;

co<=(aandb)or(aandci)or(bandci);

endaddstr;

19、试用VHDL语言编写一个异步复位的4位二进制减法计数器

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycounter4is

port(

rst:

instd_logic;

clk:

instd_logic;

load:

instd_logic;

data:

instd_logic_vector(3downto0);

count:

outstd_logic_vector(3downto0)

);

endcounter4;

architecturearcofcounter4is

signalcnt:

std_logic_vector(3downto0);

begin

process(clk,rst)

begin

ifrst='0'then

cnt<=(others=>'0');

elsifclk'eventandclk='1'then

ifload='1'then

cnt<=data;

else

cnt<=cnt-1;

endif;

endif;

endprocess;

count<=cnt;

endarc;

20、试用VHDL语言编写一个74160电路

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt10is

port(

clk:

instd_logic;

rst:

instd_logic;

ena:

instd_logic;

outy:

outstd_logic_vector(3downto0);

cout:

outstd_logic

);

endcnt10;

architectureoneofcnt10is

signalcqi:

std_logic_vector(3downto0);

begin

p_reg:

process(clk,rst,ena)

begin

ifrst='1'then

cqi<="0000";

elsifclk'eventandclk='1'then

ifena='1'then

cqi<=cqi+1;

endif;

endif;

outy<=cqi;

endprocessp_reg;

cout<=cqi(0)andcqi

(1)andcqi

(2)andcqi(3);

endone;

 

4-16译码器

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1