南昌大学eda实验报告Word文档下载推荐.doc
《南昌大学eda实验报告Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《南昌大学eda实验报告Word文档下载推荐.doc(39页珍藏版)》请在冰豆网上搜索。
(一)实验目的
1、熟悉建立文件夹和建立工程的整个过程。
2、学会建立波形文件。
3、学会将文件下载到板子上。
(二)设计要求
完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变计数器功能,具体要求如下:
1、利用书上的程序,完成实验目的,实现两个一位二进制数的相加,并将进位输出。
(三)主要仪器设备
1、微机 1台
2、QuartusII集成开发软件 1套
3、EDA实验装置 1套
(四)实验思路
由于要用到例化语句,所以需要将文件都放在一个文件夹里然后创建工程。
选择文件夹和名称。
添加文件
选择实验室用的芯片
选择仿真工具
半加器真值表如下
A
B
SO
CO
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
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);
这里用了例化语句调用了一个半加器的模块让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、学习实验装置上数码管的输出方法。
1、设置一个按键控制改变模值,按键按下时模为10-99之间(具体数值自行确定)的数,没按下时模为100-199之间(具体数值自行确定)的数;
2、计数结果用三位数码管十进制显示。
2、QuartusII集成开发软件 1套
3、EDA实验装置 1套
总体程序如下
modulejishuqi(CLK,rst,M,SG,en,q,d);
inputCLK,rst,en;
inputM;
outputSG;
reg[7:
0]cnt;
regclk1;
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)
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<
model)
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<
model)d<
=0;
elsed<
=1;
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:
b00000110;
2:
b01011011;
3:
b01001111;
4:
b01100110;
5:
b01101101;
6:
b01111101;
7:
b00000111;
8:
b01111111;
9:
b01101111;
default:
SG=8'
b11111111;
endcase
end
endmodule
分频模块
分频模块由时钟频率的分频作为计数脉冲,每200个系统脉冲有一个技术脉冲,同时可以利用系统脉冲进行循环选择SEL来进行循环扫码。
程序如下
always@(posedgeCLK)
选择模块由M选择,M为1时模是30,M为0时模为100。
always@(M)
计数模块
计数模块如下,由于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)
End
当计数到顶后有个标志位d标志是否计到顶。
always@(q)
循环扫码模块如下,由于sel的变化频率和系统时钟相同,所以肉眼辨别不出来在跳动,可以通过其分别选择数码管并将个位十位百位呈现在数码管上,同时配有译码程序。
always@(sel)