Verilog HDL语言的计数器程序

1.二进制法六十进制计数器

module timer(

 input clk,

 output reg[5:0] counter //转化为二进制有几位

 );

parameter i=59; //宏定义任意进制计数器

always@(posedge clk)

  begin

     if(counter == i)

            counter <= 0;

     else

            counter <= counter+1'b1;

  end

endmodule  


2.8421BCD码六十进制计数器

module bcd_cnt60(

 input clk,en,clr,

 output reg[3:0] QL,//第四位

 output reg[7:4] QH//高四位

 );

always@(posedge clk,negedge clr)

 begin

  if(~clr)

     begin

        QL<=0;

        QH<=0;

     end

  else if(en)

       begin

            if(QL==9)

               begin

               QL<=0;

               if(QH==5)//嵌套条件

                     QH<=0;

               else 

                     QH<=QH+1;

               end

           else

              QL<=QL+1;

         end

  else

       begin 

            QL <= QL; 

            QH <= QH;

        end

 end

endmodule 

 

3.级联法的六十进制计数器

module top_counter(CLK,EN,CLR,sid_out,sed_out);
input CLR;
input CLK;
input EN;
output [3:0] sid_out;
output [3:0] sed_out;
wire  sid;
counter_10 U1(
.CLR(CLR),
.CLK(CLK),
.EN(EN),
.COUT(sid),
.OUT(sid_out),
);


counter_6 U2(
.CLR(CLR),
.CLK(CLK),
.EN(sid),
.AUT(sed_out ),
);
endmodule


module counter_10 (CLK,EN,CLR,OUT,COUT);
input CLR;
input CLK;
input EN;
output reg[3:0]OUT;
output COUT;
always@(posedge CLK,negedge CLR)
begin
if(~CLR) OUT<=1'b0;
else if(~EN) OUT<=OUT;
else if(OUT==4'b1001) OUT<=1'b0000;
else OUT<=OUT+1'b1;
end
assign COUT=((OUT==4'b1001)&EN)?1:0;
endmodule 


module counter_6 (CLK,EN,CLR,AUT,COUT);
input CLR;
input CLK;
input EN;
output reg[3:0]AUT;
output COUT;
always@(posedge CLK,negedge CLR)
begin
if(~CLR) AUT<=1'b0;
else if(~EN) AUT<=AUT;
else if(AUT==4'b0101) AUT<=1'b0000;
else AUT<=AUT+1'b1;
end

endmodule 


4.进位的反脉冲解决进位问题

module test(
 input clk,
 output reg t,
 input e,
 output reg[3:0] counter //转化为二进制有几位
 );

parameter i=9;
always@(posedge clk)
  begin
if(e)
begin
if(counter == i)
begin
t<=0;
counter <=4'b0000;
end
else if(counter==i-1)
begin
t<=1;
counter <= counter+1;
end

else
begin
counter<=counter+1;
        t<=0;
end
end
else
counter<=counter; 
  end
endmodule  

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值