Reputation: 327
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.
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
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
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