I have just started learning Verilog, so I tried writing a simple 4-bit binary counter. However, when I run the behavioural simulation, the output stays undetermined. I will really appreciate if someone can tell me where I am going wrong.

module counter(input clk, input rst, output reg [3:0] count);

always@ (posedge clk)

        count <= 4'b0;
        count <= count + 1'b1;


Here is a screenshot of the behavioural simulation

  • 3
    \$\begingroup\$ Toggle your reset line to initialize the count reg. \$\endgroup\$ – schadjo Mar 19 '20 at 19:46
  • 1
    \$\begingroup\$ u could have posted full picture of simulation.anyways as @schadjo mentioned this due to the missing of reset pulse. or else u could do module counter(input clk, input rst, output reg [3:0] count = 0); \$\endgroup\$ – RAMA KRISHNA MEDA Mar 20 '20 at 8:57

Your count starts at X (actually it starts 4'bxxxx.).

Now if you add 1'b1 to 4'bxxxx you still have 4'bxxxx. Sort of like a dead-lock

The only way to break this deadlock in your code is to apply a reset whilst the clock is running. That forces the counter to zero and after removing the reset you can use it to count.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.