Skip to content

Commit b080f85

Browse files
authored
Upload verilog code files
1 parent 0ffadca commit b080f85

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+2225
-0
lines changed

alu.v

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
module alu(out, a, b, sel);
2+
3+
output reg [3:0] out;
4+
input [3:0] a, b, sel;
5+
6+
always @(a or b or sel) begin
7+
case (sel)
8+
4'b0000: out = a+b;
9+
4'b0001: out = a-b;
10+
4'b0010: out = a*b;
11+
4'b0011: out = a/b;
12+
4'b0100: out = a<<b;
13+
4'b0101: out = a>>b;
14+
4'b0110: out = {a[2:0], a[3]};
15+
4'b0111: out = {a[0], a[3:1]};
16+
4'b1000: out = a&b;
17+
4'b1001: out = a|b;
18+
4'b1010: out = a^b;
19+
4'b1011: out = ~(a|b);
20+
4'b1100: out = ~(a&b);
21+
4'b1101: out = ~(a^b);
22+
4'b1110: out = a>b?1:0;
23+
4'b1111: out = a==b?1:0;
24+
endcase
25+
end
26+
27+
endmodule
28+
29+
30+
/*
31+
module testbench;
32+
33+
wire [3:0] out;
34+
reg [3:0] a, b, sel;
35+
36+
alu chip1(out, a, b, sel);
37+
38+
initial begin a = 4'b1010; b = 4'b0001;
39+
sel = 4'b0000; //out = a+b;
40+
#100 sel = 4'b0001; //out = a-b;
41+
#100 sel = 4'b0010; //out = a*b;
42+
#100 sel = 4'b0011; //out = a/b;
43+
#100 sel = 4'b0100; //out = a<<b;
44+
#100 sel = 4'b0101; //out = a>>b;
45+
#100 sel = 4'b0110; //rotated left
46+
#100 sel = 4'b0111; //rotated right
47+
#100 sel = 4'b1000; //out = a&b;
48+
#100 sel = 4'b1001; //out = a|b;
49+
#100 sel = 4'b1010; //out = a^b;
50+
#100 sel = 4'b1011; //out = ~(a|b);
51+
#100 sel = 4'b1100; //out = ~(a&b);
52+
#100 sel = 4'b1101; //out = ~(a^b);
53+
#100 sel = 4'b1110; //out = a>b?1:0;
54+
#100 sel = 4'b1111; //out = a==b?1:0;
55+
end
56+
endmodule
57+
*/

aoi.v

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
module Aoi(a1,a2,b1,b2,o);
2+
input a1,a2,b1,b2;
3+
output reg o;
4+
always@(a1 or a2 or b1 or b2) begin
5+
case({a1,a2,b1,b2})
6+
4'b0000: o=1;
7+
4'b0001: o=1;
8+
4'b0010: o=1;
9+
4'b0011: o=0;
10+
4'b0100: o=1;
11+
4'b0101: o=1;
12+
4'b0110: o=1;
13+
4'b0111: o=0;
14+
4'b1000: o=1;
15+
4'b1001: o=1;
16+
4'b1010: o=1;
17+
4'b1011: o=0;
18+
4'b1100: o=0;
19+
4'b1101: o=0;
20+
4'b1110: o=0;
21+
4'b1111: o=0;
22+
endcase
23+
end
24+
endmodule
25+

aoi_4.v

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
module aoi_4(a,b,c,d,Y);
2+
input a,b,c,d;
3+
output Y;
4+
5+
assign Y=~c&~d&(a~^b)+~c&d&(a^b)+c&~d&(a&b)+c&d&~(a&b);
6+
7+
endmodule
8+

aoi_4tb.v

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
module test4;
2+
reg a,b,c,d;
3+
wire Y;
4+
aoi_4 tb(a,b,c,d,Y);
5+
initial begin
6+
{a,b,c,d}=4'b0001;
7+
#100 {a,b,c,d}=4'b0010;
8+
#100{a,b,c,d}=4'b0100;
9+
#100 {a,b,c,d}=4'b1000;
10+
#100{a,b,c,d}=4'b0011;
11+
#100{a,b,c,d}=4'b0101;
12+
#100{a,b,c,d}=4'b1001;
13+
#100{a,b,c,d}=4'b0110;
14+
#100{a,b,c,d}=4'b0111;
15+
#100{a,b,c,d}=4'b1011;
16+
#100{a,b,c,d}=4'b1100;
17+
#100{a,b,c,d}=4'b1001;
18+
#100{a,b,c,d}=4'b1010;
19+
#100{a,b,c,d}=4'b1110;
20+
#100{a,b,c,d}=4'b1111;
21+
end
22+
endmodule

aoitb.v

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
module aoitb;
2+
reg a1,a2,b1,b2;
3+
wire o;
4+
Aoi go(a1,a2,b1,b2,o);
5+
initial begin
6+
{a1,a2,b1,b2} =4'b0000;
7+
#100 {a1,a2,b1,b2} =4'b0001;
8+
#100 {a1,a2,b1,b2} =4'b0010;
9+
#100 {a1,a2,b1,b2} =4'b0011;
10+
#100 {a1,a2,b1,b2} =4'b0100;
11+
#100 {a1,a2,b1,b2} =4'b0101;
12+
#100 {a1,a2,b1,b2} =4'b0110;
13+
#100 {a1,a2,b1,b2} =4'b0111;
14+
#100 {a1,a2,b1,b2} =4'b1000;
15+
#100 {a1,a2,b1,b2} =4'b1001;
16+
#100 {a1,a2,b1,b2} =4'b1010;
17+
#100 {a1,a2,b1,b2} =4'b1011;
18+
#100 {a1,a2,b1,b2} =4'b1100;
19+
#100 {a1,a2,b1,b2} =4'b1101;
20+
#100 {a1,a2,b1,b2} =4'b1110;
21+
#100 {a1,a2,b1,b2} =4'b1111;
22+
end
23+
endmodule
24+

asynchronous_counter_4bit.v

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
module asynchronous_counter_4bit(out, clk, reset, sel);
2+
3+
input clk, reset, sel;
4+
output reg [3:0] out;
5+
6+
initial out = 4'b0000;
7+
8+
always @(posedge clk) begin
9+
10+
if (sel == 0) begin
11+
if (out <= 15) begin
12+
out = out + 1;
13+
end
14+
end
15+
16+
if(sel == 1) begin
17+
if (out >= 0) begin
18+
out = out - 1;
19+
end
20+
end
21+
22+
if (reset == 1) out = 4'b0000;
23+
24+
end
25+
26+
endmodule
27+
28+
29+
/* Testbench
30+
module testbench;
31+
32+
reg clk, reset, sel;
33+
wire [3:0]out;
34+
35+
asynchronous_counter_4bit counter1(out, clk, reset, sel);
36+
37+
initial begin
38+
clk = 0;
39+
forever #10 clk = ~clk;
40+
end
41+
42+
initial begin
43+
reset = 0; sel = 0;
44+
#320
45+
reset = 0; sel = 1;
46+
#320
47+
reset = 1;
48+
end
49+
50+
endmodule
51+
*/

asynchronous_dualport_RAM.v

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
module async_dual_port_ram(
2+
input [7:0] data_a,data_b,
3+
input [5:0] addr_a,addr_b,
4+
input we_a, we_b,
5+
output reg [7:0] q_a,q_b
6+
);
7+
reg [7:0] ram[63:0]; //64 * 8 bit
8+
9+
always @ (data_a or addr_a or we_a)
10+
begin
11+
if(we_a)
12+
begin
13+
ram[addr_a]<=data_a; //write
14+
end
15+
else
16+
begin
17+
q_a<=ram[addr_a]; //read
18+
end
19+
end
20+
21+
always @ (data_b or addr_b or we_b)
22+
begin
23+
if(we_b)
24+
begin
25+
ram[addr_b]<=data_b; //write
26+
end
27+
else
28+
begin
29+
q_b<=ram[addr_b]; //read
30+
end
31+
end
32+
endmodule
33+
34+
35+
/*
36+
module testbench;
37+
38+
reg [7:0] data_a,data_b;
39+
reg [5:0] addr_a,addr_b;
40+
reg we_a, we_b;
41+
wire [7:0] q_a,q_b;
42+
43+
async_dual_port_ram ram(data_a, data_b, addr_a, addr_b, we_a, we_b, q_a, q_b);
44+
45+
initial begin
46+
we_a = 1; addr_a = 6'b00000; data_a = 8'b10101010;
47+
#100 we_a = 0; addr_a = 6'b00000; data_a = 7'd0;
48+
49+
#100 we_b = 1; addr_b = 6'b00000; data_b = 8'b01010101; we_a = 1'bx; data_a = 8'bx; addr_a = 6'bx;
50+
#100 we_b = 0; addr_b = 6'b00000; data_b = 7'd0;
51+
52+
#100 $finish;
53+
end
54+
55+
endmodule
56+
*/

asynchronous_singleport_RAM.v

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
module async_single_port_RAM (
2+
input [7:0] data,
3+
input [5:0] addr,
4+
input we,
5+
output [7:0] q
6+
);
7+
8+
reg [7:0] ram [63:0];
9+
reg [5:0] addr_reg;
10+
11+
always@(data or addr or we)
12+
begin
13+
if(we)
14+
ram[addr]<=data;
15+
else
16+
addr_reg <=addr;
17+
end
18+
19+
assign q=ram[addr_reg];
20+
21+
endmodule
22+
23+
/*
24+
module testbench;
25+
26+
reg [7:0] data;
27+
reg [5:0] addr;
28+
reg we;
29+
wire [7:0] q;
30+
31+
async_single_port_RAM ram(data, addr, we, q);
32+
33+
initial begin
34+
we = 1; addr = 6'b00000; data = 8'b10101010;
35+
#100 we = 0; addr = 6'b00000; data = 7'd0;
36+
end
37+
endmodule
38+
*/
39+

carry_lookahead_adder_4bit.v

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
module carry_lookahead_adder_4bit(s, cout, x, y);
2+
3+
input [3:0] x, y;
4+
output [3:0]s;
5+
output cout;
6+
7+
wire [3:0] p, g, c;
8+
9+
assign p[0] = x[0]^y[0];
10+
assign g[0] = x[0]&y[0];
11+
assign c[0] = 0;
12+
13+
assign p[1] = x[1]^y[1];
14+
assign g[1] = x[1]&y[1];
15+
assign c[1] = g[0] | p[0]&c[0];
16+
17+
assign p[2] = x[2]^y[2];
18+
assign g[2] = x[2]&y[2];
19+
assign c[2] = g[1] | p[1]&c[1];
20+
21+
assign p[3] = x[3]^y[3];
22+
assign g[3] = x[3]&y[3];
23+
assign c[3] = g[2] | p[2]&c[2];
24+
25+
assign s[0] = p[0]^c[0];
26+
assign s[1] = p[1]^c[1];
27+
assign s[2] = p[2]^c[2];
28+
assign s[3] = p[3]^c[3];
29+
30+
assign cout = g[3] | p[3]&c[3];
31+
32+
endmodule
33+
34+
/*
35+
36+
module testbench;
37+
38+
reg [3:0] x, y;
39+
wire [3:0]s;
40+
wire cout;
41+
42+
carry_lookahead_adder_4bit cla1(s, cout, x, y);
43+
44+
initial begin
45+
46+
x = 4'b1010;
47+
y = 4'b1101;
48+
49+
end
50+
endmodule
51+
*/
52+

clock_divider.v

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
module clock_divider(clkout, clkin);
2+
3+
output reg clkout;
4+
input clkin;
5+
6+
initial clkout = 0;
7+
integer n; initial n = 100000000; // n * 10nano = time in seconds in FPGA for 100MHz clk.
8+
integer counter; initial counter = 0;
9+
10+
always @(posedge clkin) begin
11+
12+
if (counter == n) begin
13+
clkout = ~clkout;
14+
counter = 1'b0;
15+
end
16+
17+
else if (counter <= n) begin
18+
counter = counter + 1;
19+
end
20+
21+
end
22+
23+
endmodule
24+
25+
/*
26+
module testbench;
27+
reg clk, n;
28+
wire out;
29+
30+
clock_divider clkdvd(out, clk, 100);
31+
32+
initial begin
33+
clk = 1'b0;
34+
forever #100 clk = ~clk;
35+
end
36+
37+
initial begin
38+
n = 2;
39+
end
40+
41+
endmodule
42+
43+
*/

0 commit comments

Comments
 (0)