verilog期末大作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

深圳大学实验报告

课程名称:Verilog HDL及其应用

实验项目名称:波形选择器

学院:电子科学与技术学院

专业:微电子学

指导教师:刘春平

报告人:温志煌学号:2012160228 班级:微电二班实验时间:

实验报告提交时间:

波形选择器

一、实验目的

(1)熟悉Modelsim软件

(2)掌握Modelsim软件的编译、仿真方法

(3)熟练运用Modelsim 软件进行Verilog程序设计开发

二、实验内容及要求

实验原理:在同一个波形里面分别取八个点,用这个八个点的数据还原出对应的波形来,在Verilog中通过建立一个函数分别取这些点数据,然后再通过调用函数得到相对应的波形。

1.实验要求

用Verilog语言设计以下电路,分别产生四种波形:正弦波、方波、三角波1及三角波2。实验要求先在QuartusII里面编译仿真程序,然后再在Modelsim里面仿真产生这四种波形。程序仿真结果示意图如图1所示。

图1.四种波形产生及选择器示意图

2.实验步骤

2.1在QuartusII里的操作步骤:

1)建立一个waveshaper的工程文件

2)以Verilog语言书写waveshaper的源程序

3)编译waveshaper源程序

4)最后再仿真一下这个程序,得到与程序相吻合的数据具体如图所示:

图2. Waveshaper源程序

图3. Waveshaper编译成功

图4. Waveshaper 仿真结果

2.2在Modelsim里的操作步骤:

1)建立waveshaper工程

2)添加两个文件waveshaper跟waveshaper_tp到工程3)分别编译这两个文件

4)在work里面查看编译后的设计单元

5)将信号加入波形窗口

6)运行仿真

其源程序如下:

module waveshaper(q,cp,n);

output [7:0] q;

input cp;

input [1:0] n;

reg [7:0] q;

reg [2:0] Q=3'd0;

wire cp,cr;

always @ (negedge cp )

begin

if(cr) Q<=3'd0;

else

Q<=Q+3'd1;

end

always @(Q or n)

begin

case (n)

0: q=romout({n,Q});

1: q=romout({n,Q});

2: q=romout({n,Q}); 3: q=romout({n,Q}); endcase

end

function [7:0] romout; input [4:0] address; case(address)

0 : romout = 85;

1 : romout = 100;

2 : romout = 85;

3 : romout = 50;

4 : romout = 15;

5 : romout = 0;

6 : romout = 15;

7 : romout = 50;

8 : romout = 0;

9 : romout = 30;

10 : romout = 60;

11 : romout = 90;

12 : romout = 120;

13 : romout = 90;

14 : romout = 60;

15 : romout = 30;

16 : romout = 0;

17 : romout = 10;

18 : romout = 20;

19 : romout = 30;

20 : romout = 40;

21 : romout = 50;

22 : romout = 60;

23 : romout = 70;

24 : romout = 0;

25 : romout = 0;

26 : romout = 0;

27 : romout = 0;

28 : romout = 60;

29 : romout = 60;

30 : romout = 60;

31 : romout = 60; default : romout = 8'hxx; endcase

endfunction Endmodule

其测试程序如下:

`timescale 1ns/1ns

`include "waveshaper.v"

module waveshaper_tp;

reg cp;

reg[1:0] n;

wire[7:0] q;

parameter DELY=100;

waveshaper A(q,cp,n); //调用测试对象

always #(DEL Y/2) cp = ~cp; //产生时钟波形

initial

begin //激励信号定义

cp =0;

n=0;

#(DELY*80) n=1;

#(DELY*80) n=2;

#(DELY*80) n=3;

#(DELY*80) $finish;

end

//定义结果显示格式

initial $monitor($time,,,"cp=%d n=%d q=%d", cp,n,q); endmodule

具体的实验步骤图如下:

图5. waveshaper源程序文件

相关文档
最新文档