HDL实验报告
专 业 姓 名 学 号 指导老师
电子科学与技术 1 实验一 Modelsim仿真软件的使用
1.1 实验目的
(1)熟悉Modelsim 软件;
(2)掌握Modelsim 软件的编译、仿真方法;
(3)熟练运用Modelsim 软件进行HDL 程序设计开发。
1.2 实验步骤
(1)学习使用Modelsim软件; (2)分析原理及功能;
(3)用Verilog HDL编写程序; (4)编写测试程序进行仿真;
(4)观察波形,分析仿真结果是否正确。
1.3 实验内容
用 Verilog HDL 程序实现一个异或门,Modelsim 仿真,观察效果。
1.4.1 程序
module my_xor(ina,inb,out); input ina,inb; output out;
assign out=ina^inb; endmodule
module t_xor; reg ina,inb; wire out; initial begin
ina=1'b0;
forever #20 ina=~ina; end initial begin
inb=1'b0;
forever #10 inb=~inb; end
my_xor tt(.ina(ina),.inb(inb),.out(out)); endmodule
1.4.2 波形
2 实验二 简单组合电路设计
2.1 实验目的
(1)掌握基于Modelsim 的数字电路设计方法; (2)熟练掌握HDL 程序的不同实现方法
2.2 实验步骤
(1)分析原理及功能;
(2)根据原理用Verilog HDL编写程序; (3)编写测试程序进行仿真;
(4)观察波形,分析仿真结果是否正确。
2.3 实验内容
设计一个三人表决器(高电平表示通过) ,实验内容如下: (1)三个人,一个主裁判,两个副裁判;
(2)规则:只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定是否通过。使用 Verilog HDL 程序实现上述实验内容,并使用modelsim 仿真(要求:至少使用两种方法实现上述实验内容和testbench)。
2.4.1 程序
方法1:
module voter(v0,v1,v2,y); input v0,v1,v2; output y;
assign y=v0|(v1&v2); endmodule 方法2:
module voter(v0,v1,v2,y); input v0,v1,v2; output reg y;
always @(v0,v1,v2) begin if(v0) y=1;
else begin
if(v1&v2) y=1; else y=0; end end endmodule
module t_voter; reg v0,v1,v2; wire y; initial begin
v0=1'b0; v1=1'b0; v2=1'b0; #10 v2=1'b1;
#10 v1=1'b1; v2=1'b0; #10 v1=1'b1; v2=1'b1;
#10 v0=1'b1; v1=1'b0; v2=1'b0; #10 v2=1'b1;
#10 v1=1'b1; v2=1'b0; #10 v1=1'b1; v2=1'b1; #10 $finish; end
voter tt(.v0(v0),.v1(v1),.v2(v2),.y(y)); endmodule
2.4.2 波形
2.5 心得体会
同样的功能可以通过不同的方法来实现,可以根据情况灵活选择。
3 实验三 二进制全加器设计
3.1 实验目的
(1)熟悉Verilog HDL 元件例化语句的作用; (2)熟悉全加器的工作原理;
(3)用Verilog HDL 语言设计四位二进制全加器,并仿真,下载验证其功能。
3.2 实验原理
(1)一位全加器原理:
Ai ,Bi分别是两个二进制位,Ci-1是前级进位,Ci是进位,Si是加法结果。 Si=Ai^Bi^Ci-1 ; Ci=(Ai&Bi)|(Ai&Ci-1)|(Bi&Ci-1) (2)四位二进制全加器原理:
在一位全加器基础上设计多位全加器,利用进位进行级联。
3.3 实验步骤
(1)分析原理及功能;
(2)根据原理用Verilog HDL编写程序; (3)编写测试程序进行仿真;
(4)观察波形,分析仿真结果是否正确。
3.4 实验内容
(1)用Verilog HDL 语言描述一位全加器,并使用modelsim 仿真验证结果;
(2)用Verilog HDL 元件例化语句实现四位全加器,modelsim 仿真并下载到实验箱, 用按键模拟输入,led 灯模拟输出,验证结果;
(3)设计程序将加法结果分开输出,即十位数和个位数分别用四位数组表示。
3.4.1 一位全加器 3.4.1.1 程序
module add_1bit(a,b,ci,co,s); input a,b,ci; output co,s; assign s=a^b^ci,
co=(a&b)|(a&ci)|(b&ci); endmodule
module t_add1; reg a,b,ci; wire co,s; initial begin a=1'b0;
forever #1 a=~a; end initial begin b=1'b0;
forever #2 b=~b; end