module FA(co, s, a, b, ci); output co, s; input a, b, ci; assign co = a&b | a&ci | b&ci; assign s = a^b^ci; endmodule module Adder4(s, a, b); output [4:0] s; input [3:0] a, b; wire [3:1] c; FA fa0(c[1], s[0], a[0], b[0], 1'b0); FA fa1(c[2], s[1], a[1], b[1], c[1]); FA fa2(c[3], s[2], a[2], b[2], c[2]); FA fa3(s[4], s[3], a[3], b[3], c[3]); endmodule module Mux4x8(z, s, i0, i1, i2, i3); output [7:0] z; input [1:0] s; input [7:0] i0, i1, i2, i3; assign z = s == 2'b00 ? i0 : s == 2'b01 ? i1 : s == 2'b10 ? i2 : i3; endmodule module Stimulus; reg [3:0] a, b; wire [4:0] s; Adder4 my_adder(s, a, b); initial begin a = 4'd0; b = 4'd0; end always #31 a = a+1; always #53 b = b+1; endmodule module Stimulus2; wire [7:0] z; reg [1:0] sel; reg [7:0] i [0:3]; Mux4x8 mux(z, sel, i[0], i[1], i[2], i[3]); initial begin sel = 0; i[0] = 8'd13; i[1] = 8'd23; i[2] = 8'd37; i[3] = 8'd53; end always #20 sel = sel +1; endmodule