计数器 FPGA电路实验 作业2

实验内容 1

使用Veriog - HDL 语言,DE0 FPGA 开发板 按照如下要求设计一个计数器电路 。

功能描述

在 DE0 开发板的 最右侧 的 HEX LED 数码管上,进行计数并用十进制数进行显示。计数器特征如下:

只能使用一个50MHz的时钟信号,不要有计数器分频的信号作为时钟

该计数器在电路复位后会循环的从0值递增计数到最大值,计数最大值是一个循环变化的过程,计数器复位之后,第一次计数最大值是6,然后是7、8、9,然后计数最大值又变成6,如此往复循环, 计数数值变化的时间间隔是1秒 ,计数过程如下所示:

0 1 … 6 0 1 … 7 0 1 … 8 0 1 … 9 0 1 … 6 ……

人工绘制的电路结构RTL设计图

顶层BDF图如下:
这里写图片描述
1.div模块为分频器用于将50MHz时钟信号分频产生1s时钟信号在clk_div输出。
2.count模块为产生符合技术要求的计数器。
3.decoder_hex模块为4-7译码器,译码使在数码管上显示对应字符。
div模块人工绘制的RTL图:
这里写图片描述

Quartus扫描生成的电路RTL图

这里写图片描述

计数器的计数值的SignalTap截图

这里写图片描述

实验代码

******************分频器代码******************
module div(
    clk   ,   // clock
    reset,
    CNTVAL,   // counter value
    clk_div);  // overflow
input clk;
input reset; 
output [32-1:0] CNTVAL;
output clk_div;
parameter MAX_VAL = 50_000_000;  //50MHz下为1s
reg [32-1:0] CNTVAL;
reg clk_div;
always @ (posedge clk) 
begin
  if (!reset) 
  begin
    CNTVAL <= 0;
  end
  else
  begin
    if(CNTVAL >= MAX_VAL)
      CNTVAL <= 0;
    else
      CNTVAL <= CNTVAL + 1'b1;  
  end
end
always @ (CNTVAL) begin
  if(CNTVAL == MAX_VAL)
    clk_div = 1'b1;
  else
    clk_div = 1'b0;
end
endmodule
******************计数器代码******************
module count(
    clk,
    cnt,
    OV);
input clk,rst;
output reg[3:0] cnt;
output OV;
reg[1:0] state,next_state;
reg[3:0] cnt_temp;
parameter s0=2'b00,s1=2'b01,s2=2'b11,s3=2'b10;

always@( next_state or rst)
begin
    if(rst)
        begin
        state=s0;
        cnt=0;
        end
    else
        begin
        state=next_state;
        cnt=cnt_temp;
        end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值