dshawn
dshawn

Reputation: 327

Verilog d flipflop circuit testing

I'm trying to construct a structural implementation of a circuit that consists of a d flipflop, it has inputs x and y, x and y are exclusive or'd and that result is exclusive or'd with the current state, and used as the input to the d flip flop. and it'll use the result state from the flipflop in the next run, etc. But I'm not too sure how to construct it.

The circuit looks like so: enter image description here

module dff(D,clk,q);
input D,clk;
output q;
reg q;
always @ (posedge clk)
 begin
  q<=D;
 end
endmodule

I'm pretty sure the d flip flop code is correct but when I try to test this my d and state values are just x for some reason. When I put in different x and y values in my testbench nothing happens, "state" and "d" just always says it has value "1'hx" in the simulation. Why is this happening and how do I actually assign an value to them?

Upvotes: 0

Views: 600

Answers (2)

Serge
Serge

Reputation: 12344

All signals in verilog simulation are initialized to 'x'. So are the values of A and D. Your second xor is applied to xoy ^ A. Since A is x, the result of this xor is always x. you need to break this loop, as oldfart suggested.

The usual way for doing it is to introduce a reset in the flop, synchronous or asynchronous. Here is an example of a synchronous reset flop:

always @(posedge clk)
    if (reset)
        q <= 0;
    else 
        q <= D;

So, now, if you set your reset to '1' for at least one posedge of clk and then set it to '0', you will break the loop by pushing a non-'x' value in the data path.

Upvotes: 1

Oldfart
Oldfart

Reputation: 6259

You do not clear your D-FF. The output is X at the start and as you use that in a feedback loop it stays X.

This: wire state=1'b0; does not clear you FF. You have to clear 'q'.

Upvotes: 0

Related Questions