---
title: VLSI verilogHW
tags: 111-1, VLSI
---
[TOC]
# VLSI verilogHW
## HW1-1
### Q1.

- Design an 4-bit adder with Verilog in structural model. The adder is composed by four one-bit carry-ripple adder. Your design module should be verified by the test module. Submit your file (combining the design module and the test module) to the e-learning by the deadline.

```verilog!
//flad.v
module flad(a, b, cin, s, cout);
input a, b, cin;
output s, cout;
assign s = (a^b) ^cin;
assign cout = (a&cin) | (b&cin) | (a&b);
endmodule
```
```verilog!
//crad.v
module crad( A0, A1, A2, A3, B0, B1, B2, B3, S0, S1, S2, S3, C3);
input A0, A1, A2, A3;
input B0, B1, B2, B3;
output S0, S1, S2, S3, C3;
wire C0, C1, C2;
flad FA_A(.a(A0), .b(B0), .cin(0), .s(S0), .cout(C0) );
flad FA_B(.a(A1), .b(B1), .cin(C0), .s(S1), .cout(C1) );
flad FA_C(.a(A2), .b(B2), .cin(C1), .s(S2), .cout(C2) );
flad FA_D(.a(A3), .b(B3), .cin(C2), .s(S3), .cout(C3) );
endmodule
```
```verilog!
// crad.vt
`timescale 1ns/1ns
module test;
reg a0, a1, a2, a3, b0, b1, b2, b3;
wire c, s0, s1, s2, s3;
crad U0 ( .A0(a0), .A1(a1), .A2(a2), .A3(a3), .B0(b0), .B1(b1), .B2(b2), .B3(b3), .S0(s0), .S1(s1), .S2(s2), .S3(s3), .C3(c) );
initial begin
a0=0;
a1=0;
a2=0;
a3=0;
b0=0;
b1=0;
b2=0;
b3=0;
#5;
a0=1;
a1=0;
a2=1;
a3=0;
b0=0;
b1=1;
b2=0;
b3=1;
#5;
a0=1;
a1=0;
a2=1;
a3=0;
b0=1;
b1=0;
b2=1;
b3=0;
#5;
a0=1;
a1=1;
a2=1;
a3=1;
b0=1;
b1=1;
b2=1;
b3=1;
end
initial begin
$fsdbDumpfile("crad.fsdb");
$fsdbDumpvars(0, test);
end
endmodule
```
6s: (A3A2A1A0=0101) + (B3B2B1B0=1010) =>(CS3S2S1S0=01111)

11s: (A3A2A1A0=0101) + (B3B2B1B0=0101) =>(CS3S2S1S0=01010)

16s: (A3A2A1A0=) + (B3B2B1B0=) =>(CS3S2S1S0=11110)

# HW1-2
## Q2

## Answer
### Code
```verilog=
// flipflop.v
module flipflop(q, clk, rst, d);
input clk, rst, d;
output q;
reg q;
always @(posedge clk or posedge rst)
begin
if (rst)
q <= 1;
else
q <= d;
end
endmodule
```
```verilog=
// prsg.v
module prsg(Q0, Q1, Q2, Clk, Rst);
input Clk, Rst;
output Q0, Q1, Q2;
wire XORq0q2;
wire Q0, Q1, Q2;
xor xor1(XORq0q2, Q0, Q2);
flipflop F0( .q(Q0), .clk(Clk), .rst(Rst), .d(XORq0q2));
flipflop F1( .q(Q1), .clk(Clk), .rst(Rst), .d(Q0));
flipflop F2( .q(Q2), .clk(Clk), .rst(Rst), .d(Q1));
endmodule
```
```verilog=
// prsg.vt
`timescale 1ns/1ns
module test();
reg clk, rst;
wire q0, q1, q2;
prsg prsg0(.Q0(q0),
.Q1(q1),
.Q2(q2),
.Clk(clk),
.Rst(rst)
);
initial begin
clk=0;
rst=1;
#1 rst=0;
#80 $finish;
end
always #5 clk=~clk;
initial begin
$fsdbDumpfile("prsg.fsdb");
$fsdbDumpvars(0, test);
end
endmodule
```
### Wave
- Q0Q1Q2 = 111→011→101→010→001→100→110→111→...
- 