Verilog期末实验报告波形发生器.docx

上传人:b****7 文档编号:15994057 上传时间:2023-07-09 格式:DOCX 页数:14 大小:298.40KB
下载 相关 举报
Verilog期末实验报告波形发生器.docx_第1页
第1页 / 共14页
Verilog期末实验报告波形发生器.docx_第2页
第2页 / 共14页
Verilog期末实验报告波形发生器.docx_第3页
第3页 / 共14页
Verilog期末实验报告波形发生器.docx_第4页
第4页 / 共14页
Verilog期末实验报告波形发生器.docx_第5页
第5页 / 共14页
Verilog期末实验报告波形发生器.docx_第6页
第6页 / 共14页
Verilog期末实验报告波形发生器.docx_第7页
第7页 / 共14页
Verilog期末实验报告波形发生器.docx_第8页
第8页 / 共14页
Verilog期末实验报告波形发生器.docx_第9页
第9页 / 共14页
Verilog期末实验报告波形发生器.docx_第10页
第10页 / 共14页
Verilog期末实验报告波形发生器.docx_第11页
第11页 / 共14页
Verilog期末实验报告波形发生器.docx_第12页
第12页 / 共14页
Verilog期末实验报告波形发生器.docx_第13页
第13页 / 共14页
Verilog期末实验报告波形发生器.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Verilog期末实验报告波形发生器.docx

《Verilog期末实验报告波形发生器.docx》由会员分享,可在线阅读,更多相关《Verilog期末实验报告波形发生器.docx(14页珍藏版)》请在冰点文库上搜索。

Verilog期末实验报告波形发生器.docx

Verilog期末实验报告波形发生器

一、实验目的

使用Verilog软件编写四种波形任意发生器的源代码,用modelsim软件进行仿真测试,进一步强化Verilog,modelsim软件的编程能力为进一步的编程学习打下良好的基础。

二、实验原理

2.1该任意波形发生器要实现三个功能:

(1)通过计数器并结合拼接操作产生四种波形正弦波,方波,三角波1,三角波形的5位数据地址。

(2).设定ROM中对应波形地址地址的8位数值,将所有波形数值存储到ROM中。

(3).设定2位的波形选择开关端口。

2bit

00000~00111

01000~01111

3bitdata[7:

0]

10000~10111

11000~11111

图1整体设计方案

2.2四种波形要在一个周期内等间隔取8个点,定义对应的数据,下图为示意图,由于编程序需要,数据会进行相应的修改。

图2四种波形一个周期内的取样示意图

2.3四种波形数据地址对应的数据的存储器ROM

根据示意图,由于实际情况需要,将正弦波平移至x轴以上,并将所有波形的峰峰值取大100倍。

下表1是ROM存储器

波形选择地址取样点的地址ROM数据

00

000

171

00

001

200

00

010

171

00

011

100

00

100

29

00

101

0

00

110

29

00

111

100

01

000

0

01

001

0

01

010

0

01

011

0

01

100

100

01

101

100

01

110

100

01

111

100

10

000

0

10

001

0

10

010

33

10

011

67

10

100

100

10

101

67

10

110

33

10

111

0

11

000

0

11

001

50

11

010

100

11

011

150

11

100

200

11

101

133

11

110

67

11

111

0

表1ROM存储器

 

3、实验内容

3.1任意波形发生器verilog程序代码:

modulewave(data,clk,add1,reset);//顶层模块端口定义

output[7:

0]data;

inputclk,reset;

input[1:

0]addr1;

Wire[1:

0]addr1;

wireclk,reset;//输入输出变量定义

ADDR4(addr,clk,addr1,reset);//地址发生器模块调用

rom1(addr,data);//ROM存储器模块调用

endmodule

moduleADDR(addr,clk,addr1,reset);

output[4:

0]addr;

inputclk,reset;

wireclk,reset;

reg[2:

0]addr2;

wire[1:

0]addr1;

reg[4:

0]addr;

initialaddr2=3'b000;//定义计数初值

always@(posedgeclkorposedgereset)//每当有clk,或reset信号开启程序

begin

if(reset)

begin

addr2<=0;//同步复位

addr<=0;

end

elseif(addr2>=7)//addr2计数至7时,addr2复位

begin

addr2<=0;

end

else

begin

addr2<=addr2+1;//addr2由0至7计数

addr<={addr1,addr2};//addr1与addr2地址拼接为addr的最终地址

end

end

endmodule

modulerom(addr,data);//数据存储器模块

input[4:

0]addr;

output[7:

0]data;

function[6:

0]romout;//定义函数,存储32个波形取样点地址的数据

input[4:

0]addr;

reg[4:

0]addr;

wire[7:

0]data;

case(addr)//根据不同地址,得到不同数据。

0:

romout=171;

1:

romout=200;

2:

romout=171;

3:

romout=100;

4:

romout=29;

5:

romout=0;

6:

romout=29;

7:

romout=100;

8:

romout=0;

9:

romout=0;

10:

romout=0;

11:

romout=0;

12:

romout=100;

13:

romout=100;

14:

romout=100;

15:

romout=100;

16:

romout=0;

17:

romout=0;

18:

romout=33;

19:

romout=67;

20:

romout=100;

21:

romout=67;

22:

romout=33;

23:

romout=0;

24:

romout=0;

25:

romout=50;

26:

romout=100;

27:

romout=150;

28:

romout=200;

29:

romout=133;

30:

romout=67;

31:

romout=0;

default:

romout=8'hxx;

endcase

endfunction

assigndata=romout(addr);

endmodule

 

3.2verilog在quartus软件仿真截图

将代码输入后,建立波形文件,定义输入输出端口后进行仿真。

3.2.1正弦波示意图:

将两位波形选择端设置为00,得出正弦波示意图2

图2

3.2.2.方波示意图:

将两位波形选择端设置为01,得出方波示意图3

图3

3.2.3三角波1示意图:

将两位波形选择端设置为10,得出三角波1示意图4

图4

3.2.4.三角波2示意图:

将两位波形选择端设置为11,得出三角波2示意图5

图5

3.2.5结论:

由上面的四个波形截图可知,在一个周期内,通过不同的波形选择端控制,该程序实现了基本的任意波形产生的功能,产生了正确的波形数据,说明代码编写正确。

 

3.3modelsim任意波形发生器测试程序仿真

3.3.1任意波形发生器测试程序代码。

`timescale1ns/1ns

`include"wave.v"

modulewave_tp;//测试模块的名字

regreset,clk;

reg[1:

0]addr1;//测试输入信号addr1定义为reg型

wire[7:

0]data;//测试输出信号data定义为wire型

parameterdely=100;

wavefourwave(data,clk,reset,addr1);//调用测试对象

always#(dely/2)clk=~clk;

initial

begin

reset=1;clk=0;addr1=0;

#(dely*200)reset=0;//延迟200dely后先进行复位

#(dely*200)addr1=2'b00;//延迟200dely后测试出正弦波

#(dely*200)addr1=2'b01;//延迟200dely后测试出方波

#(dely*200)addr1=2'b10;//延迟200dely后测试出三角波1

#(dely*200)addr1=2'b11;//延迟200dely后测试出三角波2

#(dely*200)$finish;//

end

endmodule

 

3.3.2modelsim测试程序仿真截图

将测试程序代码与源程序代码一起输入后进行编译,显示波形如下:

3.3.2.1

正弦波测试图6:

将波形输出格式设为模拟形式,可以看出正弦波的测试图

图6

3.3.2.2

方波测试图7:

将波形输出格式设为离散输出形式,可以看出方波的测试图7

图7

3.2.2.3

三角波1测试图8:

将波形输出格式设为模拟形式,可以看出三角波1的测试图8

图8

3.2.2.4

三角波2测试图9:

将波形输出格式设为模拟形式,可以看出三角波2的测试图9

图9

3.3.3.总结

由上面的四个测试波形截图可知,在一个周期内,通过不同的波形选择端控制,该程序实现了基本的任意波形产生的功能,产生了正确的实验波形,说明代码编写正确。

4、实验总结

4.1遇到的问题和对应的解决措施:

(1)编程过程中没有注意端口定义过程,没有正确理解wire与reg类型的区别。

导致出错(解决办法:

输出端口应设为可变的wire类型)。

(2)一开始拼接操作用错了地方,用在了ROM内部,导致错误。

(解决办法:

应用在加法计数操作后)。

(3)波形数据初值有负数,无法正确显示数字。

(解决办法:

将波形数据平移至x轴以上即可显示正确的波形数据)

(4)一开始我是用拼接操作,有错误,无法正确显示波形数据(解决办法:

通过case语句输入波形选择addr1端口,成功显示了波形)。

4.2收获:

通过这次期末实验,虽然花了较多时间,遇到了许多的难题,但让我进一步认识了Verilog语言的使用,详细了解了整个程序的设计和仿真过程,独立思考并通过很多的调试,摸索和优化实验程序,最终完成实验,锻炼了我设计verilog程序能力,十分感谢刘春平老师的指导和其他同学的帮助。

本课程综合性较强,在实验中涉及了本学期多个知识点:

①always语句;②initial语句;③if—else语句;④case语句;⑤传递函数assign;⑥function说明语句,但都属于我们能掌握的基础内容,很好地促进了我们进一步学习的激情和自信心。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2