EDA技术与Verilog HDL 实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档