eda技术与veriloghdl实验报告.docx
《eda技术与veriloghdl实验报告.docx》由会员分享,可在线阅读,更多相关《eda技术与veriloghdl实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
![eda技术与veriloghdl实验报告.docx](https://file1.bdocx.com/fileroot1/2022-12/7/8236af9a-ec14-4317-9be0-7ea7ef09a478/8236af9a-ec14-4317-9be0-7ea7ef09a4781.gif)
eda技术与veriloghdl实验报告
EDA技术与VerilogHDL
实验报告
学生姓名:
樊奇峰
学生学号:
所在班级:
10级电科
(2)班
实验老师:
陈亮亮
实验地点地点:
理工楼
实验一EDA实验箱使用
一.实验目的
1.GW48教学实验系统原理与使用介绍
2.熟悉QuartusII两种输入方式下编译、仿真简单的组合电路。
二.实验内容
首先了解GW48系统使用注意事项以及GW48系统主板结构与使用方法,接着对各实验电路结构图特点与适用范围简述。
最后在QuartusII界面下,用文本输入和图形输入分别验证七选一多路选择器的功能。
三.程序清单
文本输入如下所示:
modulemux71(a,b,c,d,e,f,g,s,y);
inputa,b,c,d,e,f,g;
outputy;
input[2:
0]s;
regy;
always@(a,b,c,d,e,f,g,s)
case(s)
0:
y<=a;
1:
y<=b;
2:
y<=c;
3:
y<=d;
4:
y<=e;
5:
y<=f;
6:
y<=g;
default:
y<=a;
endcase
endmodule
图形输入如下所示:
四、实验步骤
1、新建一个名称为MUX71a的工程,并在该文件夹中新建一个的文件。
2、编译代码,编译成功后进行第三步,若不成功则查改代码中的错误。
3、在工程文件夹中新建一个的波形文件,导入工程端口,设置输入波形,仿真得出输出端口波形。
4、验证输出端口波形是否达到七选一多路选择器的功能。
五、实验数据
仿真波形如下图所示。
六、实验小结
通过对EDA实验箱使用,了解了GW48教学实验系统原理与使用介绍;熟悉QuartusII两种输入方式下编译、仿真简单的组合电路。
实验二用原理图和VerilogHDL语言设计一位全加器
一.实验目的
熟悉在QuartusII下用原理图和VerilogHDL语言设计一位全加器。
二.实验内容
在QuartusII下用原理图和VerilogHDL语言设计一位全加器,并编译、仿真验证其功能。
三.程序清单
全加器顶层文件设计:
半加器描述:
四.实验步骤
1、新建一个名称为f_adder的工程,并在该文件夹中新建一个的文件。
2、新建一个名称为的文件。
3、编译工程,编译成功后进行下一步,若不成功则查改错误。
4、在工程文件夹中新建一个的波形文件,导入工程端口,设置输入波形,仿真得出输出端口波形。
5、验证输出端口波形是否实现一位全加器的功能。
五、实验数据
I、全加器仿真波形如下图所示:
II、半加器仿真波形如下图所示:
六、实验小结
通过此次实验熟悉在QuartusII下用原理图和VerilogHDL语言设计一位全加器。
实验三含异步清0和同步时钟使能的4位加法计数器
一.实验目的
熟悉在QuartusII下设计含异步清0和同步时钟使能的4位加法计数器。
二.实验内容
在QuartusII下设计含异步清0和同步时钟使能的4位加法计数器,并编译、仿真验证其功能。
三.程序清单
计数器顶层文件设计:
10进制计数器文本输入:
moduleCNT10(clk,rst,en,load,cout,dout,data);
inputclk,en,rst,load;
input[3:
0]data;
output[3:
0]dout;
outputcout;
reg[3:
0]q1;
regcout;
assigndout=q1;
always@(posedgeclkornegedgerst)
begin
if(!
rst)q1<=0;
elseif(en)
begin
if(!
load)q1<=data;
elseif(q1<9)q1<=q1+1;
elseq1<=4'b0000;
end
end
always@(q1)
if(q1==4'h9)cout=1'b1;
elsecout=1'b0;
endmodule
60位计数器文本输入:
moduleCNT60(CLK,EN,RST,LOAD,COUT1,COUT2,DOUT1,DOUT2,DATA);
inputCLK,EN,RST,LOAD;
input[3:
0]DATA;
output[3:
0]DOUT1;
output[2:
0]DOUT2;
outputCOUT1;
outputCOUT2;
reg[3:
0]Q1;
reg[2:
0]Q2;
regCOUT1;
regCOUT2;
assignDOUT1=Q1;
assignDOUT2=Q2;
always@(negedgeCLKornegedgeRST)
begin
if(!
RST)Q1<=0;
elseif(EN)begin
if(!
LOAD)Q1<=DATA;
elseif(Q1<9)Q1<=Q1+1;
elseQ1<=4'b0000;
end
end
always@(Q1)
if(Q1==4'h9)COUT1=1'b1;
else
COUT1=1'b0;
always@(negedgeCOUT1ornegedgeRST)
begin
if(!
RST)Q2<=0;
elseif(EN)begin
if(!
LOAD)Q2<=DATA;
elseif(Q2<5)Q2<=Q2+1;
elseQ2<=4'b0000;
end
end
always@(Q2)
if((Q1==4'h9)&&(Q2==3'h5))COUT2=1'b1;
else
COUT2=1'b0;
endmodule
60位计数器图形输入:
四.实验步骤
1、新建一个名称为CNT10的工程,并在该文件夹中新建一个的文件。
2、编译工程,编译成功后进行下一步,若不成功则查改错误。
3、在工程文件夹中新建一个的波形文件,导入工程端口,设置输入波形,仿真得出输出端口波形。
4、验证输出端口波形是否实现异步清0和同步时钟使能的4位加法计数器的功能。
五、实验数据
10位计数器文本输入仿真波形:
60位计数器文本输入仿真波形:
60位计数器图形输入仿真波形:
六、实验小结
通过此次实验熟悉在QuartusII下设计含异步清0和同步时钟使能的4位加法计数器
实验四8位十进制频率计设计
一.实验目的
熟悉在QuartusII下设计2位和8位十进制频率计。
二.实验内容
在QuartusII下设计2位和8位十进制频率计,并编译、仿真验证其功能。
三.程序清单
频率计顶层文件设计:
(1)2位十进制频率计
图形输入:
图形输入:
图形输入:
文本输入:
moduleconter100(CLK,CLR,EN,cout,ge,shi);
inputCLK,EN,CLR;
output[3:
0]ge;
output[3:
0]shi;
outputcout;
regcout;
reg[3:
0]ge;
reg[3:
0]shi;
always@(posedgeCLK)
if(!
CLR)
begin
ge<=0;
shi<=0;
cout<=0;
end
elseif((ge==9)&&(shi==9))
begin
ge<=0;
shi<=0;
cout<=1;
end
elseif(ge==9)
begin
ge<=0;
shi<=shi+1;
cout<=0;
end
else
begin
ge<=ge+1;
shi<=shi;
cout<=0;
end
endmodule
文本输入:
moduletf_ctro(clk,en,clr,lock);
inputclk;
outputen,clr,lock;
regen,clr,lock;
integerd=0;
always@(posedgeclk)
begin
d<=d+1;
if(d==1)
begin
en<=0;
lock<=0;
clr<=0;end
elseif(d==2)
begin
lock<=1;
en<=0;
clr<=0;
end
elseif(d==3)
begin
lock<=0;
clr<=0;
en<=0;
end
elseif(d==6)
begin
lock<=0;
clr<=1;
en<=0;
end
elseif(d==7)
begin
lock<=0;
clr<=0;
en<=0;
end
elseif(d==8)
begin
lock<=0;
clr<=0;
en<=1;
end
elseif(d==16)
begin
d<=0;
en<=0;
lock<=0;
clr<=0;
end
end
endmodule
74374锁存器文本输入:
moduleoctal(clk,en,d_in,q_in);
inputclk,en;
input[3:
0]d_in;
output[3:
0]q_in;
reg[3:
0]Q;
assignq_in=Q;
always@(posedgeclk)
if(!
en)
begin
Q<=d_in;
end
endmodule
(2)8位十进制频率计
图形输入:
四.实验步骤
1、新建一个名称为CTR10的工程,并在该文件夹中新建一个的文件,在工程文件夹中新建一个的文件。
2、编译工程,编译成功后进行下一步,若不成功则查改错误。
3、在工程文件夹中新建一个的波形文件,导入工程端口,设置输入波形,仿真得出输出端口波形。
4、验证输出端口波形是否实现8位十进制频率计的功能。
五、实验数据
仿真波形如下图所示:
(1)2位十进制频率计
图形输入仿真波形:
文本输入仿真波形:
图形输入仿真波形输入:
图形输入仿真波形:
(2)8位十进制频率计
图形输入仿真波形
六、实验小结
通过本次实验熟悉在QuartusII下设计2位和8位十进制频率计,并编译、仿真验证其功能。
实验五用状态机实现对ADC0809采样控制
一.实验目的
熟悉在QuartusII下用状态机实现对ADC0809采样控制。
二.实验内容
在QuartusII下用状态机实现对ADC0809采样控制,并编译、仿真验证其功能。
三.实验原理
四、实验程序清单
moduleADC0809(D,CLK,EOC,RST,ALE,START,OE,ADDA,Q,LOCK_T);
input[7:
0]D;
inputCLK,RST;
inputEOC;
outputALE;
outputSTART,OE;
outputADDA,LOCK_T;
output[7:
0]Q;
regALE,START,OE;
parameters0=0,s1=1,s2=2,s3=3,s4=4;
reg[4:
0]cs,next_state;
reg[7:
0]REGL;
regLOCK;
always@(csorEOC)begin
case(cs)
s0:
next_state<=s1;
s1:
next_state<=s2;
s2:
if(EOC==1'b1)next_state<=s3;
elsenext_state<=s2;
s3:
next_state<=s4;
s4:
next_state<=s0;
default:
next_state<=s0;
endcaseend
always@(cs)begin
case(cs)
s0:
beginALE=0;START=0;OE=0;LOCK=0;end
s1:
beginALE=1;START=1;OE=0;LOCK=0;end
s2:
beginALE=0;START=0;OE=0;LOCK=0;end
s3:
beginALE=0;START=0;OE=1;LOCK=0;end
s4:
beginALE=0;START=0;OE=1;LOCK=1;end
default:
beginALE=0;START=0;OE=0;LOCK=0;end
endcaseend
always@(posedgeCLKorposedgeRST)begin
if(RST)cs<=s0;
elsecs<=next_state;end
always@(posedgeLOCK)
if(LOCK)REGL<=D;
assignADDA=0;assignQ=REGL;
assignLOCK_T=LOCK;
endmodule
五.实验步骤
1.新建一个名称为ADC0809的工程,并在该文件夹中新建一个的文件。
2.编译工程,编译成功后进行下一步,若不成功则查改错误。
3.在工程文件夹中新建一个的波形文件,导入工程端口,设置输入波形,仿真得出输出端口波形。
4.验证输出端口波形是否实现用状态机实现对ADC0809采样控制
仿真波形如下图所示:
状态转换图:
六、实验小结
通过此次实验熟悉在QuartusII下用状态机实现对ADC0809采样控制,并编译、仿真验证其功能。
实验六交通灯设计实验
一.实验目的
熟悉在QuartusII下设计十字路口交通灯控制电路。
二.实验内容
在QuartusII下设计十字路口交通灯控制电路,并编译、仿真验证其功能。
三.实验原理
状态表:
四、实验程序清单
moduletraffic(clk,enb,accounth,account1,bccounth,bccount1,lampa1,lampa2,lampa3,lampa4,lampb1,lampb2,lampb3,lampb4);
inputclk,enb;
output[3:
0]accounth,account1,bccounth,bccount1;
outputlampa1,lampa2,lampa3,lampa4,lampb1,lampb2,lampb3,lampb4;
regtempa,tempb;
reg[2:
0]counta,countb;
reg[7:
0]numa,numb;
reg[7:
0]ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;
reglampa1,lampa2,lampa3,lampa4,lampb1,lampb2,lampb3,lampb4;
assign{accounth,account1}=numa;
assign{bccounth,bccount1}=numb;
always@(enb)
if(!
enb)
begin
ared<=8'b01010101;
ayellow<=8'b00000101;
agreen<=8'b01000000;
aleft<=8'b00010101;
bred<=8'b01100101;
byellow<=8'b00000101;
bleft<=8'b00010101;
bgreen<=8'b00110000;
end
always@(posedgeclk)
begin
if(enb)
begin
if(tempa)
begin
if(numa>0)
if(numa[3:
0]==0)
begin
numa[3:
0]<=9;
numa[7:
4]<=numa[7:
4]-1;
end
else
numa[3:
0]<=numa[3:
0]-1;
if(numa==0)
tempa<=0;
end
else
begin
tempa<=1;
case(counta)
0:
begin
numa<=agreen;{lampa1,lampa2,lampa3,lampa4}<=2;counta<=1;end
1:
begin
numa<=ayellow;{lampa1,lampa2,lampa3,lampa4}<=4;counta<=2;end
2:
begin
numa<=aleft;{lampa1,lampa2,lampa3,lampa4}<=1;counta<=3;end
3:
begin
numa<=ayellow;{lampa1,lampa2,lampa3,lampa4}<=4;counta<=4;end
4:
begin
numa<=ared;{lampa1,lampa2,lampa3,lampa4}<=8;counta<=0;end
default:
{lampa1,lampa2,lampa3,lampa4}<=8;
endcase
end
end
else
begin
{lampa1,lampa2,lampa3,lampa4}<=4'b1000;
counta<=0;
tempa<=0;
end
end
always@(posedgeclk)
begin
if(enb)
begin
if(tempb)
begin
if(numb>0)
if(numb[3:
0]==0)
begin
numb[3:
0]<=9;
numb[7:
4]<=numb[7:
4]-1;
end
else
numb[3:
0]<=numb[3:
0]-1;
if(numb==0)
tempb<=0;
end
else
begin
tempb<=1;
case(countb)
0:
begin
numb<=bred;{lampb1,lampb2,lampb3,lampb4}<=8;countb<=1;end
1:
begin
numb<=bgreen;{lampb1,lampb2,lampb3,lampb4}<=2;countb<=2;end
2:
begin
numb<=byellow;{lampb1,lampb2,lampb3,lampb4}<=4;countb<=3;end
3:
begin
numb<=bleft;{lampb1,lampb2,lampb3,lampb4}<=1;countb<=4;end
4:
begin
numb<=byellow;{lampb1,lampb2,lampb3,lampb4}<=4;countb<=0;end
default:
{lampb1,lampb2,lampb3,lampb4}<=8;
endcase
end
end
else
begin
{lampb1,lampb2,lampb3,lampb4}<=4'b1000;
countb<=0;
tempb<=0;
end
end
endmodule
状态图:
五、.实验步骤
1.新建一个名称为traffic的工程,并在该文件夹中新建一个的文件。
2.编译工程,编译成功后进行下一步,若不成功则查改错误。
3、在工程文件夹中新建一个的波形文件,导入工程端口,设置输入波形,仿真得出输出端口波形。
4、验证输出端口波形是否实现用状态机实现对十字路口交通灯控制。
仿真波形如下图所示。
引脚分配图:
六、实验小结
通过此次实验熟悉在QuartusII下设计十字路口交通灯控制路,并编译、仿真验证其功能。
实验七简易数字时钟系统实验--------考试实验
一.实验目的
熟悉在QuartusII下设计简易数字时钟系统。
二.实验内容
在QuartusII下设计简易数字时钟系统,并编译、仿真验证其功能。
三、实验要求
(1)能正常计时
(2)有暂停键,清零键
(3)小时、分钟、秒钟可调(可加减)
(4)整点报时
四、程序清单
moduleshizhong(CLK,CLR,HOUR,MIN,SEC,EN,HOUT,SW,MODE,up);
inputCLK,EN,CLR,SW,up;
outputHOUT,HOUR,MIN,SEC;
output[3:
0]MODE;
reg[7:
0]HOUR,MIN,SEC;
regHOUT,CLK1;
reg[3:
0]MODE;
//CLK为时钟,EN为使能,也就是暂停按钮,SW为调整MODE的按钮
//UP为调整时钟的加按钮也是减按钮,当MODE为1到6为加按钮,当MODE为7到12为减按钮
//HOUT为报警器的控制
always@(CLKorup)//UP是时分秒加减按钮,在MODE1到6为加,7到12为减
begin
if(MODE==0)CLK1<=CLK;//**MODE0为时钟自动走,其他MODE为暂停调整时钟
elseCLK1<=up;
end
always@(posedgeSW)//********调整模式,范围为模式1到模式12
begin
if(SW)
begin
MODE<=MODE+1;
if(MODE>12)MODE<=0;
end
end//********
always@(posedgeCLK1orposedgeCLR)
begin
if(CLR)//*****清除时间,使其为00:
00:
00
begin
SEC<=0;HOUR<=0;MIN<=0;
end//***清除时间,使其为00:
00:
00
//下面为:
时钟自动运行代码
else
begin
if(!
EN)
if(MODE==0)
begin
if((SEC[3:
0]==9)&&(SEC[7:
4]==5)&&(MIN[3:
0]==9)&&(MIN[7:
4]==5)&&(HOUR[3:
0]==3))//**当分为59,秒为59且时为的个位为3时,将进行下一部判断
begin
if(HOUR[7:
4]==2)//**当分为59,秒为59且时为23时,下一秒清零,且报警
begin
HOUR[7:
4]<=0;
HOUR[3