Kraklog

Day.84 Advanced Verilog #7 본문

[Harman] 하만 반도체 설계/VerilogHDL

Day.84 Advanced Verilog #7

Krakens 2023. 11. 20. 09:39
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
  1. `run $time ns: 현재 시뮬레이션을 $time 시간까지 실행합니다. $time은 현재 시뮬레이션 시간을 나타내는 변수입니다.
  2. `WaveRestoreCursors [list {Cursor 1} [list [expr {$time - 15}] ns] 0]: 시뮬레이션 웨이브에서 커서를 복원합니다. {Cursor 1}은 커서의 식별자를 나타내며, [list [expr {$time - 15}] ns]는 커서를 현재 시간에서 15ns 전으로 이동시킵니다. 0은 즉시 복원하는 데 사용되는 옵션입니다.
  3. `wave zoomfull: 웨이브를 전체 화면으로 확대합니다.
  4. `config wave -signalnamewidth 1: 웨이브 창에서 시그널 이름을 표시하는 데 사용되는 공간의 폭을 1로 설정합니다.
  5. `config wave -namecolwidth 150: 웨이브 창에서 시그널 이름 열의 폭을 150으로 설정합니다.
  6. `config wave -valuecolwidth 80: 웨이브 창에서 값 열의 폭을 80으로 설정합니다.
  7. `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