西电EDA满分大作业.docx

上传人:b****1 文档编号:2481256 上传时间:2022-10-30 格式:DOCX 页数:18 大小:167.70KB
下载 相关 举报
西电EDA满分大作业.docx_第1页
第1页 / 共18页
西电EDA满分大作业.docx_第2页
第2页 / 共18页
西电EDA满分大作业.docx_第3页
第3页 / 共18页
西电EDA满分大作业.docx_第4页
第4页 / 共18页
西电EDA满分大作业.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

西电EDA满分大作业.docx

《西电EDA满分大作业.docx》由会员分享,可在线阅读,更多相关《西电EDA满分大作业.docx(18页珍藏版)》请在冰豆网上搜索。

西电EDA满分大作业.docx

西电EDA满分大作业

EDA报告

题目VHDL设计初步

学院电子工程学院

专业

学号

导师姓名朱燕

 

引言

随着大规模集成电路技术和计算机技术的不断发展,在涉及通信、国防、航天、医学、工业自动化、计算机应用、仪器仪表等领域的电子系统设计工作中,EDA技术的含量正以惊人的速度上升;电子类的高新技术项目的开发也逾益依赖于EDA技术的应用。

即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性能价格比大幅提高。

不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成部分。

第一章实验部分(流水灯)

1、程序设计流程图:

 

2、模块说明

第一部分:

分频器

因为主板是cyclong-EP16C6Q240C8的主频是4M赫兹,如果直接当做CLK信号,根本无法看清流水灯的变化,所以需要做分频操作。

仿照数电课本的例题中的分频器。

分频器的实体:

entitydevideis

port(

clk:

instd_logic;

clk_out:

outstd_logic

);

enddevide;

我们可以从程序中看到,输入时clk(外部主频时钟),输出是clk_out(分频后的时钟)。

(这是实体的器件图)

分频器的结构体:

process;用进程语言描述

begin

waituntilclk'eventandclk='1'

if(count<3999999)then

count<=count+1;

clk_out<='0';

else

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

clk_out<='1';

我们可以从程序中看到waituntilclk'eventandclk='1'这句是时钟来到意思,当count计数小于3999999时,count自加1,且输出为零,只有当大于3999999时,产生一个高电平脉冲。

接下来是对分频器的波形仿真:

从波形中我们可以看到分频器的工作.

第二部分:

模8计数器

我们需要一个计数器来输出计数电频,作为下一步38译码器的输入信号,首先我们来看这个器件的实体:

port(clk:

instd_logic;

dout:

outstd_logic_vector(2downto0)

);

(这是器件的实体图)

输入端口是clk,是接入分频器的时钟信号,输出就是计数电平了。

计数器的结构体:

architecturearc_mofmis

signalcount:

std_logic_vector(2downto0);

begin

process(clk)

begin

ifrising_edge(clk)then

ifcount<7then

count<=count+1;

elsifcount=7then

count<="000";

endif;

endif;

a<=count(0);

b<=count

(1);

c<=count

(2);

endprocess;

以上是模8计数器的结构体,我们可以看到,但时钟来到时,在count小于7时count加一,当count=7时,count清零。

接下来是对计数器波形的仿真:

dout输出000,001,010,011,100,101,110,111,000,001…这符合我们的要求。

第三部分:

38译码器

因为我们使用是共阴极二极管,38译码器每接受一个来自计数器的点平时,对应的Yn就输出低电平,点亮此二极管。

我们就可以看到二极管依次点亮好似流水一般。

译码器的实体:

port(a,b,c:

instd_logic;

y:

outstd_logic_vector(7downto0));

输入是a,b,c从低到高的三个,输出是y对应的译码电平。

(这是译码器的原件图)

译码器的结构体:

architecturearc_yima38ofyima38is

signalcomb:

std_logic_vector(2downto0);

begin

comb<=x;

process(comb)

begin

casecombis

when"000"=>y<="11111110";

when"001"=>y<="11111101";

when"010"=>y<="11111011";

when"011"=>y<="11110111";

when"100"=>y<="11101111";

when"101"=>y<="11011111";

when"110"=>y<="10111111";

when"111"=>y<="01111111";

whenothers=>y<=null;

endcase;

endprocess;

我们可以看到如下的波形:

在y的输出波形中,“0”循环右移,这是我们想要的结果。

第四部分:

总体效果

3、遇到的问题和解决方法

我使用的是原理图连接,在下到片子后我编译失败,经过同学和我的检查,终于发现我的原理图连接有问题,如上图所示,我将y[2..0]连接到译码器的输入端(a,b,c),这是不正确的,因为y[2..0]是(vector)矢量,而(a,b,c)是位,我错误的以为用线连起来就可以使用,但事实是矢量必须配对矢量,位配对位。

 

第二章习题部分

(Ex-1)画出下例实体描述对应的原理图符号元件:

ENTITYbuf3sIS--实体1:

三态缓冲器

PORT(input:

INSTD_LOGIC;--输入端

enable:

INSTD_LOGIC;--使能端

output:

OUTSTD_LOGIC);--输出端

ENDbuf3x;

答:

ENTITYmux21IS--实体2:

2选1多路选择器

PORT(in0,in1,sel:

INSTD_LOGIC;

output:

OUTSTD_LOGIC);

ENDENTITYmux21;

 

(Ex-2)图中所示的是4选1多路选择器,试分别用IF_THEN语句和CASE语句的表达方式写出此电路的VHDL程序。

(选择控制的信号s1和s0为STD_LOGIC_VECTOR类型;当s1='0',s0='0';s1='0',s0='1';s1='1',s0='0'和s1='1',s0='1'分别执行y<=a、y<=b、y<=c、y<=d。

答:

首先为用IFTHEN语句实现

程序如下:

libraryIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

entitymux41is

port(a,b,c,d:

instd_logic;

s1,s0:

instd_logic_vector(1downto0);

y:

outstd_logic);

endentitymux41;

architectureoneofmux41is

begin

process(a,b,c,d,s1,s0)

begin

ifs1='0'ands0='0'then

y<=a;

elseifs1='0'ands0='1'then

y<=b;

elseifs1='1'ands0='0'then

y<=c;

elseifs1='1'ands0='1'then

y<=d;

endif;

endprocess;

endarchitectureone;

用case语句

程序如下:

libraryIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

entitymux41is

port(a,b,c,d:

instd_logic;

s1,s0:

instd_logic;--这里s1s0没有定义成2位矢量

y:

outstd_logic);

endentitymux41;

architectureoneofmux41is

signall1:

std_logic_vector(1downto0);--中间信号为两位矢量,为了使用&

begin

process(a,b,c,d,s1,s0)

begin

l1<=s1&s0;

casel1is

when"00"=>y<=a;

when"01"=>y<=b;

when"10"=>y<=c;

when"11"=>y<=d;

endcase;

endprocess;

endarchitectureone;

(Ex-3)图中所示的是双2选1多路选择器构成的电路MUXK,对于其中MUX21A,当s='0'和'1'时,分别有y<='a'和y<='b'。

试在一个结构体中用两个进程来表达此电路,每个进程中用CASE语句描述一个2选1多路选择器MUX21A。

libraryieee;

useieee.std_logic_1164.all;

entitymuxkis

port(a1,a2,a3:

instd_logic;--待选择变量

temp:

bufferstd_logic;--中间信号

s1,s0:

instd_logic;--控制端

output:

outstd_logic);--输出结果

endmuxk;

architecturepr1ofmuxkis

begin

process(a2,a3,s0)--process1

begin

cases0is--使用case语句

when'0'=>temp<=a2;

when'1'=>temp<=a3;

endcase;

endprocess;

process(a1,temp,s1)--process2

begin

cases1is

when'0'=>output<=a1;

when'1'=>output<=temp;

endcase;

endprocess;

endpr1;

(Ex-4)图中是一个含有上升沿触发的D触发器的时序电路,试写出此电路的VHDL设计文件。

libraryIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

entitydffis

port(cl,clk0:

instd_logic;

out1:

outstd_logic);

endentitydff;

architectureoneofdffis

signalq1,q2:

std_logic

begin

process(clk)

begin

ifrisingedge(clk)then

q2=notq1;

q1=not(clandq2);

endif;

endprocess;

out<=q2;

endone;

(Ex-5)给出1位全减器的VHDL描述。

要求:

(1)首先设计1

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

当前位置:首页 > 总结汇报 > 学习总结

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

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