Kraklog
Day.84 Advanced Verilog #7 본문
728x90
module adder (
input clk ,
input [31:0] a ,
input [31:0] b ,
output reg [31:0] sum
);
always @(posedge clk) begin
sum <= a + b;
end
endmodule
module addtest_file_tb();
reg clk ;
reg [3:0] a ;
reg [3:0] b ;
reg [3:0] exp_result ;
wire [3:0] sum ;
integer i ;
integer input_fd ;
integer exp_fd ;
integer display_fd ;
integer input_ch ;
integer exp_ch ;
initial begin
clk = 1'b0;
input_fd = $fopen("init2.dat", "r");
exp_fd = $fopen("exp.dat", "r");
display_fd = $fopen("result.out", "w");
end
always #10 clk = ~clk;
adder uAdder_0 (
.clk (clk ),
.a (a ),
.b (b ),
.sum (sum )
);
initial begin
for (i = 0; i < 7; i = i + 1) begin
@(negedge clk);
input_ch = $fscanf(input_fd, "%b %b", a, b);
exp_ch = $fscanf(exp_fd, "%b", exp_result);
@(negedge clk);
if (exp_result != sum) begin
$fdisplay(display_fd, "#%0d : Calculated %0d, Expected %0d\n", $time, sum, exp_result);
end
end
$fdisplay(display_fd, "**** TEST FINISHED ****\n");
end
endmodule
module adder (
input clk ,
input [3:0] a ,
input [3:0] b ,
output reg [3:0] sum
);
always @(posedge clk) begin
sum <= a + b;
end
endmodule
Class 3 tb 연습
vlib work
vlog addtest_file_tb.v
vsim -t ns work.addtest_file_tb
view wave
add wave -radix bin /clk
add wave -radix uns /a
add wave -radix uns /b
add wave -radix uns /exp_result
add wave -radix uns /sum
set time 300
run $time ns
WaveRestoreCursors [list {Cursor 1} [list [expr {$time - 15}] ns] 0]
wave zoomfull
config wave -signalnamewidth 1
config wave -namecolwidth 150
config wave -valuecolwidth 80
# set .main_pane.wave.interior 1000x100+0+0
- `run $time ns: 현재 시뮬레이션을 $time 시간까지 실행합니다. $time은 현재 시뮬레이션 시간을 나타내는 변수입니다.
- `WaveRestoreCursors [list {Cursor 1} [list [expr {$time - 15}] ns] 0]: 시뮬레이션 웨이브에서 커서를 복원합니다. {Cursor 1}은 커서의 식별자를 나타내며, [list [expr {$time - 15}] ns]는 커서를 현재 시간에서 15ns 전으로 이동시킵니다. 0은 즉시 복원하는 데 사용되는 옵션입니다.
- `wave zoomfull: 웨이브를 전체 화면으로 확대합니다.
- `config wave -signalnamewidth 1: 웨이브 창에서 시그널 이름을 표시하는 데 사용되는 공간의 폭을 1로 설정합니다.
- `config wave -namecolwidth 150: 웨이브 창에서 시그널 이름 열의 폭을 150으로 설정합니다.
- `config wave -valuecolwidth 80: 웨이브 창에서 값 열의 폭을 80으로 설정합니다.
- `set .main_pane.wave.interior 1000x100+0+0: 웨이브 창의 크기와 위치를 1000x100 픽셀로, 좌표 (0, 0)으로 설정합니다.
728x90
'[Harman] 하만 반도체 설계 > VerilogHDL' 카테고리의 다른 글
Day.86 Advanced Verilog #9 (0) | 2023.11.22 |
---|---|
Day.85 Advanced Verilog #8 (0) | 2023.11.22 |
Day.83 Advanced Verilog #6 (0) | 2023.11.17 |
Day.82 Advanced Verilog #5 (0) | 2023.11.15 |
Day.81 Advanced Verilog #4 (0) | 2023.11.14 |