(Lab1)VerilogHDL实践

发布时间:2015-11-29 16:43:05   来源:文档文库   
字号:

实验 Verilog HDL语法及ModelSim仿真

【实验目的】通过实验,掌握《可编程逻辑器件及其应用》课上讲过的如下内容:

1. 使用ModelSim仿真软件复习Verilog HDL基本语法、仿真指令;

2. 掌握组合逻辑、时序逻辑的Verilog HDL代码风格;

3. 学会编写testbench(测试向量)代码,能熟练使用testbenchmodule进行测试,摆脱以前形成的用波形测试电路的惯性。

【实验方法】温习课件上Verilog HDL语法、ModelSim软件操作介绍部分,按照实验手册要求,在ModelSim平台下完成Verilog HDL语言实践。ModelSim完整的帮助在软件主菜单:Help->SE Documentation->PDF BookcaseInfo Hub->ModelSim SE User's Manual.pdf中。)

【考核方法】实验完成后,将设计文件、软件输出结果、仿真波形等整理成实验报告(不用贴全部代码,选几段自己满意的代码即可)。课程结束后,四个实验报告装订好封皮,一起上交时间截止到510日。

【实验内容】

一、ModelSim仿真平台搭建

1. 安装Mentor ModelSim SE 10.1b软件,配置License

2. 新建空白工程,将被测的组合逻辑模块mux.v与测试向量tstmux.v加入工程,体会测试向量模块如何产生输入激励和查看输出信号;

3. 对模块进行测试,得到仿真波形,熟悉ModelSim各窗口功能和操作流程;

二、复习Verilog HDL语法

1. 复习算术及逻辑运算符语法:将讲义第5节各段代码(P57~P66)依次放进ModelSim工程,进行仿真,查看输出结果,比较其是否与期望值相符;

2. 复习阻塞与非阻塞赋值语法,将讲义第6节的各段代码改写成完整模块,放进ModelSim工程中仿真,查看输出结果;

3. 复习仿真系统任务函数,将讲义第7节的各模块放进ModelSim进行仿真,查看仿真结果,判断是否与期望值相符;

三、设计实践

设计一个闰年判断模块,4位数的年份以压缩BCD码的形式存放在两个字节中,设计完成后编写测试向量对闰年模块进行测试,测试向量要覆盖闰年的几种类型。

后面附了一个闰年判断模块供参考,请先独立思考。

四、安装XILINX ISE软件

因为ISE软件体积巨大,这次做实验的同时,把下次实验课要用到的ISE Design Suite 14.4软件在后台装好。实验室机器已经安装了ISE 12.2,但有些机器上软件运行有问题,先检查一下。

附:

1. mux.v文件内容:

module mux(out, a, b, sel);
input a, b, sel;
output out;
reg out;
always @(a or b or sel)
if (!sel) out = a;
else out = b;
endmodule

2. tstmux.v文件内容

//`include mux2.v

module tstmux;

reg ain, bin, sel_in;

reg clock;

wire outw;

initial

begin //初始化寄存器变量

ain = 0;

bin = 0;

sel_in = 0;

clock = 0;

end

always #50 clock = ~clock; //产生周期100个单位时间的时钟信号clock

always @ (posedge clock)

begin

ain = {$random} %2; //$系统函数

#3 bin = {$random} %2;

end

always #10000 sel_in = ! sel_in; //产生周期10000仿真单位时间的选通信号变化

mux m(.out(outw), .a(ain), .b(bin), .sel(sel_in)); //模块实例化,连接端口

endmodule;

3. 闰年计算的Verilog HDL代码

module leapyear(is, y3,y2,y1,y0); //BCD, year=y3*1000+y2*100+y1 *10+y0

input [3:0]y3,y2,y1,y0;

output is;

reg is;

always @ (y3 or y2 or y1 or y0)

begin //mn: m=1 n=2/6; m=2 n=0/4/8

if ((y3[0]==1'b1) &&((y2==4'b0010)||(y2==4'b0110)) && (y1==4'b0000) && (y0==4'b0000)) //400m=odd

is = 1'b1;

else if ((y3[0]==1'b0) &&((y2==4'b0)||(y2==4'b0100)||(y2==4'b1000)) && (y1==4'b0000) && (y0==4'b0000))//400m=even

is = 1'b1;

else if ((y1[0]==1'b1) &&((y0==4'b0010)||(y0==4'b0110))) //4 but not 100

is = 1'b1;

else if ((y1[0]==1'b0) &&((y0==4'b0000)||(y0==4'b0100)||(y0==4'b1000))&& ({y1,y0}!=8'b0) ) //4 but not 100

is = 1'b1;

else

is = 1'b0;

end

endmodule

本文来源:https://www.2haoxitong.net/k/doc/c44744dc168884868662d601.html

《(Lab1)VerilogHDL实践.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式