blob: dd850076a21b2c3ec6ec4924b6ecd89dbb6ca601 [file] [log] [blame]
// DEFINES
`define BITS 2 // Bit width of the operands
module test(clock,
reset_n,
a_in,
b_in,
c_in,
d_in,
out0,
out1);
// SIGNAL DECLARATIONS
input clock;
input reset_n;
input [`BITS-1:0] a_in;
input [`BITS-1:0] b_in;
input c_in;
input d_in;
output [`BITS-1:0] out0;
output out1;
wire [`BITS-1:0] out0;
wire out1;
wire [`BITS-1:0] temp_a;
wire [`BITS-1:0] temp_b;
wire temp_c;
wire temp_d;
a top_a(clock, a_in, b_in, temp_a);
b top_b(clock, a_in, b_in, temp_b);
c top_c(c_in, d_in, temp_c);
d top_d(clock, c_in, d_in, temp_d);
assign out0 = temp_a & temp_b;
assign out1 = temp_c | temp_d;
endmodule
/*---------------------------------------------------------*/
module a(clock,
a_in,
b_in,
out);
input clock;
input [`BITS-1:0] a_in;
input [`BITS-1:0] b_in;
output [`BITS-1:0] out;
reg [`BITS-1:0] out;
always @(posedge clock)
begin
out <= a_in & b_in;
end
endmodule
/*---------------------------------------------------------*/
module b(clock,
a_in,
b_in,
out);
input clock;
input [`BITS-1:0] a_in;
input [`BITS-1:0] b_in;
reg [`BITS-1:0] temp;
output [`BITS-1:0] out;
reg [`BITS-1:0] out;
always @(posedge clock)
begin
temp <= a_in | b_in;
out <= a_in ^ temp;
end
endmodule
/*---------------------------------------------------------*/
module c(
c_in,
d_in,
out1);
// SIGNAL DECLARATIONS
input c_in;
input d_in;
output out1;
wire out1;
wire temp;
assign out1 = temp ^ d_in;
assign temp = c_in & d_in;
endmodule
/*---------------------------------------------------------*/
module d(clock,
c_in,
d_in,
out1);
// SIGNAL DECLARATIONS
input clock;
input c_in;
input d_in;
output out1;
reg out1;
reg temp;
always @(posedge clock)
begin
out1 <= temp | d_in;
temp <= c_in ^ d_in;
end
endmodule