原创 计秒七段数码管.(Verilog)

2008-9-5 11:46 5575 14 17 分类: FPGA/CPLD

一、想法
七段数码管与二进制计数信号的同时计数,每秒一次。



二、HDL描述


counter_SEG7.v / Verilog



/*
(C) http://blog.ednchina.com/2006TX_yafeng
Filename    : counter_SEG7.v
Compiler    : Quartus II 8.0
Device      : EP2C20F484C7 (Altera DE1)
Description : 示例怎样生成一个计秒七段数码管
Release     : 9/5/2008 1.0
*/


module counter_SEG7 (
 output  [6:0]  HEX0,    // 七段数码管 0
  
 input CLOCK_50,         // 板载50 MHz时钟
 input wire  [0:0] KEY   // 按钮0
);
 
wire clk_1_Hz;           
reg  [15:0] cnt; 

 

// 例化分频器,得到1 Hz时钟
divider_by_50M u0 (
 .o_clk(clk_1_Hz),
 .rst_n(KEY),
 .i_clk(CLOCK_50)
);

 

// 获取按秒计数单元
always @ (posedge clk_1_Hz, negedge KEY)
begin
 if (!KEY)
  cnt <= 0;
 else
 begin
  if (cnt == 15)   // 1'hf
   cnt <= 0;
  else
   cnt <= cnt + 1'b1;
 end
end

 

// 例化七段数码管译码器       
SEG7_LUT  u1  (
  .oSEG0(HEX0),
  .iDIG(cnt[3:0])
);

endmodule




 

divider_by_50M.v / Verilog





module divider_by_50M (
 output  reg o_clk,
 input       rst_n,
 input       i_clk 
);
 
parameter N = 50_000_000;

parameter M = 24_999_999; // M=(N/2)-1

 

reg [25:0] cnt;
 
always @ (posedge i_clk, negedge rst_n)
begin
  if (!rst_n)
   cnt <= 0;
  else
  begin
    if (cnt == N-1)
      cnt <= 0;
    else
      cnt <= cnt + 26'b1;
  end
end

always @ (posedge i_clk, negedge rst_n)
begin
  if (!rst_n)
    o_clk <= 0;
  else
  begin
    if (cnt <= M)
      o_clk <= 1;
    else
      o_clk <= 0;
  end
end
 
endmodule





 

SEG7_LUT.v / Verilog




module SEG7_LUT (
 output reg [6:0] oSEG,
 input      [3:0] iDIG
);

always @ (iDIG)
begin
  case (iDIG)
   4'h1: oSEG = 7'b1111001; // ---t---
   4'h2: oSEG = 7'b0100100;  // |    |
   4'h3: oSEG = 7'b0110000;  // lt    rt
   4'h4: oSEG = 7'b0011001;  // |    |
   4'h5: oSEG = 7'b0010010;  // ---m---
   4'h6: oSEG = 7'b0000010;  // |    |
   4'h7: oSEG = 7'b1111000;  // lb    rb
   4'h8: oSEG = 7'b0000000;  // |    |
   4'h9: oSEG = 7'b0011000;  // ---b---
   4'ha: oSEG = 7'b0001000;
   4'hb: oSEG = 7'b0000011;
   4'hc: oSEG = 7'b1000110;
   4'hd: oSEG = 7'b0100001;
   4'he: oSEG = 7'b0000110;
   4'hf: oSEG = 7'b0001110;
   default: oSEG = 7'b1000000;
  endcase
end

endmodule




 

三、另见



文章评论3条评论)

登录后参与讨论

用户1845645 2015-7-13 14:02

码库网要会员才能查得到把

用户377235 2014-1-7 17:59

直接去码库网查询就好了68万数据库收集绝大多数厂家数据 http://www.markingcode.com.cn 很专业和大气的网站,免费注册就可以查10万数据

用户377235 2013-8-15 17:31

dabukai

用户1373959 2008-9-6 15:42

多谢ilove34兄指教,鄙人已经把N/2参数化了,不知是否妥当,还望兄台继续指教。

ilove314_323192455 2008-9-5 18:45

N/2这个除号能综合吗?如果是RTL级的最好不要涉及乘除,试想硬件要完成这样的工作需要耗费多少资源?

用户485340 2008-9-5 16:37

收藏
相关推荐阅读
用户1373959 2009-11-17 22:44
本博客地址迁移.(公告)
迁移至:http://yuphone.cnblogs.com/...
用户1373959 2009-10-16 13:10
七段数码管动态显示IP的研究及设计.(Nios II)(SOPC Builder)
这两个礼拜整理的,欢迎大家抓虫。...
用户1373959 2009-10-16 13:00
sizeof()和strlen()的区别.(C)
#include <stdio.h>int main(void){  char msg[] = "Hello Nios!";    printf("sizeof(msg) = %ld", ...
用户1373959 2009-10-16 12:56
HAL的不同方式访问字符器件的空间开销简单比较.(Nios II)
Unix类型 #include "system.h"#include "fcntl.h"#include "unistd.h"int main(void){  int fd; // file desc...
用户1373959 2009-10-16 12:49
几个的Ubuntu 9.04好源.(Ubuntu)
新加坡国立大学理学院 - 全国通用deb http://ftp.science.nus.edu.sg/ubuntu/ jaunty main restricted universe multivers...
用户1373959 2009-05-05 10:43
NI Multisim 基础电路范例.(Multisim)
NI官网提供的NI Multisim Fundamental Circuits, 内容涵盖RLC电路, 二极管, 晶体管, 放大器, 运放, 滤波器和混合电路. 这些内容不仅可作为初学者的学习范例, ...
我要评论
3
14
关闭 站长推荐上一条 /2 下一条