verilog十六分频实现
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
counter=0;
dout=0; //复位端起作用,计数器和输出结果都清零
end
else if(counter==7) //若计数器counter为7,dout翻转且计数器清零
begin
dout=~dout;
counter=0;
end
else
counter=counter+1; //否则的话计数器自加1
《FPGA实验》
实验报告
(用计数方法实现一个16分频电路)
学院:物理与信息工程学院
专业:微电子
姓名:汪小东
学号:111000529
一、实验目的及要求
实验目的:进一步熟悉verilog语言,学会熟练操作modelsim软件,并用它进行仿真,为以后的进一步发展打下良好基础.
实验要求:使用计数方法实现一个16分频电路,用Verilog写出电路实现程序以及测试文件.
#10 clk=1;
end
initial
begin
reset=1; //对复位信号reset赋值
#5 reset=0;
#1000 $finish; // 1000ns仿真结束
d
initial
$monitor("dout changed to %b at time %t,%b",dout,$time);//监视输出结果
input reset; //清零端reset,且高电平有效
output dout;
reg[2:0] counter; //设置一3位计数器
reg dout;
always@(posedge clk or posedge reset) //在时钟上升沿和复位端上升沿触发
begin
if(reset)
begin
end
endmodule //结束
Tesetbench如下:
`timescale 1ns/1ns
module div_bench;
reg clk;
reg reset;
wire dout;
div_16 d1(clk,reset,dout); //实例化
always
begin //对时钟信号clk赋值
#10 clk=0;
b.在时钟上升沿触发,如果计数器counter等于7,则把dout翻转且把counter清零,否则的话counter自加一.
c.这样的话就可以实现对时钟信号的16分频.
2.测试平台设计
模块设计:
`timescale 1ns/1ns
module div_16(clk,
reset,
dout);
input clk //时钟信号
二、实验设备(环境)及要求
实验软件:ModelSim SE 6.2b
三、实验内容与步骤
1.实验总体设计思路
用一个计数器(counter)来计数,当计数器等于7时,让输出结果翻转,同时计数器置零,如此往下.
a.输入端口为有时钟信号clk以及复位信号reset,输出为dout,先用reset信号把clk和dout都清零.
Endmodule //结束
四、实验结果与数据处理
1.Modelsim仿真结果,波形图。
仿真结果波形图如下:
上图中第一条线是时钟信号(clk),第二条是复位信号(reset),第三条是输出结果(dout),第四条是设置的三位计数器(conuter),复位信号在0时刻清零此时dout和counter都复位,5秒时复位信号失去作用,clk 10ns开始产生,并且周期为20ns,从仿真波形图中可以看出,dout的周期变为clk的16倍,也就是16分频,这正是我们期望的.
dout=0; //复位端起作用,计数器和输出结果都清零
end
else if(counter==7) //若计数器counter为7,dout翻转且计数器清零
begin
dout=~dout;
counter=0;
end
else
counter=counter+1; //否则的话计数器自加1
《FPGA实验》
实验报告
(用计数方法实现一个16分频电路)
学院:物理与信息工程学院
专业:微电子
姓名:汪小东
学号:111000529
一、实验目的及要求
实验目的:进一步熟悉verilog语言,学会熟练操作modelsim软件,并用它进行仿真,为以后的进一步发展打下良好基础.
实验要求:使用计数方法实现一个16分频电路,用Verilog写出电路实现程序以及测试文件.
#10 clk=1;
end
initial
begin
reset=1; //对复位信号reset赋值
#5 reset=0;
#1000 $finish; // 1000ns仿真结束
d
initial
$monitor("dout changed to %b at time %t,%b",dout,$time);//监视输出结果
input reset; //清零端reset,且高电平有效
output dout;
reg[2:0] counter; //设置一3位计数器
reg dout;
always@(posedge clk or posedge reset) //在时钟上升沿和复位端上升沿触发
begin
if(reset)
begin
end
endmodule //结束
Tesetbench如下:
`timescale 1ns/1ns
module div_bench;
reg clk;
reg reset;
wire dout;
div_16 d1(clk,reset,dout); //实例化
always
begin //对时钟信号clk赋值
#10 clk=0;
b.在时钟上升沿触发,如果计数器counter等于7,则把dout翻转且把counter清零,否则的话counter自加一.
c.这样的话就可以实现对时钟信号的16分频.
2.测试平台设计
模块设计:
`timescale 1ns/1ns
module div_16(clk,
reset,
dout);
input clk //时钟信号
二、实验设备(环境)及要求
实验软件:ModelSim SE 6.2b
三、实验内容与步骤
1.实验总体设计思路
用一个计数器(counter)来计数,当计数器等于7时,让输出结果翻转,同时计数器置零,如此往下.
a.输入端口为有时钟信号clk以及复位信号reset,输出为dout,先用reset信号把clk和dout都清零.
Endmodule //结束
四、实验结果与数据处理
1.Modelsim仿真结果,波形图。
仿真结果波形图如下:
上图中第一条线是时钟信号(clk),第二条是复位信号(reset),第三条是输出结果(dout),第四条是设置的三位计数器(conuter),复位信号在0时刻清零此时dout和counter都复位,5秒时复位信号失去作用,clk 10ns开始产生,并且周期为20ns,从仿真波形图中可以看出,dout的周期变为clk的16倍,也就是16分频,这正是我们期望的.