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