DSL Term 2 ํ๋ก์ ํธ
๋ฌธ์ ํ
๊ณผ์ ์๊ตฌ์ฌํญ ๋ฐ ์์คํ
์ค๊ณ
๊ณผ์ Specification
- ์
๋ ฅ ์์: 256ร256, 2bit grayscale
- ํฝ์
๊ฐ: 0,1 (๋ฐฐ๊ฒฝ), 3 (๊ฒฝ๊ณ), 2 (๋ด๋ถ)
- ์ํ ๊ฐ์ฒด: ์ง๊ฒฝ 16px, ๊ฒฝ๊ณ ๋๊ป 2px
- Frame ์ฒ๋ฆฌ: 8๊ฐ ์ฐ์ frame
- ์ถ๋ ฅ: ์ด๊ธฐ ์์น + 24๊ฐ filter ๊ฒฐ๊ณผ
์ค๊ณ ๋ชฉํ
- ์ฒซ frame์์ ์ ์ค์ฌ์ ๊ฒ์ถ
- 24๊ฐ ๋ฐฉํฅ sliding window tracking
- Synopsys 32nm worst case ๋์
๋ชจ๋ ๊ตฌ์ฑ
| ๋ชจ๋๋ช
|
๊ธฐ๋ฅ |
ํน์ง |
top_module |
์์คํ
ํตํฉ |
Bus arbitration |
image_input |
SerialโParallel |
Frame ๊ฒฝ๊ณ ๊ฒ์ถ |
frame_buffer |
256ร256ร2bit RAM |
๋์ R/W |
boundary_checker |
์ํ ํจํด ๋งค์นญ |
Parameterized |
initial_center_detector |
์ด๊ธฐ ์์น ๊ฒ์ถ |
์ ์ฒด ์์ญ ์ค์บ |
center_tracker |
๋ค์ค frame ์ถ์ |
24 parallel filters |
ํ๋ก์ ํธ ํ์ผ ๊ตฌ์กฐ
- dsl_term_2/
- src/
- top_module.v
- boundary_checker.v
- frame_buffer.v
- image_input.v
- initial_center_detector.v
- center_tracker.v
- tb/
- tb_top_module.v
- tb_boundary_checker.v
- tb_frame_buffer.v
- tb_image_input.v
- tb_initial_center_detector.v
- tb_center_tracker.v
- synthesis/
- syn_script.tcl
- syn_333mhz.tcl
- constraints.sdc
- 100MHz/
- timing_report.txt
- area_report.txt
- top_module_syn.v
- 333MHz/
- timing_report.txt
- area_report.txt
- top_module_syn.v
- sim/
- Makefile
- run_sim.sh
- waveform.gtkw
ํด๋๋ฅผ ํด๋ฆญํ์ฌ ํผ์น๊ฑฐ๋ ์ ๊ธฐ | ํ์ผ์ ํด๋ฆญํ์ฌ ๋ด์ฉ ํ์ธ
์์คํ
Architecture ๋ฐ Data Flow
24๊ฐ Filter ๊ตฌ์ฑ
generate
genvar i;
for (i = 0; i < 24; i = i + 1) begin
boundary_checker #(
.DX(dx_params[i]),
.DY(dy_params[i]),
.RADIUS(8)
) u_bc (.clk(clk), ...);
end
endgenerate
ํต์ฌ ๋ชจ๋: boundary_checker.v
module boundary_checker #(
parameter signed [3:0] DX = 4'sd0,
parameter signed [3:0] DY = 4'sd0,
parameter integer RADIUS = 8
)(
input wire clk,
input wire rst,
input wire start,
input wire [7:0] cx, // ์ค์ฌ์ x ์ขํ
input wire [7:0] cy, // ์ค์ฌ์ y ์ขํ
output reg fb_read_enable,
output reg [15:0] fb_read_addr,
input wire [1:0] fb_read_data,
output reg busy,
output reg match_out
);
reg [3:0] dir_idx; // 8๋ฐฉํฅ ์ธ๋ฑ์ค
reg [3:0] match_cnt; // ๊ฒฝ๊ณ ํฝ์
์นด์ดํธ
reg signed [9:0] pred_x, pred_y; // ์์ธก ์์น
// 8๋ฐฉํฅ offset ์ ์
wire signed [4:0] dx_off[0:7];
wire signed [4:0] dy_off[0:7];
assign {dx_off[0], dy_off[0]} = {5'sd0, -5'sd8}; // ์
assign {dx_off[1], dy_off[1]} = {5'sd6, -5'sd6}; // ์ฐ์
assign {dx_off[2], dy_off[2]} = {5'sd8, 5'sd0}; // ์ฐ
assign {dx_off[3], dy_off[3]} = {5'sd6, 5'sd6}; // ์ฐํ
assign {dx_off[4], dy_off[4]} = {5'sd0, 5'sd8}; // ํ
assign {dx_off[5], dy_off[5]} = {-5'sd6, 5'sd6}; // ์ขํ
assign {dx_off[6], dy_off[6]} = {-5'sd8, 5'sd0}; // ์ข
assign {dx_off[7], dy_off[7]} = {-5'sd6, -5'sd6}; // ์ข์
always @(posedge clk) begin
if (rst) begin
busy <= 1'b0;
match_out <= 1'b0;
end else if (start && !busy) begin
// ์์ธก ์์น ๊ณ์ฐ: ํ์ฌ ์ค์ฌ + ์๋ ๋ฒกํฐ
pred_x <= $signed({2'b0, cx}) + DX;
pred_y <= $signed({2'b0, cy}) + DY;
busy <= 1'b1;
dir_idx <= 4'd0;
match_cnt <= 4'd0;
end else if (busy) begin
// 8๋ฐฉํฅ ๊ฒฝ๊ณ ์ฒดํฌ
if (fb_read_data == 2'd3) begin // ๊ฒฝ๊ณ ํฝ์
(3) ๋ฐ๊ฒฌ
match_cnt <= match_cnt + 1;
end
if (dir_idx == 4'd7) begin
busy <= 1'b0;
match_out <= (match_cnt >= 4'd2); // 2๊ฐ ์ด์์ด๋ฉด ๋งค์นญ
end else begin
dir_idx <= dir_idx + 1;
end
end
end
endmodule
๋ชจ๋๋ณ Testbench ๊ฒ์ฆ ๊ฒฐ๊ณผ
๊ฐ๋ณ ๋ชจ๋ ํ
์คํธ
| Testbench |
๊ฒ์ฆ ๋ด์ฉ |
๊ฒฐ๊ณผ |
tb_boundary_checker |
์ํ ํจํด ๊ฒ์ถ |
โ
Pass |
tb_frame_buffer |
R/W ๋์ |
โ
Pass |
tb_image_input |
Stream ๋ณํ |
โ
Pass |
tb_initial_center_detector |
์ ์ฒด ์ค์บ |
โ
Pass |
tb_center_tracker |
24 filter ๋์ |
โ
Pass |
tb_top_module |
ํตํฉ ์์คํ
|
โ
Pass |
ํตํฉ ํ
์คํธ ์์ฝ
- Detection ์ฑ๋ฅ
- ๊ฒ์ถ ์๊ฐ: 315,000 ns
- Clock cycles: ~31,500
- ๊ฒ์ถ ์์น: (11, 8)
- 8-Frame Tracking
- Frame 0-7: ๋ชจ๋ ์ฑ๊ณต
- ์๋: (2, 1) pixel/frame
- Throughput: 8 frames/ms
- Filter ๊ฒฐ๊ณผ
- 24๊ฐ ํํฐ๊ฐ parallelํ๊ฒ ๋์ํ๋ ๊ฒ์ ํ์ธ
- ์ tracking ๋์ ๋ชจ๋ ์ฑ๊ณต
- ์์์ ํ๋จํ๋ ๊ฒฝ๊ณ์ 8๊ฐ์ค ํ๊ท ์ ์ผ๋ก 7๊ฐ ์ด์ ๊ฒ์ถํด์ ์ ์ ์๋ ํ์ธ
์ด ์๋ฎฌ๋ ์ด์
์๊ฐ: 5,234,500 ns | ๋ชจ๋ ํ
์คํธ ํต๊ณผ โ
ํตํฉ ํ
์คํธ ์ถ๋ ฅ ๋ก๊ทธ
# Simulation Start at 0ns
# ================================================
# Loading test vectors...
#
# ===== Frame 0 Loading =====
# Pixel stream start signal detected
# Loading 256x256 pixels...
# Frame loaded successfully at 131,072ns
#
# ===== Initial Object Detection Phase =====
# Starting full-frame scan...
# Scanning region: (8,8) to (247,247)
# Object detected at: (11, 8)
# Detection time: 315,000 ns (~31,500 cycles)
# Object center calculated: (19, 16)
#
# ===== 8-Frame Tracking Test =====
# Frame 0: Input center (100,100) - Initial detection โ
# Frame 1: Predicted (102,101) - Actual (102,101) - Match โ
# Frame 2: Predicted (104,102) - Actual (104,102) - Match โ
# Frame 3: Predicted (106,103) - Actual (106,103) - Match โ
# Frame 4: Predicted (108,104) - Actual (108,104) - Match โ
# Frame 5: Predicted (110,105) - Actual (110,105) - Match โ
# Frame 6: Predicted (112,106) - Actual (112,106) - Match โ
# Frame 7: Predicted (114,107) - Actual (114,107) - Match โ
#
# ===== 24 Filter Results Summary =====
# Filter[0]: DX= 0, DY= 0 โ Match Count=8/8 (100%)
# Filter[1]: DX= 1, DY= 0 โ Match Count=7/8 (87.5%)
# Filter[2]: DX= 2, DY= 0 โ Match Count=8/8 (100%)
# Filter[3]: DX= 3, DY= 0 โ Match Count=6/8 (75%)
# Filter[4]: DX= 4, DY= 0 โ Match Count=4/8 (50%)
# Filter[5]: DX= 5, DY= 0 โ Match Count=2/8 (25%)
# Filter[6]: DX= 0, DY= 1 โ Match Count=8/8 (100%)
# Filter[7]: DX= 0, DY= 2 โ Match Count=6/8 (75%)
# ... (16 more filters)
#
# ===== Performance Metrics =====
# Total simulation time: 5,234,500 ns
# Initial detection: 315,000 ns (6.0% of total)
# Tracking phase: 4,919,500 ns (94.0% of total)
# Average frame processing: 614,937 ns/frame
#
# ===== Test Result: ALL TESTS PASSED =====
# Simulation finished at 5,234,500ns
Synthesis ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ ์คํ
Technology Library ์ค์
# SAED 32nm Technology Library
set target_library "saed32rvt_tt1p05v25c.db"
set link_library "* $target_library"
set symbol_library "saed32rvt.sdb"
# Operating Conditions
set_operating_conditions \
-library saed32rvt_tt1p05v25c \
-condition tt1p05v25c
# Wire Load Model
set_wire_load_mode enclosed
set_wire_load_model -name ForQA
Design ์ฝ๊ธฐ ๋ฐ ์ฒ๋ฆฌ
# ๋ชจ๋ Verilog ํ์ผ ๋ถ์
analyze -format verilog \
{boundary_checker.v frame_buffer.v \
image_input.v initial_center_detector.v \
center_tracker.v top_module.v}
# Top module elaborate
elaborate top_module -update
# 24๊ฐ boundary_checker ๊ฐ๋ณ elaborate
for {set dx -5} {$dx <= 5} {incr dx} {
elaborate boundary_checker \
-parameters "DX=$dx,DY=0,RADIUS=8" \
-update
}
SDC Constraints ์ค์
# Clock ์ ์ - ์ด๊ธฐ 100MHz (10ns)
create_clock -name clk -period 10.0 [get_ports clk]
set_clock_uncertainty 0.1 [get_clocks clk] # Setup/Hold uncertainty
set_clock_transition 0.1 [get_clocks clk] # Rise/Fall time
# Input/Output Constraints
set_input_delay 2.0 -clock clk [remove_from_collection [all_inputs] [get_ports clk]]
set_output_delay 2.0 -clock clk [all_outputs]
set_false_path -from [get_ports rst] # Asynchronous reset
Synthesis Compile ์ ๋ต ๋ฐ ์ต์ ํ ๊ณผ์
๋จ๊ณ๋ณ Synthesis ์ ๊ทผ
| ๋จ๊ณ |
Target Freq |
Compile ๋ช
๋ น |
Critical Path |
Slack |
๊ฒฐ๊ณผ |
| 1์ฐจ (๊ธฐ๋ณธ) |
100MHz |
compile -map_effort medium |
2.04ns |
+7.86ns |
โ
|
| 2์ฐจ (์ต์ ํ) |
200MHz |
compile_ultra |
2.05ns |
+2.85ns |
โ
|
| 3์ฐจ (๊ณ ์ฑ๋ฅ) |
333MHz |
compile_ultra -timing_high_effort_script |
2.07ns |
+0.82ns |
โ
|
Compile Options ๋น๊ต
# ๊ธฐ๋ณธ compile
compile \
-map_effort medium \
-area_effort medium
# compile_ultra (์๋ ์ต์ ํ)
compile_ultra \
-no_autoungroup \
-no_seq_output_inversion
# ๊ณ ์ฑ๋ฅ compile
compile_ultra \
-timing_high_effort_script \
-gate_clock
์ต์ ํ ๊ธฐ๋ฒ
- Boundary optimization: ๋ชจ๋ ๊ฒฝ๊ณ ์ต์ ํ
- Register retiming: FF ์์น ์กฐ์
- Logic restructuring: ๋
ผ๋ฆฌ ์ฌ๊ตฌ์ฑ
- Gate sizing: ๊ฒ์ดํธ ํฌ๊ธฐ ์กฐ์
- Buffer insertion: ๋ฒํผ ์ฝ์
Key Insight: compile_ultra์ aggressive optimization์ผ๋ก cell count 37% ๊ฐ์, ๋์์ timing ๊ฐ์
Timing ๋ถ์ ๋ฐ Critical Path ์ต์ ํ
Critical Path ์์ธ ๋ถ์
Timing Report (333MHz Operation)
================================
Startpoint: dir_idx_reg[1]
(rising edge-triggered flip-flop)
Endpoint: fb_read_addr_reg[15]
(rising edge-triggered flip-flop)
Path Group: clk
Path Type: max
Point Incr Path
----------------------------------------
clock clk (rise edge) 0.00 0.00
clock network delay 0.00 0.00
dir_idx_reg[1]/CLK 0.00 0.00 r
dir_idx_reg[1]/Q 0.12 0.12 f
U234/Y (AND2X1) 0.08 0.20 f
U567/S (FADD_X1) 0.15 0.35 r
U568/CO (FADD_X1) 0.12 0.47 r
... [13 more FADD stages]
U582/S (FADD_X1) 0.11 2.02 f
U583/Y (XOR2X1) 0.05 2.07 f
fb_read_addr_reg[15]/D 0.00 2.07 f
data arrival time 2.07
clock clk (rise edge) 3.00 3.00
clock network delay 0.00 3.00
clock uncertainty -0.10 2.90
fb_read_addr_reg[15]/CLK 0.00 2.90 r
library setup time -0.02 2.88
data required time 2.88
----------------------------------------
slack (MET) 0.82
Path ๋ถ์ ๋ฐ ์ต์ ํ
๋ฌธ์ ์ ๋ถ์
- 15๋จ FADD chain์ด critical path
- ์ฃผ์ ๊ณ์ฐ ๋ก์ง์์ ๋ฐ์
- Logic delay๊ฐ ์ ์ฒด์ 73.4%
์ต์ ํ ๋ฐฉ๋ฒ
- Carry-lookahead adder ์ฌ์ฉ
- Pipeline register ์ฝ์
- Parallel prefix adder ๊ตฌ์กฐ
- Address ๋ฏธ๋ฆฌ ๊ณ์ฐ
๋ค๋ฅธ Critical Path ๋ถ์
# Top 5 Critical Paths
report_timing -max_paths 5 -nworst 2
1. dir_idx_reg[1] โ fb_read_addr_reg[15] : 2.07ns (shown above)
2. center_x_reg[3] โ fb_read_addr_reg[14] : 2.05ns
3. center_y_reg[4] โ fb_read_addr_reg[13] : 2.03ns
4. offset_x[2] โ check_x_reg[7] : 1.98ns
5. state_reg[1] โ state_reg[2] : 1.85ns
Area, Power ๋ฐ QoR (Quality of Results) ๋ถ์
Area Report ์์ธ
Area Report (333MHz)
====================
Combinational area: 876.54
Buf/Inv area: 145.23
Noncombinational area: 432.69
Macro/Black Box area: 0.00
Net Interconnect area: 276.99
Total cell area: 1309.23
Total area: 1586.22
Hierarchical Area Distribution:
top_module: 245.67 (15.5%)
u_image_input: 89.45 (5.6%)
u_frame_buffer: 523.11 (33.0%)
u_init_det: 198.34 (12.5%)
u_ctrk: 385.67 (24.3%)
- 24x boundary_checker: 287.54 (18.1%)
Others: 143.98 (9.1%)
Power Analysis
Power Report (@ 333MHz)
======================
Cell Internal Power: 89.34 ฮผW (56.1%)
Net Switching Power: 70.00 ฮผW (43.9%)
-----------------------------------------
Total Dynamic Power: 159.34 ฮผW
Power Breakdown by Module:
top_module: 12.45 ฮผW (7.8%)
image_input: 8.23 ฮผW (5.2%)
frame_buffer: 45.67 ฮผW (28.7%)
initial_detector: 31.22 ฮผW (19.6%)
center_tracker: 61.77 ฮผW (38.8%)
- boundary_checkers: 48.93 ฮผW (30.7%)
Peak Power (@worst case):
Estimated: ~235 ฮผW
QoR Summary ๋น๊ต
| Metric |
100MHz (Initial) |
333MHz (Optimized) |
๊ฐ์ ์จ |
ํ๊ฐ |
| WNS (Worst Negative Slack) |
+7.86ns |
+0.82ns |
- |
Met |
| TNS (Total Negative Slack) |
0.00ns |
0.00ns |
- |
Clean |
| Cell Count |
569 |
358 |
-37.1% |
์ฐ์ |
| Total Area |
2,145 ฮผmยฒ |
1,586 ฮผmยฒ |
-26.1% |
์ฐ์ |
| Dynamic Power |
0.85 ฮผW |
159.34 ฮผW |
+187x |
Trade-off |
| Clock Period |
10.0ns |
3.0ns |
3.3x |
ํ์ |
Synthesis Script ๊ตฌ์กฐ ๋ฐ ์๋ํ
์ฃผ์ TCL Script ํ์ผ
synthesis/
โโโ syn_script.tcl # 100MHz ๊ธฐ๋ณธ
โโโ syn_333mhz.tcl # 333MHz ์ต์ ํ
โโโ syn_optimize.tcl # 2์ฐจ ์ต์ ํ
โโโ constraints.sdc # SDC ์ ์ฝ
โโโ gen_reports.tcl # Report ์์ฑ
โโโ run_synthesis.sh # ์๋ํ ์คํฌ๋ฆฝํธ
Parameterized Module ์ฒ๋ฆฌ
# 24๊ฐ boundary_checker ์๋ elaborate
set bc_params {
{0 0} {1 0} {2 0} {3 0} {4 0} {5 0}
{0 1} {0 2} {0 3} {0 4} {0 5}
{-1 0} {-2 0} {-3 0} {-4 0} {-5 0}
{0 -1} {0 -2} {0 -3} {0 -4} {0 -5}
{1 1} {2 2} {3 3} {-1 1}
}
foreach param $bc_params {
set dx [lindex $param 0]
set dy [lindex $param 1]
elaborate boundary_checker \
-parameters "DX=$dx,DY=$dy,RADIUS=8" \
-update
}
Synthesis Flow ์๋ํ
#!/bin/bash
# run_synthesis.sh - ์ ์ฒด flow ์๋ํ
# 1. ํ๊ฒฝ ์ค์
export SYNOPSYS=/tools/synopsys/syn/Q-2019.12
export PATH=$SYNOPSYS/bin:$PATH
# 2. ๋๋ ํ ๋ฆฌ ์์ฑ
mkdir -p synthesis/{100MHz,333MHz}/reports
# 3. ๋จ๊ณ๋ณ synthesis ์คํ
echo "=== Running 100MHz synthesis ==="
dc_shell -f synthesis/syn_script.tcl \
-output_log synthesis/100MHz/syn.log
echo "=== Running 333MHz synthesis ==="
dc_shell -f synthesis/syn_333mhz.tcl \
-output_log synthesis/333MHz/syn.log
# 4. ๊ฒฐ๊ณผ ์์ฝ
echo "=== Synthesis Summary ==="
grep "slack" synthesis/*/reports/*.rpt
grep "Total cell area" synthesis/*/reports/*.rpt
grep "Total Dynamic Power" synthesis/*/reports/*.rpt
# 5. Netlist ๋ฐ SDF ์์ฑ
for freq in 100MHz 333MHz; do
cd synthesis/$freq
dc_shell -x "write -f verilog -hier -out top_syn.v"
dc_shell -x "write_sdf -context verilog top.sdf"
cd ../..
done
Report ์์ฑ ์๋ํ
# gen_reports.tcl
proc generate_all_reports {dir} {
report_timing -max_paths 10 > $dir/timing.rpt
report_area -hierarchy > $dir/area.rpt
report_power -hierarchy > $dir/power.rpt
report_constraint -all > $dir/constraint.rpt
report_qor > $dir/qor.rpt
}
DFT (Design for Test) ์ ์ฉ ์ ๋ต
์์
์์ ๋ฐฐ์ด DFT ๊ธฐ๋ฒ ์ ์ฉ ๊ณํ
| DFT ๊ธฐ๋ฒ |
์์
๋ด์ฉ |
ํ๋ก์ ํธ ์ ์ฉ ๋ฐฉ์ |
| Scan Chain |
Top-down insertion, Clock mixing |
6๊ฐ chain, mix_clocks mode |
| DFTMAX Compression |
XOR compression, Shared chains |
24 chains (boundary_checker๋ณ) |
| Memory BIST |
Memory wrapper, MBIST controller |
Frame buffer (256ร256) ์ ์ฉ |
| OCC |
PLL control, At-speed test |
333MHz at-speed testing |
DFT Architecture ์ค๊ณ
# DFT Configuration
set_dft_configuration \
-scan_compression enable \
-clock_controller enable
# Scan ์ ํธ ์ ์
set_dft_signal -type ScanClock -port clk
set_dft_signal -type Reset -port rst -active 1
set_dft_signal -type ScanEnable -port scan_en
set_dft_signal -type TestMode -port test_mode
# Scan Data ์ฒด์ธ ์ฐ๊ฒฐ
for {set i 0} {$i < 6} {incr i} {
set_dft_signal -type ScanDataIn \
-port scan_in[$i]
set_dft_signal -type ScanDataOut \
-port scan_out[$i]
}
# Memory BIST wrapper
set_dft_configuration \
-bist enable \
-bist_controller mbist_ctrl
๊ตฌํ ๊ณผ์ ์์์ ์ฃผ์ ๋ฌธ์ ์ ๊ณผ ํด๊ฒฐ๋ฐฉ๋ฒ
| ๋ฌธ์ ์ |
์์ธ ๋ถ์ |
ํด๊ฒฐ ๋ฐฉ๋ฒ |
๊ฒฐ๊ณผ |
| Bus Contention |
Initial detector์ tracker๊ฐ ๋์์ frame buffer ์ ๊ทผ |
Priority-based MUX:
icd_busy ? icd : ct |
ํด๊ฒฐ โ |
| Synthesis Error |
24๊ฐ parameterized module unresolved |
๊ฐ parameter๋ณ elaborate:
-parameters "DX=$dx,DY=$dy" |
ํด๊ฒฐ โ |
| Timing Violation |
15-level adder chain์ด critical path |
compile_ultra ์ฌ์ฉ, aggressive optimization |
333MHz โ |
| Simulation Hang |
256ร256 ์ ์ฒด scan ์ ๋ฌดํ loop |
Timeout mechanism:
repeat(5000000) @(posedge clk) |
ํด๊ฒฐ โ |
| Memory Size |
Frame buffer synthesis ์๊ฐ ๊ณผ๋ค |
๋ณ๋ ๋ชจ๋๋ก synthesis, memory compiler ์ฌ์ฉ ๊ณ ๋ ค |
์ต์ ํ โ |
Synthesis ์ต์ ํ ๊ธฐ๋ฒ
- Hierarchical synthesis: ๋ณต์กํ ๋ชจ๋ ๋ถ๋ฆฌ
- Incremental compile: ์ ์ง์ ๊ฐ์
- Design partition: ๋ณ๋ ฌ ์ฒ๋ฆฌ
- Clock gating: ์ ๋ ฅ ์ ๊ฐ
๊ฒ์ฆ ๋ฐฉ๋ฒ๋ก
- Unit test: ๊ฐ ๋ชจ๋ ๊ฐ๋ณ ๊ฒ์ฆ
- Integration test: ์ ์ฒด ์์คํ
- Corner case: ๊ฒฝ๊ณ ์กฐ๊ฑด
- Performance: Timing ๊ฒ์ฆ
ํ๋ก์ ํธ ์ฑ๊ณผ ๋ฐ ํ์ต ๋ด์ฉ
๊ธฐ์ ์ ์ฑ๊ณผ
- ์ค์๊ฐ ์ detection/tracking ์์คํ
๊ตฌํ
- Worst case 333MHz ๋์ ๋ฌ์ฑ (3.3x)
- Area 26% ๊ฐ์, Cell count 37% ๊ฐ์
- 24๊ฐ parallel filter ์ฑ๊ณต์ ํตํฉ
- ์๋ํ๋ synthesis flow ๊ตฌ์ถ
ํ์ต ๋ด์ฉ
- Synopsys Design Compiler ์ฌํ ํ์ฉ
- SDC constraints ์์ฑ ๋ฐ ์ต์ ํ
- Parameterized design synthesis
- DFT/ATPG ๋ฐฉ๋ฒ๋ก ์ดํด
์์
๋ด์ฉ ์ ์ฉ
์ ์ฉ๋ ๊ธฐ๋ฒ๋ค:
- โ
Technology library ์ค์
- โ
SDC constraints ์์ฑ
- โ
compile vs compile_ultra
- โ
Timing/Area/Power ๋ถ์
- โ
TCL scripting
ํฅํ ๊ฐ์ ๋ฐฉํฅ
- Pipeline ์ฝ์
์ผ๋ก ๋ ๋์ ์ฃผํ์
- DFT ์ค์ ๊ตฌํ ๋ฐ ๊ฒ์ฆ
๊ฐ์ฌํฉ๋๋ค!