Verilog 0到99循环计数器

设计一个2位十进制的循环计数器,从0到99,然后再回到0.输出为out0和out1,分别表示十进制数的高位和低位。

设计代码

`timescale 1ns / 1ps
module Test1030(clk,rst,out0,out1,data);
input clk;
input rst;
output [3:0] out0;
output [3:0] out1;
output [7:0] data;
reg [3:0] out0;
reg [3:0] out1;
wire [7:0] data;

always @(posedge clk or negedge rst)
   if(!rst)
      begin
         out0=0;
         out1=0;
      end
   else
      begin
         if(out0= =9)
            begin
               out0<=0;
               out1=out1+1;
            end
         else
            out0<=out0+1;
         if(out1==10)
            out1<=0;
         else
            out1=out1;       
      end
 
assign data=(10*(out1))+out0;

     
endmodule

测试代码

`timescale 1ns / 1ps
module Test1049;
reg clk;
reg rst;
wire [3:0] out0;
wire [3:0] out1;
wire [7:0] data;

always begin
   #10 clk=0;
   #10 clk=1;
end

initial begin
   clk=0;
   rst=0;
   #100;
   rst=1;
end

Test1030 x1(.clk (clk ),
            .rst (rst ),
            .out0(out0),
            .out1(out1),
            .data(data));
endmodule

仿真波形
在这里插入图片描述
在这里插入图片描述
out0为低位输出,out1为高位输出,data将两个参数综合后输出两位十进制的数。

  • 5
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的Verilog代码,实现99到0的减法计数器,并将结果显示在数码管上: ```verilog module subtract_counter(clk, reset, anodes, segments); input clk, reset; output reg [3:0] anodes; output reg [7:0] segments; reg [7:0] count; always @(posedge clk or posedge reset) begin if (reset) begin count <= 8'h99; end else begin count <= count - 1; end end always @(count) begin case(count) 8'h00: segments <= 8'b11000000; // 0 8'h01: segments <= 8'b11111001; // 1 8'h02: segments <= 8'b10100100; // 2 8'h03: segments <= 8'b10110000; // 3 8'h04: segments <= 8'b10011001; // 4 8'h05: segments <= 8'b10010010; // 5 8'h06: segments <= 8'b10000010; // 6 8'h07: segments <= 8'b11111000; // 7 8'h08: segments <= 8'b10000000; // 8 8'h09: segments <= 8'b10010000; // 9 8'h0A: segments <= 8'b10001000; // A 8'h0B: segments <= 8'b10000011; // B 8'h0C: segments <= 8'b11000110; // C 8'h0D: segments <= 8'b10100001; // D 8'h0E: segments <= 8'b10000110; // E 8'h0F: segments <= 8'b10001110; // F default: segments <= 8'b11111111; // no display endcase end always @(anodes) begin case(anodes) 4'b0001: anodes <= 4'b0010; 4'b0010: anodes <= 4'b0100; 4'b0100: anodes <= 4'b1000; 4'b1000: anodes <= 4'b0001; default: anodes <= 4'b0001; endcase end endmodule ``` 这个代码使用一个名为`count`的8位寄存器,从8'h99开始减一,直到达到0。每当`count`改变时,一个`case`语句将根据当前值设置数码管的段选信号。`anodes`信号是用于选择哪个数码管(如果有多个)应该被显示。在这个代码中,我们假设只有一个数码管,并使用一个简单的循环来选择每个数码管。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值