FPGA4位十进制频率计设计实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA 实验报告

题目:4位十进制频率计设计

一、实验目的:

设计4位十进制频率计,学习较复杂的数字系统设计方法。 二、原理说明:

根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。这清0个信号可以由一个测频控制信号发生器产生,即图5-1中的TESTCTL ,它的设计要求是,TESTCTL 的计数使能信号CNT_EN 能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的EN 使能端进行同步控制。当CNT_EN 高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOAD 的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B 中,并由外部的7段译码器译出,显示计数值。设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存信号之后,必须有一清零信号RST_CNT 对计数器进行清零,为下1秒钟的计数操作作准备。 三、实验步骤.

1.在QUARTUSII 软件下创建一工程,工程名为frequency ,芯片名为EP2C35F672C6;

2.输入10进制计数器模块,用于计算分频结果,并连接数码管显示。将其命名为cnt10d.v ,然后保存在与工程相同的文件夹中;

其功能和时序仿真波形分别如下:

module cnt10d(clk,rst,en,cq,cout);

input clk;

input rst; input en; output[3:0] cq; output cout; reg[3:0] cq;

reg cout;

always@(posedge clk or posedge rst)

begin

if(rst) cq<=4'b0000; else if(en) begin if(cq<9)

begin cq<=cq+1'b1;cout<=1'b0; end

else begin cq<=4'b0000; cout<=1'b1; end end end endmodule

分析:由波形可知,当rst为高时,cq为0,当en为高时,cq开始计数,可知结果正确。

3.输入测频控制器模块,使得频率计能自动测频,将其命名为testctl.v,然后保存在与工程相同的文件夹中。

module testctl(clkk,cnt_en,rst_cnt,load);

input clkk; // 1HZ

output cnt_en;

output rst_cnt;

output load;

reg div2clk;

wire cnt_en;

reg rst_cnt;

wire load;

always@(posedge clkk)

div2clk<=~div2clk; always @(clkk or div2clk) begin

if(!clkk & !div2clk)

rst_cnt<=1'b1;

else rst_cnt<=1'b0;

end

assign load = ~div2clk;

assign cnt_en = div2clk; endmodule

其功能和时序仿真波形分别如下:

4.输入锁存器模块,将频率计的每位数锁存后输出,并将其命名为reg4.v,,保存.

module reg4(clk,cq,led );

input clk;

input[3:0] cq;

output[3:0] led;

reg[3:0] led;

always@(posedge clk)

led<=cq;

endmodule

其功能和时序仿真波形分别如下:

波形分析:由波形可知,当clk有效时,cq的值被锁存后,由led输出,由此可得,结果正确。

5.输入产生测频器的clk(8Hz)d的分频模块并将其命名为div_50.v,保存.

module div_50(clk2,Q2);

input clk2;

output Q2;

reg Q2;

reg[23:0] count;

always @(posedge clk2)begin

if(count==4999999) count<=0;else

count<=count+2'b1;end always @(count)begin

if(count==4999999)

Q2<=1;else

Q2<=0;end

endmodule

endmodule

6.输入f_in (频率任意定)时钟模块,用于连接在DE2上进行测试。并将其命名为div_2

7.v ,保存.

7.输入数码管显示模块并将其命名为decl7s.v ,保存.

其仿真波形如下所示:

module div_27(clk1,Q1); input clk1;

output Q1; reg Q1; reg[27:0] count; always @(posedge clk1)begin if(count==53999999)

count<=0;else count<=count+2'b1;end

end always @(count)begin if(count==53999999) Q1<=1; else Q1<=0;end endmodule module decl7s(a,led7s ); input[3:0] a; output[6:0] led7s; reg[6:0] led; always@(a) begin

case(a)

4'b0000:led[6:0]=7'b1000000;

4'b0001:led[6:0]=7'b1111001;

4'b0010:led[6:0]=7'b0100100; 4'b0011:led[6:0]=7'b0110000; 4'b0100:led[6:0]=7'b0011001; 4'b0101:led[6:0]=7'b0010010; 4'b0110:led[6:0]=7'b0000010; 4'b0111:led[6:0]=7'b1111000; 4'b1000:led[6:0]=7'b0000000; 4'b1001:led[6:0]=7'b0011000;

default:led[6:0]=7'b1111111;

endcase

end

assign led7s=led; endmodule

相关文档
最新文档