verilog中期作业---计数器报告。
姓名:刘恒学号:2012160240 班级: 微电2班。
本次作业中,要实现以1hz脉冲为时钟信号的从00计数至59的计数器功能,我设计了一个由五个模块组成的工程,通过编写**写出具体功能,用顶层模块调用其余4个模块,实现在1hz从00至59的计数,复位功能。如下显示具体**及**结果。
1.程序**。
1.27mhz分频器模块。
**如下:module clock_1hz(clock,clk,reset);
output clock;
input clk;
input reset;
integer i;
reg clock;
always @(posedge clk)//clk信号出现高电平时运行程序。
beginif(reset)
begini<=0;
clock<=0;
endelse
beginif (i < 13599999)
begini<=i+1;
endelse
beginclock<=~clock;//程序在系统时钟周期中计数***次后令clock翻转。
i <=0;
endend
endendmodule
计数模块。**如下:
module counter(qoutl,qouth,reset,clock,cout);
output[3:0] qoutl,qouth;
output cout;
input clock,reset;
reg[3:0] qoutl;
reg[3:0] qouth;
reg cout;
always @(posedge reset or posedge clock) /clock 在上升沿时刻计数或reset为0时运行。
beginif (reset)
beginqoutl[3:0]<=0;//高低输出同时清零。
qouth[3:0]<=0;
endelse
beginif(qoutl[3:0]==9) /判断低位是否为9,是则产生进位输出信号。
beginqoutl[3:0]<=0; /低位清0,并判断高位是否为5
if (qouth[3:0]==4'b0101)
begin
qouth<=0;
cout<=1产生进位输出信号。
endelse
qouth[3:0]<=qouth[3:0]+1; /若高位不为5,高位加1
endelse //若低位不为9,低位加1
beginqoutl[3:0]<=qoutl[3:0]+1;
cout<=0将进位端锁存清零。
endend
endendmodule
3.低位译码器模块。
**如下:module displayl(decodeout,qout);
output[6:0] decodeout;
input[3:0] qout;
reg[6:0] decodeout;
always @(qout)
begincase(qout) /运行case 语句对低位译码。
4'd0:decodeout=7'b1000000;
4'd1:decodeout=7'b1111001;
4'd2:decodeout=7'b0100100;
4'd3:decodeout=7'b0110000;
4'd4:decodeout=7'b0011001;
4'd5:decodeout=7'b0010010;
4'd6:decodeout=7'b0000010;
4'd7:decodeout=7'b1111000;
4'd8:decodeout=7'b0000000;
4'd9:decodeout=7'b0010000;
default: decodeout=7'bx;
endcase
endendmodule
4.高位译码器模块。
**如下:module displayh(decodeout,qout);
output[6:0] decodeout;
input[3:0] qout;
reg[6:0] decodeout;
always @(qout)
begincase(qout) /运行case语句对高位译码。
4'd0:decodeout=7'b1000000;
4'd1:decodeout=7'b1111001;
4'd2:decodeout=7'b0100100;
4'd3:decodeout=7'b0110000;
4'd4:decodeout=7'b0011001;
4'd5:decodeout=7'b0010010;
4'd6:decodeout=7'b0000010;
4'd7:decodeout=7'b1111000;
4'd8:decodeout=7'b0000000;
4'd9:decodeout=7'b0010000;
default: decodeout=7'bx;
endcase
endendmodule
5.顶层调用模块。
**如下:module clockcounter7(qouth,qoutl,clock,decodeoutl,decodeouth,clk,reset,cout);
output[6:0] decodeoutl;
output[6:0] decodeouth;
output cout;
output clock;
output[3:0] qoutl,qouth;
input clk,reset;
wire clock,clk,reset;
wire[6:0] decodeoutl,decodeouth;
reg[3:0] qoutl;
reg[3:0] qouth;
clock_1hz l(clock,clk,reset);/调用27mhz分频器模块。
counter h(qoutl,qouth,reset,clock,cout);/调用bcd计数器模块。
displayl j(decodeoutl,qoutl);/调用低位译码器模块。
displayh u(decodeouth,qouth);/调用高位译码器模块。
endmodule
二:**结果。
说明:由于分频器中clk信号计数频率过大,难以看到分频器**结果,所以在**中clk信号计数次数由***改为14以方便看出**效果,在其他模块**过程中以此类推减小clk信号计数次数。
1. 分频器模块**结果如图(1)所示:体现了该分频器功能。
图(1)计数器模块**结果如图(2)所示:
图中每来一个clock信号,低位qoul就计数一次,计数至9,就进一位给qouh.
图(2)3.为方便比较和观察将顶层模块与高低位译码器的**波形放在一起。如图(3),(4)所示。
图中可以看出计数至59产生的cout电平跳变以及计数器,译码器的**波形。
图(3)图(4)
3.实验结果。
**完后对顶层模块中的输入输出管脚进行分配,如下图(5)所示:
图(5)分配好管脚后通过de2实验板运行程序可看到以1hz脉冲为时钟信号的从00计数至59的计数,复位功能实现的结果。
图(6)左边两个数码管是计数器的显示模块,右下角的开关为复位开关,图中就是复位处于sw0置位状态,所以数码管显示“00”。
图(6)下图(7)为de2实验板计数到59时的状态。
图(7)下图(8)中,当计数器计数至“59”时接收到一个时钟时,此时会复位为“00”,并且产生进位,此时可以看到右下角的led0灯亮了,说明产生了进位。led0灯亮了一秒后,会有下个时钟到来,此时清除进位,图中左下角的led指示灯在程序进行计数时会保持亮的状态。
图(8)以上de2实验板的烧录结果成功验证了本次实验的verilog**及**波形。
4.心得体会。
本次实验我花了不少功夫钻研**,**纠错和程序使用,虽经历许许多多的困难,有过许许多多的困惑,但是我都坚持下来并一一解决了,一开始我独立思考,实在想不到就请教老师,询问那些做好了的同学,最终成功完成了实验,这次实验让我好好地锻炼了独立思考,解决问题的能力,培养了我编程的兴趣和能力,十分感谢老师和帮助我的同学,希望以后能有更大的进步。
verilog大作业
彩灯控制器设计。一设计任务 设计一种彩灯控制器控制8盏灯。该彩灯控制器有6种自动切换的花样。1.第一种花样为彩灯从右到左,然后从左到右逐次灭,全灭全亮 2.第二种花样为彩灯两边同时亮一个逐次向中间移动再散开 3.第三种花样为彩灯两边同时亮两个逐次向中间移动再散开 4.第四种花样为彩灯两边同时亮三个,...
verilog作业题
1 以结构描述方式实现下列逻辑 f ab acd cd的非 2 以连续赋值语句设计8位总线驱动器。3 以always语句设计8位总线驱动器。4 以always语句设计8位双向总线驱动器。1 设计一个具有低电平使能端和高电平使能端的2 4译码器。2 设计一个jk触发器。3 设计一个24分频期,要求输出...
verilog语法
第三章 verilog hdl的基本语法。前言。verilog hdl是一种用于数字逻辑电路设计的语言。用verilog hdl描述的电路设计就是该电路的verilog hdl模型。verilog hdl既是一种行为描述的语言也是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和...