- 10
- 0
- 约3.54千字
- 约 11页
- 2017-01-16 发布于北京
- 举报
《硬件描述最终报告
深 圳 大 学 实 验 报 告
课程名称: 硬件描述语言
实验项目名称: 基于DE2和Quatus软件的时钟设计
学院: 电子科学与技术
专业: 电子科学与技术
指导教师:
报告人: 学号: 班级:
实验报告提交时间:
一.实验目的
二.实验内容、过程及结果
图1:整体模块图
各个模块如下:
一:分频器模块:
(1)目的:将输入的27Mhz信号分解为1Hz 信号。
(2)思路:每次上升沿来临时,中间变量加一,加输出的变量反转一次,则可以实现27Hz到1HZ信号的转变。
仿真效果图:
将中间 变成10,从图中可以看出,每过11个周期,one_second端信号翻转一次,说明分频器功能实现。
图2:分频器秒脉冲
实验现象:
以一个led灯作为分频器的输出,程序烧写到 DE2中观测到LED灯每秒中闪烁一次,说明程序功能实现。
代码如下:
module divider(one_second,reset,clk); //分频器模块
output one_second;
input reset,clk;
reg one_second;
reg[23:0] cnt;
always @(posedge clk)
begin
if (reset)
begin
cnt=0;
one_second=0;
end //同步复位
else if(cnt==//中间变量执行,时钟频率为27Mhz,从而形
//成1HZ的时钟
begin
cnt=0;
one_second=~one_second; //每0.5秒翻转一次
end
else
cnt=cnt+1;//中间变量不,执行cnt加一运算
end
endmodule
二:60进制计数器
目的:当输入时钟信号时,使用always语句,当来时钟的上升沿时,计数器加一,到59时,输入进位信号,进位信号当做下个时钟信号的输入。
思路:
图3:60进制仿真实验
图4:加入译码模块的仿真图
代码:
module second(qout,cout,reset,clk);
output[7:0] qout;
output cout;
input clk,reset;
reg[7:0] qout;
reg cout;
always @(posedge clk or posedge reset) //clk 上升沿时刻计数
begin
if (reset) qout=0; //同步复位
else
begin
if(qout[3:0]==9) //低位是否为9,是则
begin
qout[3:0]=0; //回0,并判断高位是否为5
if (qout[7:4]==5)
begin
qout[7:4]=0;
cout=1b1;
end
else
qout[7:4]=qout[7:4]+1; //高位不为5,则加1
end
else //低位不为9,则加1
begin
qout[3:0]=qout[3:0]+1;
cout=0;
end
end
end
endmodule
三:24进制计数器
思路:
与60进制计数器类似,当输入时钟信号时,时钟加一,加到24时,不需要进位。
仿真:
原创力文档

文档评论(0)