• Support PF! Buy your school textbooks, materials and every day products Here!

Designing a two-bit adder using verilog's primitive gates_I get z for my outputs

  • Thread starter Loulou21
  • Start date
  • #1
2
0
designing a two-bit adder using verilog's primitive gates_I get "z" for my outputs

Hi,
I am trying to write verilog code for a two bit adder using verilog's primitive gates. I had implemented a two bit adder before...using gates I myself had implemented with nmos and pmos transistors, with delays of 3,4,5 (ns) for the nmos transistors and 5,6,7 (ns) for the pmos transistors. The worstcase delay I had calculated for the final adder was 31 ns.(I think we need to know this to get good results when simulating!) And I had instantiated this adder within a testbench. When I simulated my adder, I didn't have any problems.
Here are the code I used for the adder and the testbench of the adder:
(mxor/mnand2/mnand3/minverter used below, are my own gates that I had implemented and tested each; and they all worked fine!)
************************************************************
module madder(input a1,a0,b1,b0, output s2,s1,s0);

wire nanda0b0,notnanda0b0,xora1b1,nanda0b1b0,nanda1b1,nanda1a0b0;

mxor xorfors0(a0,b0,s0);

mnand2 nand2fors1(a0,b0,nanda0b0);
minverter inverterfors1(nanda0b0,notnanda0b0);
mxor xor1fors1(a1,b1,xora1b1);
mxor xor2fors1(xora1b1,notnanda0b0,s1);

mnand3 nand31fors2(a1,a0,b0,nanda1a0b0);
mnand2 nand2fors2(a1,b1,nanda1b1);
mnand3 nand32fors2(a0,b1,b0,nanda0b1b0);
mnand3 nand33fors2(nanda1a0b0,nanda1b1,nanda0b1b0,s2);

endmodule
*********************************************************
module madderTester();

reg ia1=1;
reg ia0=1;
reg ib1=1;
reg ib0=1;

wire ws2;
wire ws1;
wire ws0;

madder madderInstance(ia1,ia0,ib1,ib0,ws2,ws1,ws0);


initial repeat(50) #72 ia1=~ia1;

initial repeat(45) #61 ia0=~ia0;

initial repeat(40) #79 ib1=~ib1;

initial repeat(50) #67 ib0=~ib0;



endmodule
****************************************************************
Now I'm supposed to implement the same two bit adder using verilog's primitive gates.
I have calculated the worst-case delays of each gate (2-input nand/3-input nand/nor/xor/not), using the same numbers as above (3,4,5) and (5,6,7) for nmos and pmos transistors respectively. Using these time delays and the transistor implementation of each gate, I have calculated 0-to-1 and 1-to-0 delays for each of the above gates that I need in my two bit adder.
These are the delays I found: (the first delay is 0-to-1 delay and the second one is 1-to-0)
*for 2-input nand: 7; 10 (ns)
*for 3-input nand: 7; 15 (ns)
*for xor: 21; 24 (ns)
*for not: 7; 5 (ns)

Here's my code for the two bit adder using verilog's primitive gates (and the gate delays I calculated above):

*******************************************************
module madder(input a1,a0,b1,b0, output s2,s1,s0);

wire nanda0b0,notnanda0b0,xora1b1,nanda0b1b0,nanda1b1,nanda1a0b0;

xor #(21,24) xorfors0(a0,b0,s0);

nand #(7,10) nand2fors1(a0,b0,nanda0b0);
not #(7,5) inverterfors1(nanda0b0,notnanda0b0);
xor #(21,24) xor1fors1(a1,b1,xora1b1);
xor #(21,24) xor2fors1(xora1b1,notnanda0b0,s1);

nand #(7,15) nand31fors2(a1,a0,b0,nanda1a0b0);
nand #(7,10) nand2fors2(a1,b1,nanda1b1);
nand #(7,15) nand32fors2(a0,b1,b0,nanda0b1b0);
nand #(7,15) nand33fors2(nanda1a0b0,nanda1b1,nanda0b1b0,s2);

endmodule
*************************************************************
And the testbench:


module madderTester();

reg ia1=1;
reg ia0=1;
reg ib1=1;
reg ib0=1;

wire ws2;
wire ws1;
wire ws0;

madder madderInstance(ia1,ia0,ib1,ib0,ws2,ws1,ws0);


initial repeat(50) #31 ia1=~ia1;

initial repeat(45) #47 ia0=~ia0;

initial repeat(40) #81 ib1=~ib1;

initial repeat(50) #73 ib0=~ib0;



endmodule
********************************************************
When I simulate this, I get "z" for all three outputs...And I have no idea why!
Can anyone help me, please? How can I get rid of these "z"s? What's wrong?! O.O
I would appreciate your help in advance!!
=)
 

Answers and Replies

  • #2
2
0


OMG.........SORRYYYYYY!!!!!!! I figured the problem myself!!!! For the primitive gates of verilog, I had first entered the inputs and then the ouput......Because I thought it was like the gates I myself had implemented using transistors...But when I first entered the output then the inputs (like: nand myNand #(7,10) (ouput, input1, input2); ), the "z"s I used to get in the waveforms dissappeared!!! =)))))
 

Related Threads on Designing a two-bit adder using verilog's primitive gates_I get z for my outputs

  • Last Post
Replies
7
Views
5K
Replies
1
Views
5K
Replies
0
Views
18K
Replies
0
Views
4K
Replies
2
Views
36K
  • Last Post
Replies
0
Views
18K
  • Last Post
Replies
6
Views
4K
  • Last Post
Replies
6
Views
12K
Replies
2
Views
14K
Replies
1
Views
5K
Top