我想要一个每秒递增的 4 位计数器。但是当我尝试模拟时,我仅在输出中得到 xxxx

问题描述 投票:0回答:1

这是我的代码:

//`timescale 1ns / 1ps

module FourBitLedToggle(
    input res,
    input Clk,
     output [3:0] led
     
    );
    
reg [27:0] count;//for 1 second check
reg clk1s;//1 second clock
reg [3:0]counterled;

always @(posedge Clk)
begin

if(res==1'b1)  //CHECK RESET
begin
clk1s<=1'b1;
count<=0;
end

else begin

if(count==28'h2FAF080)//0.5 sec //CHECKS IF SEC COMPLETED
begin

clk1s <= ~clk1s;

count <= 0;
end
else begin
 count <=count+1;
end
end
end

always @(posedge clk1s)  //CHECKS EVERY POSITIVE EDGE OF CLK1S
begin
counterled<=counterled+4'b0001;
end

assign led=counterled;

endmodule

这是我使用的测试平台: //我猜我只需要clk

`timescale 1us / 1us

module FourBitToggleCheck;

    // Inputs
    reg res;
    reg Clk;

    // Outputs
    wire [3:0] led;

    // Instantiate the Unit Under Test (UUT)
    FourBitLedToggle uut (
        .res(res), 
        .Clk(Clk), 
        .led(led)
    );

    initial begin
        // Initialize Inputs
        res = 0;
        Clk = 0;

        
        forever 
          #10 Clk=~Clk;

    end
      initial begin
       res=1;
       #20;
       res=0;
     end
endmodule

这是我的模拟结果:

enter image description here

我是 Verilog 新手,无法理解如何在模拟中引入 4 位计数器所需的增量行为。任何帮助将不胜感激。

verilog simulation xilinx synthesis
1个回答
0
投票

28'h2FAF080
28'd50_000_000
相同。 这太多了 1000 倍。应该是
50_000
。 变化:

       if(count==28'h2FAF080)//0.5 sec //CHECKS IF SEC COMPLETED

至:

       if(count==28'd50_000)//0.5 sec //CHECKS IF SEC COMPLETED
© www.soinside.com 2019 - 2024. All rights reserved.