Mohamed Elsayed
Mohamed Elsayed

Reputation: 27

How to take (1) as an input in Verilog

I am writing a Verilog code for a 4-bit binary incrementer, and I need to take (1) as an input in the circuit.

module incre_4(S,Cout,A,Cin)
  reg  x = 1;
  input [3:0]A,1,Cin;
  output [3:0]S,Cout;
  wire C1,C2,C3;
  
  full_add  FA0(S[0],C1,x,A[0],Cin),
            FA1(S[1],C2,x,A[1],C1),
            FA2(S[2],C3,x,A[2],C2),
            FA3(S[3],Cout,x,A[3],C3);
  
endmodule :incre_4
  
module full_add(a,b,cin,sum,cout);
  input a,b,cin;
  output sum,cout;
  wire x,y,z;
 
  half_add h1(.a(a),.b(b),.s(x),.c(y));
  half_add h2(.a(x),.b(cin),.s(sum),.c(z));
  or o1(cout,y,z);
endmodule : full_add

module half_add(a,b,s,c); 
  input a,b;
  output s,c;

  xor x1(s,a,b);
  and a1(c,a,b);
endmodule :half_add

But, it gives me a syntax error. How can I do that?

Upvotes: 1

Views: 762

Answers (1)

toolic
toolic

Reputation: 62236

You have a few errors.

You can not declare 1 as a module input. You need to delete that from the input line. It looks like you are achieving what you want with the x reg by assigning it to 1.

You need to split up your input line into 2 lines because you want Cin to be a single bit signal, but it is 4 bits because it inherits the [3:0] range. The same is true for the Cout output. Here is the module without errors:

module incre_4(S,Cout,A,Cin);
  reg  x = 1;
  input [3:0]A;
  input Cin;
  output [3:0]S;
  output Cout;
  wire C1,C2,C3;
  
  full_add  FA0(S[0],C1,x,A[0],Cin),
            FA1(S[1],C2,x,A[1],C1),
            FA2(S[2],C3,x,A[2],C2),
            FA3(S[3],Cout,x,A[3],C3);
  
endmodule :incre_4

Upvotes: 1

Related Questions