EDA技术与Verilog HDL 实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA技术与Verilog HDL
实验报告
学生姓名:樊奇峰
学生学号:20102533
所在班级:10级电科(2)班
实验老师:陈亮亮
实验地点地点:理工楼
实验一 EDA实验箱使用
一.实验目的
1.GW48教学实验系统原理与使用介绍
2.熟悉QuartusII两种输入方式下编译、仿真简单的组合电路。
二.实验内容
首先了解GW48系统使用注意事项以及GW48系统主板结构与使用方法,接着对各实验电路结构图特点与适用范围简述。最后在QuartusII界面下,用文本输入和图形输入分别验证七选一多路选择器的功能。
三.程序清单
文本输入如下所示:
module mux71(a,b,c,d,e,f,g,s,y);
input a,b,c,d,e,f,g;
output y;
input [2:0] s;
reg y ;
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的工程,并在该文件夹中新建一个MUX71a.v的文件。
2、编译代码,编译成功后进行第三步,若不成功则查改代码中的错误。
3、在工程文件夹中新建一个MUX71a.vwf的波形文件,导入工程端口,设置输入波形,仿真得出输出端口波形。
4、验证输出端口波形是否达到七选一多路选择器的功能。
五、实验数据
仿真波形如下图所示。
六、实验小结
通过对EDA实验箱使用,了解了GW48教学实验系统原理与使用介绍;熟悉QuartusII两种输入方式下编译、仿真简单的组合电路。
实验二用原理图和VerilogHDL语言设计一位全加器
一.实验目的
熟悉在QuartusII下用原理图和VerilogHDL语言设计一位全加器。二.实验内容
在QuartusII下用原理图和VerilogHDL语言设计一位全加器,并编译、仿真验证其功能。
三.程序清单
全加器顶层文件设计:
半加器描述:
四.实验步骤
1、新建一个名称为f_adder的工程,并在该文件夹中新建一个f_adder.bdf的文件。
2、新建一个名称为h_adder.v的文件。
3、编译工程,编译成功后进行下一步,若不成功则查改错误。
4、在工程文件夹中新建一个f_adder.vwf的波形文件,导入工程端口,设置输入
波形,仿真得出输出端口波形。
5、验证输出端口波形是否实现一位全加器的功能。
五、实验数据
I、全加器仿真波形如下图所示:
II、半加器仿真波形如下图所示:
六、实验小结
通过此次实验熟悉在QuartusII下用原理图和VerilogHDL语言设计一位全加器。
实验三含异步清0和同步时钟使能的4位加法计数器一.实验目的
熟悉在QuartusII下设计含异步清0和同步时钟使能的4位加法计数器。
二.实验内容
在QuartusII下设计含异步清0和同步时钟使能的4位加法计数器,并编译、仿真验证其功能。
三.程序清单
计数器顶层文件设计:
10进制计数器文本输入:
module CNT10(clk,rst,en,load,cout,dout,data);
input clk,en,rst,load;
input [3:0] data;
output[3:0] dout;
output cout;
reg [3:0] q1;
reg cout;
assign dout = q1;
always @(posedge clk or negedge rst)
begin
if (!rst) q1<=0;
else if(en)
begin
if (!load) q1<=data;
else if(q1<9) q1<=q1+1;
else q1<=4'b0000;
end
end
always @(q1)
if (q1==4'h9) cout= 1'b1;
else cout= 1'b0;
endmodule
60位计数器文本输入:
module CNT60(CLK,EN,RST,LOAD,COUT1,COUT2,DOUT1,DOUT2,DATA);
input CLK,EN,RST,LOAD;
input [3:0] DATA;
output[3:0] DOUT1;
output[2:0] DOUT2;
output COUT1;
output COUT2;
reg [3:0] Q1;
reg [2:0] Q2;
reg COUT1;
reg COUT2;
assign DOUT1 = Q1;
assign DOUT2 = Q2;
always @(negedge CLK or negedge RST)
begin
if(!RST) Q1<=0;
else if (EN) begin
if (!LOAD) Q1<=DATA;
else if (Q1<9) Q1<=Q1+1;
else Q1<=4'b0000;
end
end
always @(Q1)
if (Q1==4'h9) COUT1=1'b1;
else
COUT1=1'b0;
always @(negedge COUT1 or negedge RST)
begin
if(!RST) Q2<=0;
else if (EN) begin
if (!LOAD) Q2<=DATA;
else if (Q2<5) Q2<=Q2+1;
else Q2<=4'b0000;
end
end
always @(Q2)
if ((Q1==4'h9)&&(Q2==3'h5)) COUT2=1'b1;
else
COUT2=1'b0;
endmodule