module flop (clk, d, q); input clk, d; output q; reg q; always @(posedge clk) begin q <= d; end endmodule
module flop (clk, d, clr, q); input clk, d, clr; output q; reg q; always @(negedge clk or posedge clr) begin if (clr) q <= 1’b0; else q <= d; end endmodule
module flop (clk, d, s, q); input clk, d, s; output q; reg q; always @(posedge clk) begin if (s) q <= 1’b1; else q <= d; end endmodule
module flop (clk, d, ce, q); input clk, d, ce; output q; reg q; always @(posedge clk) begin if (ce) q <= d; end endmodule
module flop (clk, d, ce, pre, q); input clk, ce, pre; input [3:0] d; output [3:0] q; reg [3:0] q; always @(posedge clk or posedge pre) begin if (pre) q <= 4’b1111; else if (ce) q <= d; end endmodule
module latch (g, d, q); input g, d; output q; reg q; always @(g or d) begin if (g) q <= d; end endmodule
module latch (g, d, clr, q); input g, d, clr; output q; reg q; always @(g or d or clr) begin if (clr) q <= 1’b0; else if (g) q <= d; end endmodule
module latch (g, d, pre, q); input g, pre; input [3:0] d; output [3:0] q; reg [3:0] q; always @(g or d or pre) begin if (pre) q <= 4’b1111; else if (~g) q <= d; end endmodule
module three_st (t, i, o); input t, i; output o; reg o; always @(t or i) begin if (~t) o = i; else o = 1’bZ; end endmodule
module three_st (t, i, o); input t, i; output o; assign o = (~t) ? i: 1’bZ; endmodule
module counter (clk, clr, q); input clk, clr; output [3:0] q; reg [3:0] tmp; always @(posedge clk or posedge clr) begin if (clr) tmp <= 4’b0000; else tmp <= tmp + 1’b1; end assign q = tmp; endmodule
module counter (clk, s, q); input clk, s; output [3:0] q; reg [3:0] tmp; always @(posedge clk) begin if (s) tmp <= 4’b1111; else tmp <= tmp - 1’b1; end assign q = tmp; endmodule
module counter (clk, load, d, q); input clk, load; input [3:0] d; output [3:0] q; reg [3:0] tmp; always @(posedge clk or posedge load) begin if (load) tmp <= d; else tmp <= tmp + 1’b1; end assign q = tmp; endmodule
module counter (clk, sload, q); input clk, sload; output [3:0] q; reg [3:0] tmp; always @(posedge clk) begin if (sload) tmp <= 4’b1010; else tmp <= tmp + 1’b1; end assign q = tmp; endmodule
module counter (clk, clr, ce, q); input clk, clr, ce; output [3:0] q; reg [3:0] tmp; always @(posedge clk or posedge clr) begin if (clr) tmp <= 4’b0000; else if (ce) tmp <= tmp + 1’b1; end assign q = tmp; endmodule
module counter (clk, clr, up_down, q); input clk, clr, up_down; output [3:0] q; reg [3:0] tmp; always @(posedge clk or posedge clr) begin if (clr) tmp <= 4’b0000; else if (up_down) tmp <= tmp + 1’b1; else tmp <= tmp - 1’b1; end assign q = tmp; endmodule
module counter (clk, clr, q); input clk, clr; output signed [3:0] q; reg signed [3:0] tmp; always @ (posedge clk or posedge clr) begin if (clr) tmp <= 4’b0000; else tmp <= tmp + 1’b1; end assign q = tmp; endmodule
module counter (clk, clr, q); parameter MAX_SQRT = 4, MAX = (MAX_SQRT*MAX_SQRT); input clk, clr; output [MAX_SQRT-1:0] q; reg [MAX_SQRT-1:0] cnt; always @ (posedge clk or posedge clr) begin if (clr) cnt <= 0; else cnt <= (cnt + 1) %MAX; end assign q = cnt; endmodule
module accum (clk, clr, d, q); input clk, clr; input [3:0] d; output [3:0] q; reg [3:0] tmp; always @(posedge clk or posedge clr) begin if (clr) tmp <= 4’b0000; else tmp <= tmp + d; end assign q = tmp; endmodule
module shift (clk, si, so); input clk,si; output so; reg [7:0] tmp; always @(posedge clk) begin tmp <= tmp << 1; tmp[0] <= si; end assign so = tmp[7]; endmodule
module shift (clk, ce, si, so); input clk, si, ce; output so; reg [7:0] tmp; always @(negedge clk) begin if (ce) begin tmp <= tmp << 1; tmp[0] <= si; end end assign so = tmp[7]; endmodule
module shift (clk, clr, si, so); input clk, si, clr; output so; reg [7:0] tmp; always @(posedge clk or posedge clr) begin if (clr) tmp <= 8’b00000000; else tmp <= {tmp[6:0], si}; end assign so = tmp[7]; endmodule
module shift (clk, s, si, so); input clk, si, s; output so; reg [7:0] tmp; always @(posedge clk) begin if (s) tmp <= 8’b11111111; else tmp <= {tmp[6:0], si}; end assign so = tmp[7]; endmodule
module shift (clk, si, po); input clk, si; output [7:0] po; reg [7:0] tmp; always @(posedge clk) begin tmp <= {tmp[6:0], si}; end assign po = tmp; endmodule
module shift (clk, load, si, d, so); input clk, si, load; input [7:0] d; output so; reg [7:0] tmp; always @(posedge clk or posedge load) begin if (load) tmp <= d; else tmp <= {tmp[6:0], si}; end assign so = tmp[7]; endmodule
module shift (clk, sload, si, d, so); input clk, si, sload; input [7:0] d; output so; reg [7:0] tmp; always @(posedge clk) begin if (sload) tmp <= d; else tmp <= {tmp[6:0], si}; end assign so = tmp[7]; endmodule
module shift (clk, si, left_right, po); input clk, si, left_right; output po; reg [7:0] tmp; always @(posedge clk) begin if (left_right == 1’b0) tmp <= {tmp[6:0], si}; else tmp <= {si, tmp[7:1]}; end assign po = tmp; endmodule
module mux (a, b, c, d, s, o); input a,b,c,d; input [1:0] s; output o; reg o; always @(a or b or c or d or s) begin if (s == 2’b00) o = a; else if (s == 2’b01) o = b; else if (s == 2’b10) o = c; else o = d; end endmodule
module mux (a, b, c, d, s, o); input a, b, c, d; input [1:0] s; output o; reg o; always @(a or b or c or d or s) begin case (s) 2’b00 : o = a; 2’b01 : o = b; 2’b10 : o = c; default : o = d; endcase end endmodule
module mux (a, b, c, d, s, o); input a, b, c, d; input [1:0] s; output o; reg o; always @(a or b or c or d or s) begin if (s == 2’b00) o = a; else if (s == 2’b01) o = b; else if (s == 2’b10) o = c; end endmodule
module mux (sel, res); input [2:0] sel; output [7:0] res; reg [7:0] res; always @(sel or res) begin case (sel) 3’b000 : res = 8’b00000001; 3’b001 : res = 8’b00000010; 3’b010 : res = 8’b00000100; 3’b011 : res = 8’b00001000; 3’b100 : res = 8’b00010000; 3’b101 : res = 8’b00100000; 3’b110 : res = 8’b01000000; default : res = 8’b10000000; endcase end endmodule
module mux (sel, res); input [2:0] sel; output [7:0] res; reg [7:0] res; always @(sel or res) begin case (sel) 3’b000 : res = 8’b00000001; 3’b001 : res = 8’b00000010; 3’b010 : res = 8’b00000100; 3’b011 : res = 8’b00001000; 3’b100 : res = 8’b00010000; 3’b101 : res = 8’b00100000; // 110 and 111 selector values are unused default : res = 8’bxxxxxxxx; endcase end endmodule
module priority (sel, code); input [7:0] sel; output [2:0] code; reg [2:0] code; always @(sel) begin if (sel[0]) code = 3’b000; else if (sel[1]) code = 3’b001; else if (sel[2]) code = 3’b010; else if (sel[3]) code = 3’b011; else if (sel[4]) code = 3’b100; else if (sel[5]) code = 3’b101; else if (sel[6]) code = 3’b110; else if (sel[7]) code = 3’b111; else code = 3’bxxx; end endmodule
module lshift (di, sel, so); input [7:0] di; input [1:0] sel; output [7:0] so; reg [7:0] so; always @(di or sel) begin case (sel) 2’b00 : so = di; 2’b01 : so = di << 1; 2’b10 : so = di << 2; default : so = di << 3; endcase end endmodule
module adder(a, b, ci, sum); input [7:0] a; input [7:0] b; input ci; output [7:0] sum; assign sum = a + b + ci; endmoduleFollowing is the Verilog code for an unsigned 8-bit adder with carry out.
module adder(a, b, sum, co); input [7:0] a; input [7:0] b; output [7:0] sum; output co; wire [8:0] tmp; assign tmp = a + b; assign sum = tmp [7:0]; assign co = tmp [8]; endmodule
module adder(a, b, ci, sum, co); input ci; input [7:0] a; input [7:0] b; output [7:0] sum; output co; wire [8:0] tmp; assign tmp = a + b + ci; assign sum = tmp [7:0]; assign co = tmp [8]; endmodule
module addsub(a, b, oper, res); input oper; input [7:0] a; input [7:0] b; output [7:0] res; reg [7:0] res; always @(a or b or oper) begin if (oper == 1’b0) res = a + b; else res = a - b; end endmodule
module compar(a, b, cmp); input [7:0] a; input [7:0] b; output cmp; assign cmp = (a >= b) ? 1’b1 : 1’b0; endmodule
module compar(a, b, res); input [7:0] a; input [3:0] b; output [11:0] res; assign res = a * b; endmodule
module mult(clk, a, b, mult); input clk; input [17:0] a; input [17:0] b; output [35:0] mult; reg [35:0] mult; reg [17:0] a_in, b_in; wire [35:0] mult_res; reg [35:0] pipe_1, pipe_2, pipe_3; assign mult_res = a_in * b_in; always @(posedge clk) begin a_in <= a; b_in <= b; pipe_1 <= mult_res; pipe_2 <= pipe_1; pipe_3 <= pipe_2; mult <= pipe_3; end endmodule
module mult(clk, a, b, mult); input clk; input [17:0] a; input [17:0] b; output [35:0] mult; reg [35:0] mult; reg [17:0] a_in, b_in; reg [35:0] mult_res; reg [35:0] pipe_2, pipe_3; always @(posedge clk) begin a_in <= a; b_in <= b; mult_res <= a_in * b_in; pipe_2 <= mult_res; pipe_3 <= pipe_2; mult <= pipe_3; end endmodule
module mult(clk, a, b, mult); input clk; input [17:0] a; input [17:0] b; output [35:0] mult; reg [35:0] mult; reg [17:0] a_in, b_in; wire [35:0] mult_res; reg [35:0] pipe_1, pipe_2, pipe_3; assign mult_res = a_in * b_in; always @(posedge clk) begin a_in <= a; b_in <= b; pipe_1 <= mult_res; pipe_2 <= pipe_1; pipe_3 <= pipe_2; mult <= pipe_3; end endmodule
module mult(clk, a, b, mult); input clk; input [17:0] a; input [17:0] b; output [35:0] mult; reg [35:0] mult; reg [17:0] a_in, b_in; reg [35:0] mult_res; reg [35:0] pipe_2, pipe_3; always @(posedge clk) begin a_in <= a; b_in <= b; mult_res <= a_in * b_in; pipe_2 <= mult_res; pipe_3 <= pipe_2; mult <= pipe_3; end endmodule
module mult3(clk, a, b, mult); input clk; input [17:0] a; input [17:0] b; output [35:0] mult; reg [35:0] mult; reg [17:0] a_in, b_in; wire [35:0] mult_res; reg [35:0] pipe_regs [3:0]; assign mult_res = a_in * b_in; always @(posedge clk) begin a_in <= a; b_in <= b; {pipe_regs[3],pipe_regs[2],pipe_regs[1],pipe_regs[0]} <= {mult, pipe_regs[3],pipe_regs[2],pipe_regs[1]}; end endmodule
module mvl_multaddsub1(clk, a, b, c, res); input clk; input [07:0] a; input [07:0] b; input [07:0] c; output [15:0] res; reg [07:0] a_reg1, a_reg2, b_reg1, b_reg2; wire [15:0] multaddsub; always @(posedge clk) begin a_reg1 <= a; a_reg2 <= a_reg1; b_reg1 <= b; b_reg2 <= b_reg1; end assign multaddsub = a_reg2 * b_reg2 + c; assign res = multaddsub; endmodule
module addsub(a, b, c, oper, res); input oper; input [7:0] a; input [7:0] b; input [7:0] c; output [7:0] res; reg [7:0] res; always @(a or b or c or oper) begin if (oper == 1’b0) res = a + b; else res = a - c; end endmodule
module raminfr (clk, en, we, addr, di, do); input clk; input we; input en; input [4:0] addr; input [3:0] di; output [3:0] do; reg [3:0] RAM [31:0]; reg [3:0] do; always @(posedge clk) begin if (en) begin if (we) RAM[addr] <= di; do <= RAM[addr]; end end endmodule
module raminfr (clk, we, en, addr, di, do); input clk; input we; input en; input [4:0] addr; input [3:0] di; output [3:0] do; reg [3:0] RAM [31:0]; reg [4:0] read_addr; always @(posedge clk) begin if (en) begin if (we) RAM[addr] <= di; read_addr <= addr; end end assign do = RAM[read_addr]; endmodule
module raminfr (clk, we, en, addr, di, do); input clk; input we; input en; input [4:0] addr; input [3:0] di; output [3:0] do; reg [3:0] RAM [31:0]; reg [3:0] do; always @(posedge clk) begin if (en) begin if (we) RAM[addr] <= di; else do <= RAM[addr]; end end endmodule
module raminfr (clk, we, a, di, do); input clk; input we; input [4:0] a; input [3:0] di; output [3:0] do; reg [3:0] ram [31:0]; always @(posedge clk) begin if (we) ram[a] <= di; end assign do = ram[a]; endmodule
module raminfr (clk, we, a, di, do); input clk; input we; input [4:0] a; input [3:0] di; output [3:0] do; reg [3:0] ram [31:0]; reg [3:0] do; always @(posedge clk) begin if (we) ram[a] <= di; do <= ram[a]; end endmodule
module raminfr (clk, we, a, di, do); input clk; input we; input [4:0] a; input [3:0] di; output [3:0] do; reg [3:0] ram [31:0]; reg [4:0] read_a; always @(posedge clk) begin if (we) ram[a] <= di; read_a <= a; end assign do = ram[read_a]; endmodule
module raminfr (clk, en, we, a, di, do); input clk; input en; input we; input [4:0] a; input [3:0] di; output [3:0] do; reg [3:0] ram [31:0]; reg [4:0] read_a; always @(posedge clk) begin if (en) begin if (we) ram[a] <= di; read_a <= a; end end assign do = ram[read_a]; endmodule
module raminfr (clk, we, a, dpra, di, spo, dpo); input clk; input we; input [4:0] a; input [4:0] dpra; input [3:0] di; output [3:0] spo; output [3:0] dpo; reg [3:0] ram [31:0]; always @(posedge clk) begin if (we) ram[a] <= di; end assign spo = ram[a]; assign dpo = ram[dpra]; endmodule
module raminfr (clk, we, a, dpra, di, spo, dpo); input clk; input we; input [4:0] a; input [4:0] dpra; input [3:0] di; output [3:0] spo; output [3:0] dpo; reg [3:0] ram [31:0]; reg [3:0] spo; reg [3:0] dpo; always @(posedge clk) begin if (we) ram[a] <= di; spo = ram[a]; dpo = ram[dpra]; end endmodule
module raminfr (clk, we, a, dpra, di, spo, dpo); input clk; input we; input [4:0] a; input [4:0] dpra; input [3:0] di; output [3:0] spo; output [3:0] dpo; reg [3:0] ram [31:0]; reg [4:0] read_a; reg [4:0] read_dpra; always @(posedge clk) begin if (we) ram[a] <= di; read_a <= a; read_dpra <= dpra; end assign spo = ram[read_a]; assign dpo = ram[read_dpra]; endmodule
module raminfr (clk, ena, enb, wea, addra, addrb, dia, doa, dob); input clk, ena, enb, wea; input [4:0] addra, addrb; input [3:0] dia; output [3:0] doa, dob; reg [3:0] ram [31:0]; reg [4:0] read_addra, read_addrb; always @(posedge clk) begin if (ena) begin if (wea) begin ram[addra] <= dia; end end end always @(posedge clk) begin if (enb) begin read_addrb <= addrb; end end assign doa = ram[read_addra]; assign dob = ram[read_addrb]; endmodule
module rominfr (clk, en, addr, data); input clk; input en; input [4:0] addr; output reg [3:0] data; always @(posedge clk) begin if (en) case(addr) 4’b0000: data <= 4’b0010; 4’b0001: data <= 4’b0010; 4’b0010: data <= 4’b1110; 4’b0011: data <= 4’b0010; 4’b0100: data <= 4’b0100; 4’b0101: data <= 4’b1010; 4’b0110: data <= 4’b1100; 4’b0111: data <= 4’b0000; 4’b1000: data <= 4’b1010; 4’b1001: data <= 4’b0010; 4’b1010: data <= 4’b1110; 4’b1011: data <= 4’b0010; 4’b1100: data <= 4’b0100; 4’b1101: data <= 4’b1010; 4’b1110: data <= 4’b1100; 4’b1111: data <= 4’b0000; default: data <= 4’bXXXX; endcase end endmodule
module rominfr (clk, en, addr, data); input clk; input en; input [4:0] addr; output reg [3:0] data; reg [4:0] raddr; always @(posedge clk) begin if (en) raddr <= addr; end always @(raddr) begin if (en) case(raddr) 4’b0000: data = 4’b0010; 4’b0001: data = 4’b0010; 4’b0010: data = 4’b1110; 4’b0011: data = 4’b0010; 4’b0100: data = 4’b0100; 4’b0101: data = 4’b1010; 4’b0110: data = 4’b1100; 4’b0111: data = 4’b0000; 4’b1000: data = 4’b1010; 4’b1001: data = 4’b0010; 4’b1010: data = 4’b1110; 4’b1011: data = 4’b0010; 4’b1100: data = 4’b0100; 4’b1101: data = 4’b1010; 4’b1110: data = 4’b1100; 4’b1111: data = 4’b0000; default: data = 4’bXXXX; endcase end endmodule
module fsm (clk, reset, x1, outp); input clk, reset, x1; output outp; reg outp; reg [1:0] state; parameter s1 = 2’b00; parameter s2 = 2’b01; parameter s3 = 2’b10; parameter s4 = 2’b11; always @(posedge clk or posedge reset) begin if (reset) begin state <= s1; outp <= 1’b1; end else begin case (state) s1: begin if (x1 == 1’b1) begin state <= s2; outp <= 1’b1; end else begin state <= s3; outp <= 1’b1; end end s2: begin state <= s4; outp <= 1’b0; end s3: begin state <= s4; outp <= 1’b0; end s4: begin state <= s1; outp <= 1’b1; end endcase end end endmodule
module fsm (clk, reset, x1, outp); input clk, reset, x1; output outp; reg outp; reg [1:0] state; parameter s1 = 2’b00; parameter s2 = 2’b01; parameter s3 = 2’b10; parameter s4 = 2’b11; always @(posedge clk or posedge reset) begin if (reset) state <= s1; else begin case (state) s1: if (x1 == 1’b1) state <= s2; else state <= s3; s2: state <= s4; s3: state <= s4; s4: state <= s1; endcase end end always @(state) begin case (state) s1: outp = 1’b1; s2: outp = 1’b1; s3: outp = 1’b0; s4: outp = 1’b0; endcase end endmodule
module fsm (clk, reset, x1, outp); input clk, reset, x1; output outp; reg outp; reg [1:0] state; reg [1:0] next_state; parameter s1 = 2’b00; parameter s2 = 2’b01; parameter s3 = 2’b10; parameter s4 = 2’b11; always @(posedge clk or posedge reset) begin if (reset) state <= s1; else state <= next_state; end always @(state or x1) begin case (state) s1: if (x1 == 1’b1) next_state = s2; else next_state = s3; s2: next_state = s4; s3: next_state = s4; s4: next_state = s1; endcase end
Home Back