最新南昌大学eda实验报告.docx

上传人:b****5 文档编号:28443548 上传时间:2023-07-13 格式:DOCX 页数:51 大小:745.26KB
下载 相关 举报
最新南昌大学eda实验报告.docx_第1页
第1页 / 共51页
最新南昌大学eda实验报告.docx_第2页
第2页 / 共51页
最新南昌大学eda实验报告.docx_第3页
第3页 / 共51页
最新南昌大学eda实验报告.docx_第4页
第4页 / 共51页
最新南昌大学eda实验报告.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

最新南昌大学eda实验报告.docx

《最新南昌大学eda实验报告.docx》由会员分享,可在线阅读,更多相关《最新南昌大学eda实验报告.docx(51页珍藏版)》请在冰豆网上搜索。

最新南昌大学eda实验报告.docx

最新南昌大学eda实验报告

8、你是如何得志DIY手工艺制品的?

然而影响我们大学生消费的最主要的因素是我们的生活费还是有限,故也限制了我们一定的购买能力。

因此在价格方面要做适当考虑:

我们所推出的手工艺制品的价位绝大部分都是在50元以下。

一定会适合我们的学生朋友。

随着社会经济、文化的飞跃发展,人们正从温饱型步入小康型,崇尚人性和时尚,不断塑造个性和魅力的现代文化价值观念,已成为人们的追求目标。

因此,顺应时代的饰品文化显示出强大的发展势头和越来越广的市场,从事饰品销售是有着广阔的市场空间。

(二)DIY手工艺品的“热卖化”

图1-1大学生月生活费分布

10、如果学校开设一家DIY手工艺制品店,你希望_____

300-400元1632%

我们长期呆在校园里,对社会缺乏了解,在与生意合作伙伴应酬方面往往会遇上困难,更不用说商业上所需经历的一系列繁琐手续。

他们我们可能会在工商局、税务局等部门的手续中迷失方向。

对具体的市场开拓缺乏经验与相关的知识,缺乏从职业角度整合资源、实行管理的能力;

根本不知道□

9、如果你亲戚朋友送你一件DIY手工艺制品你是否会喜欢?

 

实验报告

 

课程名称:

EDA技术实用教程

指导老师:

学生姓名:

学号:

专业班级:

通信工程134班

 

2015年12月7日

 

实验一、全加器设计实验

实验二、模可变计数器设计实验

实验三、序列信号发生和检测器设计实验

实验四、交通灯控制器设计实验

实验五、多功能数字钟设计实验

实验六、出租车计费器设计实验

本课程总结

 

一、全加器设计实验

(一)实验目的

1、熟悉建立文件夹和建立工程的整个过程。

2、学会建立波形文件。

3、学会将文件下载到板子上。

(二)设计要求

完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变计数器功能,具体要求如下:

1、利用书上的程序,完成实验目的,实现两个一位二进制数的相加,并将进位输出。

(三)主要仪器设备

1、微机1台

2、QuartusII集成开发软件1套

3、EDA实验装置1套

(四)实验思路

由于要用到例化语句,所以需要将文件都放在一个文件夹里然后创建工程。

选择文件夹和名称。

添加文件

选择实验室用的芯片

选择仿真工具

半加器真值表如下

A

B

SO

CO

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

其中A和B为输入信号,SO为和值输出,CO为进位输出。

程序如下。

modulebanjia(A,B,SO,CO);

inputA,B;

outputSO,CO;

assignSO=A^B;

assignCO=A&B;

Endmodule

由真值表可得输入信号A和B异或可作为和值输出,相与可作为进位输出。

 

全加器真值表如下

Ain

Bin

Cin

Cout

Sum

0

0

0

0

0

0

1

0

0

1

1

0

0

0

1

1

1

0

1

0

0

0

1

0

1

0

1

1

1

0

1

0

1

1

0

1

1

1

1

1

ain和bin为输入信号,cin为进位信号与ain和bin一起相加,cout为进位出书,sum为和值输出。

程序如下。

modulequanjia(ain,bin,cin,cout,sum);

outputcout,sum;

inputain,bin,cin;

wirenet1,net2,net3;

banjiaU1(ain,bin,net1,net2);

banjiaU2(.A(net1),.SO(sum),.B(cin),.CO(net3));

orU3(cout,net2,net3);

Endmodule

这里用了例化语句调用了一个半加器的模块让ain与bin通过半加器的相加之后的和值net1作为一个输入信号再与进位信号cin相加作为和值sum,ain与bin相加产生的进位信号net2和ain与bin的和值net1与cin相加产生的进位信号net3相或作为整体的进位输出cout,便可完成真值表的要求。

(五)时序仿真

添加文件

添加引脚

然后对输入信号进行赋值,赋值为周期性信号。

编译后保存。

 

 

仿真后效果如下

 

将程序烧入板子如下

(六)实验总结

因为这个是第一次进EDA实验室,对软件硬件都不了解。

遇到很多的简单问题,也就是操作上的不熟练。

对照书本上的步骤一步一步操作,才能完成。

真应该加强动手能力。

通过这次实验理解了全加器的原理和例化语句的使用,初步对EDA实验产生了兴趣。

 

二、模可变计数器设计

(一)实验目的

1、进一步熟悉实验装置和QuartusⅡ软件的使用;

2、进一步熟悉和掌握EDA设计流程;

3、学习简单组合、时序电路的EDA设计;

4、学习计数器中二进制码到BCD码的转换技巧;

5、学习实验装置上数码管的输出方法。

(二)设计要求

完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变计数器功能,具体要求如下:

1、设置一个按键控制改变模值,按键按下时模为10-99之间(具体数值自行确定)的数,没按下时模为100-199之间(具体数值自行确定)的数;

2、计数结果用三位数码管十进制显示。

(三)主要仪器设备

1、微机1台

2、QuartusII集成开发软件1套

3、EDA实验装置1套

(四)实验思路

总体程序如下

modulejishuqi(CLK,rst,M,SG,en,q,d);

inputCLK,rst,en;

inputM;

outputSG;

reg[7:

0]cnt;

regclk1;

reg[7:

0]SG;

regsel;

outputreg[11:

0]q;

reg[11:

0]model;

reg[3:

0]a;

outputregd;

wire[3:

0]gw,sw,bw;

assigngw[3:

0]=q[3:

0];

assignsw[3:

0]=q[7:

4];

assignbw[3:

0]=q[11:

8];

always@(M)

if(M)model=12'b000000110000;

elsemodel=12'b000100000000;

always@(posedgeCLK)

begin

cnt=cnt+1;

if(cnt==200)

begin

clk1=1'b1;

cnt=0;

end

elseclk1=1'b0;

if(sel<2)sel=sel+1;

elsesel=0;

end

always@(posedgeCLKornegedgerst)

begin

if(!

rst)

q=0;else

if(en)begin

if(q

begin

if(gw==9)beginq=q+7;

if(sw==9)q=q+96;end

elseq=q+1;end

elseq=0;end

end

always@(q)

begin

if(q

elsed<=1;end

always@(sel)

begin

case(sel)

0:

a=bw;

1:

a=sw;

2:

a=gw;

default:

a=0;

endcase

case(a)

0:

SG<=8'b00111111;1:

SG<=8'b00000110;

2:

SG<=8'b01011011;3:

SG<=8'b01001111;

4:

SG<=8'b01100110;5:

SG<=8'b01101101;

6:

SG<=8'b01111101;7:

SG<=8'b00000111;

8:

SG<=8'b01111111;9:

SG<=8'b01101111;

default:

SG=8'b11111111;

endcase

end

endmodule

分频模块

分频模块由时钟频率的分频作为计数脉冲,每200个系统脉冲有一个技术脉冲,同时可以利用系统脉冲进行循环选择SEL来进行循环扫码。

程序如下

always@(posedgeCLK)

begin

cnt=cnt+1;

if(cnt==200)

begin

clk1=1'b1;

cnt=0;

end

elseclk1=1'b0;

if(sel<2)sel=sel+1;

elsesel=0;

选择模块由M选择,M为1时模是30,M为0时模为100。

always@(M)

if(M)model=12'b000000110000;

elsemodel=12'b000100000000;

计数模块

计数模块如下,由于q为16进制数,我们需要的输出为BCD码,故进行调整。

平常时q来一个脉冲加1,当加到个位为9时,也就是1001,将其加7变为16也就是0,实现了个位由9到0的BCD计数,同时也会向十位进1。

当十位和个位同时,为9时,q位加96也就是十位加6,再加上个位向十位进的1就是加7,十位会清零同时个位也会清零,同时向百位进1,实现了正常的十进制BCD码计数。

Rst则为清零信号,en为使能信号。

always@(posedgeCLKornegedgerst)

begin

if(!

rst)

q=0;else

if(en)begin

if(q

begin

if(gw==9)beginq=q+7;

if(sw==9)q=q+96;end

elseq=q+1;end

elseq=0;end

End

当计数到顶后有个标志位d标志是否计到顶。

always@(q)

begin

if(q

elsed<=1;end

循环扫码模块如下,由于sel的变化频率和系统时钟相同,所以肉眼辨别不出来在跳动,可以通过其分别选择数码管并将个位十位百位呈现在数码管上,同时配有译码程序。

always@(sel)

begin

case(sel)

0:

a=bw;

1:

a=sw;

2:

a=gw;

default:

a=0;

endcase

case(a)

0:

SG<=8'b00111111;1:

SG<=8'b00000110;

2:

SG<=8'b01011011;3:

SG<=8'b01001111;

4:

SG<=8'b01100110;5:

SG<=8'b01101101;

6:

SG<=8'b01111101;7:

SG<=8'b00000111;

(五)实验截图

仿真时用CLK代替分频频率便于观察.总体图

 

Rst可以实现计数的清零。

 

当M为1时实现了模30的计数,同时标志位为1

 

当M为0时实现了模100的计数,同时标志位为1

使能信号en为0时计数保持不变

(六)实验总结

初步进行了自己设计程序和仿真一系列工作,加深了对设计过程和语句使用的理解。

进而对软硬件的操作使用都有了进一步的熟练,遇到的基础问题也能想办法去解决了,不像第一次那样手足无措了。

语法语句也大概有了了解。

 

三、序列信号发生和检测器设计

(一)实验目的

1、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法;

2、学习有限状态机法进行数字系统设计;

3、学习使用原理图输入法进行设计。

(二)设计要求

完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现一个串行序列信号发生器和一个序列信号检测器的功能,具体要求如下:

1、先用设计011101101100100100序列信号发生器,其最后6BIT数据用LED显示出来;

2、再设计一个序列信号检测器,检测上述序列信号,若检测到串行序列“110110”则输出为“1”,否则输出为“0”;

(三)主要仪器设备

1、微机1台

2、QuartusII集成开发软件1套

3、EDA实验装置1套

(四)实验思路

首先画出状态转移图

 

总体程序如下

modulexulieji2(clk,rst,en,date,SOUT);

parameters0=1,s1=2,s2=3,s3=4,s4=5,s5=6,s6=7;

inputclk,rst,en;

outputdate,SOUT;

wireSOUT;

reg[8:

0]cnt;

reg[6:

0]ST,NST;

reg[5:

0]date;

reg[16:

0]sdate;

assignSOUT=(NST==s6);

always@(posedgeclkornegedgerst)

begin

if(!

rst)begin

ST<=s0;

date<=6'b000000;

sdate<=17'b011101101100100100;

cnt<=16;end

elseif(en)begin

ST<=NST;

date[5:

1]<=date[4:

0];

date[0]<=sdate[cnt];

cnt<=cnt-1;;end

elsecnt<=0;

case(ST)

s0:

beginif(date[0]==1'b1)NST<=s1;elseNST<=s0;end

s1:

beginif(date[0]==1'b1)NST<=s2;elseNST<=s0;end

s2:

beginif(date[0]==1'b0)NST<=s3;elseNST<=s2;end

s3:

beginif(date[0]==1'b1)NST<=s4;elseNST<=s0;end

s4:

beginif(date[0]==1'b1)NST<=s5;elseNST<=s0;end

s5:

beginif(date[0]==1'b0)NST<=s6;elseNST<=s2;end

s6:

beginif(date[0]==1'b0)NST<=s0;elseNST<=s4;end

default:

NST<=s0;

endcaseend

endmodule

这里用到了状态机技术,状态机可以方便的设置程序满足什么条件然后去往什么状态,利用状态机可以实现检测到110110时的状态,同时可以在不满足时准确的调往正确的状态以便于下一步的判断。

状态机简写为FSM(FiniteStateMachine),主要分为2大类:

第一类,若输出只和状态有关而与输入无关,则称为Moore状态机;第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机。

要特别注意的是,因为Mealy状态机和输入有关,输出会受到输入的干扰,所以可能会产生毛刺(Glitch)现象,使用时应当注意。

事实上现在市面上有很多EDA工具可以很方便的将状态图的描述转换成可以综合的程序代码。

状态机可归纳为4个要素,即现态、条件、动作、次态。

这样的归纳,主要是出于对状态机的内在因果关系的考虑。

“现态”和“条件”是因,“动作”和“次态”是果。

详解如下:

①现态:

是指当前所处的状态。

②条件:

又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。

③动作:

条件满足后执行的动作。

动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。

动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。

④次态:

条件满足后要迁往的新状态。

“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

赋值模块

parameters0=1,s1=2,s2=3,s3=4,s4=5,s5=6,s6=7;

inputclk,rst,en;

outputdate,SOUT;

wireSOUT;

reg[8:

0]cnt;

reg[6:

0]ST,NST;

reg[5:

0]date;

reg[16:

0]sdate;

assignSOUT=(NST==s6);

s1到s6为状态机的不同状态,clk为控制序列输入的信号,rst为清零信号,en为使能信号,SOUT为检测到序列110110时的输出信号1,cnt为控制哪一位数据进行检测的数,ST和NST为状态机现在的状态和下一时刻将要到来的状态,date为检测到的6为数据,sdate为输入序列,当检测到状态为s6时,通过assignSOUT=(NST==s6)可以让SOUT输出为1.

输入序列模块

always@(posedgeclkornegedgerst)

begin

if(!

rst)begin

ST<=s0;

date<=6'b000000;

sdate<=17'b011101101100100100;

cnt<=16;end

elseif(en)begin

ST<=NST;

date[5:

1]<=date[4:

0];

date[0]<=sdate[cnt];

cnt<=cnt-1;;end

elsecnt<=0;

Clk为序列输入信号,rst为清零信号,rst为低电平时将初始状态设为s0,初始6位待检测数据为000000,17位输入序列为011101101100100100,先从最高位从左往右输入,所以cnt开始时为16。

en为使能信号,当en为1时可以将下一状态NST赋予现在状态ST,同时将序列进行移位,待检测信号进行输入,同时cnt减1指向下一数据。

如果en为0,则保持现在的状态不进行工作。

状态转移模块

case(ST)

s0:

beginif(date[0]==1'b1)NST<=s1;elseNST<=s0;end

s1:

beginif(date[0]==1'b1)NST<=s2;elseNST<=s0;end

s2:

beginif(date[0]==1'b0)NST<=s3;elseNST<=s2;end

s3:

beginif(date[0]==1'b1)NST<=s4;elseNST<=s0;end

s4:

beginif(date[0]==1'b1)NST<=s5;elseNST<=s0;end

s5:

beginif(date[0]==1'b0)NST<=s6;elseNST<=s2;end

s6:

beginif(date[0]==1'b0)NST<=s0;elseNST<=s4;end

default:

NST<=s0;

endcaseend

Endmodule

通过这个状态转移语句可以正确的实现检测到110110便可使状态到达s6,即便序列为110110110时也是可以的,原理附状态转移图。

(五)时序仿真

可以清楚的看出,当检测到110110序列时sout便为1,即便是连续的110110110也可以检测出来,证明了这个程序的正确性。

(六)实验总结

要求画出状态转移图,我把书上的状态机部分仔细阅读,参考了书上的程序编写了这个程序,一开始检查的时候不符合要求,后来检查是状态转移图弄错了,修改之后进行仿真,便得到了正确的结果。

状态机在EDA的程序设计中应用广泛。

经过这次实验深刻掌握了状态机技术和状态转移图的画法,进一步激发了我对eda的兴趣。

 

       四、交通灯控制器设计

(一)实验目的

1、学习与日常生活相关且较复杂数字系统设计;

2、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法;

3、学习二进制码到BCD码的转换;

(二)设计要求

完成设计、仿真、调试、下载、硬件测试等环节,在型EDA实验装置上实现一个由一条主干道和一条乡间公路的汇合点形成的十字交叉路口的交通灯控制器功能,具体要求如下:

1、有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;

2、交通灯由绿转红前有4秒亮黄灯的间隔时间,由红转绿没有间隔时间;

3、乡间公路右侧各埋有一个串连传感器,当有车辆准备通过乡间公路时,发出请求信号S=1,其余时间S=0;

4、平时系统停留在主干道通行(MGCR)状态,一旦S信号有效,经主道黄灯4秒(MYCR)状态后转入乡间公路通行(MRCG)状态,但要保证主干道通行大于一分钟后才能转换;

5、一旦S信号消失,系统脱离MRCG状态,即经乡道黄灯4秒(MRCY)状态进入MGCR状态,即使S信号一直有效,MRCG状态也不得长于20秒钟;

6、控制对象除红绿灯之外,还包括分别在主干道和乡间公路各有一个两位十进制倒计时数码管显示。

(三)主要仪器设备

1、微机1台

2、QuartusII集成开发软件1套

3、EDA实验装置1套

(四)实验思路

总体程序如下

程序大体分为S=1与S=0的情况,不同情况对应不同处理方法,每一次COUNTER均为0时根据S的1和0来改变数码管的计数的灯的情况,具体原理在注释中有。

modulejiaotong(S,clk,LED,COUNTER,LED1,sel);

inputclk;

regCPB;//时钟

inputS;

output[2:

0]sel;

reg[2:

0]sel;//指明乡村路口是否有汽车的通行信号

reg[3:

0]a;

output[5:

0]LED;//信号灯的显示

output[7:

0]LED1;//显示时间的十位

output[8:

0]COUNTER;//数码的显示

reg[5:

0]LED;

reg[7:

0]COUNTER;

reg[7:

0]LED1;

reg[35:

0]i;

regflag1;

regflag2;

reg[7:

0]cnt;

initial

begin

flag2='b0;

flag1='b0;

COUNTER[7:

0]='D60;

LED[5:

0]<=6'b001100;//主干道是绿灯乡村道是红灯

end

always@(posedgeclk)

begi

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

当前位置:首页 > 工程科技 > 材料科学

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

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