Verilog中期作业

发布 2022-09-05 17:56:28 阅读 3756

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既是一种行为描述的语言也是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和...