# [2021/05/20] 數位邏輯設計實習
## 上課小考

- testbench.cv
```
// Code your testbench here
// or browse Examples
`timescale 1ns/1ns
module testbanch();
reg [3:0] D;
wire [6:0] Q1, Q2;
dec7_seg uut(.D(D), .Q1(Q1), .Q2(Q2));
initial
begin
D = 0;
#100
D = 1;
#100
D = 2;
#100
D = 3;
#100
D = 4;
#100
D = 5;
#100
D = 6;
#100
D = 7;
#100
D = 8;
#100
D = 9;
#100
D = 10;
#100
D = 11;
#100
D = 12;
#100
D = 13;
#100
D = 14;
#100
D = 15;
end
initial
begin
$display("testBanch");
#1600;
$finish();
end
initial
begin
$dumpfile("dump.vcd");
$dumpvars(0);
end
endmodule
```
- design.cv
```
// Code your design here
module dec7_seg(D, Q1, Q2);
input [3:0] D;
output [6:0] Q1, Q2;
reg [6:0] Q1, Q2;
always@(D)
if(D == 0) Q1 = ~7'b1111110;
else if(D == 1) Q1 = ~7'b0110000;
else if(D == 2) Q1 = ~7'b1101101;
else if(D == 3) Q1 = ~7'b1111001;
else if(D == 4) Q1 = ~7'b0110011;
else if(D == 5) Q1 = ~7'b1011011;
else if(D == 6) Q1 = ~7'b1011111;
else if(D == 7) Q1 = ~7'b1110010;
else if(D == 8) Q1 = ~7'b1111111;
else if(D == 9) Q1 = ~7'b1111011;
else if(D == 10) Q1 = ~7'b1110111;
else if(D == 11) Q1 = ~7'b0011111;
else if(D == 12) Q1 = ~7'b1001110;
else if(D == 13) Q1 = ~7'b0111101;
else if(D == 14) Q1 = ~7'b1001111;
else Q1 = ~7'b1000111;
always@(D)
case(D)
0: Q2 = ~7'b1111110;
1: Q2 = ~7'b0110000;
2: Q2 = ~7'b1101101;
3: Q2 = ~7'b1111001;
4: Q2 = ~7'b0110011;
5: Q2 = ~7'b1011011;
6: Q2 = ~7'b1011111;
7: Q2 = ~7'b1110010;
8: Q2 = ~7'b1111111;
9: Q2 = ~7'b1111011;
10: Q2 = ~7'b1110111;
11: Q2 = ~7'b0011111;
12: Q2 = ~7'b1001110;
13: Q2 = ~7'b0111101;
14: Q2 = ~7'b1001111;
default: Q2 = ~7'b1000111;
endcase
endmodule
```
## 上課練習
### [ent0] 課本
- testbench.cv
```
// Code your testbench here
// or browse Examples
`timescale 1ns/1ns
module testbanch();
reg Clk = 1'b0;
reg Pre = 1'b0;
wire [2:0] D;
parameter PERIOD = 200;
parameter real DUTY_CYCLE = 0.5;
parameter OFFSET = 0;
initial
begin
#OFFSET
forever
begin
Clk = 1'b0;
#(PERIOD-(PERIOD*DUTY_CYCLE))Clk = 1'b1;
#(PERIOD*DUTY_CYCLE);
end
end
ent0 uut(.Clk(Clk), .Pre(Pre), .D(D));
initial
begin
#2200
$stop;
end
initial
begin
#85;
Pre = 1'b1;
end
initial
begin
$dumpfile("dump.vcd");
$dumpvars(0);
end
endmodule
```
- design.cv
```
// Code your design here
module ent0(Clk, Pre, D);
input Clk, Pre;
output [2:0] D;
reg [2:0] D;
always@(posedge Clk or negedge Pre)
D = (!Pre ? ~Pre : D+1);
endmodule
```
### [ent0] BREND
```