当前位置:   article > 正文

【FPGA & Verilog&Modelsim】 8bitBCD码60计数器_modelsim设计8位计数器

modelsim设计8位计数器

可私信获取整个项目文件 

8bit 即有8位二进制

BCD码 ,全称Binary-Coded Decimal,简称BCD码或者二-十进制代码

利用四位二进制(0000-1111)16个中选择10个作为十进制0-9;

常见的BCD码是8421码

本项目使用两组BCD码(每组4bit,共8bit,故称为8bitBCD)(高位0-5,低位0-9)组成0-59计数器

闲话不多,上代码

计数值qout达到60时,cout进位输出,

data是预知术,cin是累加计数使能端

  1. module counter60(clk,reset,cin,load,data,qout,cout);
  2. input clk,reset,load,cin; //时钟,复位,置数,计数有效使能端
  3. input [7:0]data; //预置数据
  4. output reg[7:0]qout; //计数值输出
  5. output cout;//进位输出
  6. always@(posedge clk)
  7. begin
  8. if(reset) qout<=0;
  9. else if(load) qout<=data;
  10. else if(cin)
  11. begin
  12. if(qout[3:0]==9)
  13. begin
  14. qout[3:0]<=0;
  15. if(qout[7:4]==5) qout[7:4]<=0;
  16. else
  17. qout[7:4]<=qout[7:4]+4'b1;
  18. end
  19. else qout[3:0]<=qout[3:0]+4'b1;
  20. end
  21. end
  22. assign cout= ((qout==8'h59)&cin) ? 1'b1 :1'b0;
  23. endmodule
  1. `timescale 10ns/1ns
  2. module counter60_tb;
  3. reg clk,reset,load,cin; //时钟,复位,置数,计数有效使能端
  4. reg [7:0]data; //预置数据
  5. wire[7:0]qout; //计数值输出
  6. wire cout;//进位输出
  7. parameter DELY = 100;
  8. counter60 U1(
  9. .clk(clk),
  10. .reset(reset),
  11. .cin(cin),
  12. .load(load),
  13. .data(data),
  14. .qout(qout),
  15. .cout(cout)
  16. );
  17. always #(DELY/2) clk=~clk;
  18. initial begin
  19. clk=0;
  20. reset=0;
  21. data=10;
  22. #DELY reset =1;
  23. #DELY reset =0;load=1;
  24. #DELY reset =0;load=0;cin=1;
  25. #(DELY*300)$finish;
  26. end
  27. always@(posedge clk)
  28. begin
  29. $display($time,,,"clk=%d reset=%d qout=%h",clk,reset,qout);
  30. end
  31. endmodule

modsim端:

可私信获取整个项目文件

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/731328
推荐阅读
相关标签
  

闽ICP备14008679号