Wishbone SSRAM controller

베릴로그 | 2012/01/04 22:49 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
모종의 이유로 16비트 SSRAM 컨트롤러를 만들고 있었는데 이미 매우 잘 만들어 진것이 있어서 만들다 말았다. 그 만들다 만 결과물을 올린다능. 만들다 말아서 시뮬레이션 까지만 검증이 되었다. 블로그가 말라 죽을꺼 같아서 올렸봤다. 스펙은 다음과 같다.

support 32bit Wishbone interface
support only 16bit SSRAM
support single word, half-word, byte access
does not support Wishbone burst operation

아래 코드를 내려받고 sim 디렉토리 아래로 찾아가서 make 하면 돌려볼 수 있다.



저작자 표시 비영리 동일 조건 변경 허락

'베릴로그' 카테고리의 다른 글

Wishbone SSRAM controller  (4) 2012/01/04
Clock speed  (0) 2011/05/02
Verilog VPI example  (2) 2011/03/21
Verilog Coding Guidelines  (2) 2010/12/11
베릴로그 스니펫 Resettable D flip-flop  (3) 2010/11/14
베릴로그 스니펫 D flip-flop, Verilog D flip-flop  (0) 2010/11/13

댓글을 달아 주세요

  1. prismatic 2012/01/14 03:20  댓글주소  수정/삭제  댓글쓰기

    헐 성님! ㄷㅁㅇ 성님! ㅠㅜ
    공부자료 생겼네 ㅠㅜ

  2. 2012/02/10 14:11  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

Clock speed

베릴로그 | 2011/05/02 06:31 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
블로그가 말라죽어 가려고 해서 잉공호흡 좀 시킬겸 찌끌여봤다능.
시뮬레이션을 할 때 클럭 스피드를 콘솔에 뿌려주는 구문인데....매우 유용하다.

1
2
3
4
5
6
7
8
9
10
	integer stamp_f;
	integer stamp_s;
	initial begin
		wait(RESETn == 1'b1);
		wait(RESETn == 1'b0);
		@ (posedge CLOCK);
		@ (posedge CLOCK); stamp_f = $time;
		@ (posedge CLOCK); stamp_s = $time;
		@ (negedge CLOCK); $display("CLOCK %d nsec", stamp_s - stamp_f);
	end


active low 리셋을 기둘렸다가 클럭의 rising edge부터 다음 rising edge까지 timescale이 몇번 지났는지 측정해서 보여주는 구문이다. 그러니까 1ns timescale를 사용하면 ns 단위로 클럭 스피드를 재서 보여주게된다. 조타능.

이런식으로 사용하면 된다.

`include "timescale.v"

module tb();
	reg CLOCK;
	reg RESETn;

	initial begin
		CLOCK = 0;
	end

	initial begin
		RESETn = 1;
		#50 RESETn = 0;
		#50 RESETn = 1;
		#200 $finish;
	end

	always begin
		#10		CLOCK = ~CLOCK;			// 20ns(50Mhz) clk at 1ns timescale 
	end

	integer stamp_f;
	integer stamp_s;
	initial begin
		wait(RESETn == 1'b1);
		wait(RESETn == 1'b0);
		@ (posedge CLOCK);
		@ (posedge CLOCK); stamp_f = $time;
		@ (posedge CLOCK); stamp_s = $time;
		@ (negedge CLOCK); $display("CLOCK %d nsec", stamp_s - stamp_f);
	end

	initial begin
		$dumpfile("sim.vcd");
		$dumpvars(0, tb);
	end
endmodule


저작자 표시 비영리 동일 조건 변경 허락

'베릴로그' 카테고리의 다른 글

Wishbone SSRAM controller  (4) 2012/01/04
Clock speed  (0) 2011/05/02
Verilog VPI example  (2) 2011/03/21
Verilog Coding Guidelines  (2) 2010/12/11
베릴로그 스니펫 Resettable D flip-flop  (3) 2010/11/14
베릴로그 스니펫 D flip-flop, Verilog D flip-flop  (0) 2010/11/13
TAG verilog

댓글을 달아 주세요

Verilog VPI example

베릴로그 | 2011/03/21 21:36 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
VPI라는건 Verilog Procedural Interface의 약자고 PLI 2.0으로 불리기도 하는거다. $finish 처럼 $로 시작하는 시스템 테스크를 만들 수 있게 해주는 물건인데....이걸가지고 여러가지 재미난것을 많이 할 수 있다. 노력이 필요하긴 하지만....

PLI 1.0...그러니까 옛날에는 이게 시뮬레이터마다 중구난방으로 구현되어 있어 사용하는데 에로사항이 꽃이 피었다고 하는데 VPI로 오면서 통일되었다고 한다. 그러니까 코드 하나만 짜 놓으면 여러 시뮬레이터에서 쓸 수 있다 그말임.

VPI는 C/C++로 작성하고 shared object, 즉 DLL로 링크 된다. 만들어진 DLL을 시뮬레이터가 실행될 때 옵션으로 넣어주면 C로 짠 테스크들을 시뮬레이션에서 사용할 수 있다. 플러그인의 일종이라고 생각하면 편할듯....아무튼 이걸로 소켓으로 데이터를 보내서 다른 프로그램과 연동 시킨킨다던지 등등등 여러가지 재미난것을 할 수 있다.

만들려면 일정한 형식을 갖춰서 코드를 짜야 하는 것 같은데....내가 VPI에 대해 잘 모르기 때문에 이 부분은 뭐라 말할 수는 업ㅂ다능. The Verilog PLI Handbook 이라는 책에 설명이 잘 되있다고 하니 궁금한 사람은 이걸 구해다 읽어보라능.

Verilog 시뮬레이터를 설치하면 시뮬레이터가 설치된 디렉토리 밑에 include 디렉토리에 VPI 라이브러리 헤더가 설치되고 lib 디렉토리 VPI 라이브러리가 설치된다. 컴파일할 때 include 패스를 잡아주고 링크할때 라이브러리를 링크해서 DLL을 맹글면 된다.
 
첨부된 파일의 압축을 풀고 modelsim을 사용하는 사람은 vpi/modelsim 디렉토리에서 자기가 사용하는 환경에 맡는 Makefile를 불러다 make를 때리면 dll이 만들어 진다. mingw하고 visual studio용으로 Makefile이 만들어져 있다. icarus를 쓰는 사람은 vpi/icarus 디렉토리에서 mingw용 Makefile를 사용하면 된다....아 make를 하기전에 Makefile을 열어서 시뮬레이터의 패스를 자기 환경에 맞게 고쳐주는걸 잊지말자.

DLL이 잘 만들어 졌으면 sim 디렉토리 밑에 modelsim이나 icarus로 가서 make를 때리면 시뮬레이션 되고 아래같은 화면을 볼 수 있다 >_<.



별건 업ㅂ지만 testbench랑 VPI 소스코드는 아래처럼 생겼다. 빌드하는 방법과 시뮬레이션 하는 방법은 같이 들어있는 Makefile를 참고 하자.

 hello_vpi.v
1
2
3
4
5
6
7
8
module tb();

initial begin
	$hello;
	#10	$finish;
end

endmodule


 hello.c
#include "vpi_user.h"

PLI_INT32 hello( PLI_BYTE8 *user_data ) {
	vpi_printf("\nHello PLI\n");

	return 0;
}	

void vpit_register_hello(void) {
    s_vpi_systf_data systf_data;
#ifndef ICARUS_VPI
    vpiHandle        systf_handle;
#endif

    systf_data.type        = vpiSysTask;
    systf_data.sysfunctype = 0;
    systf_data.tfname      = "$hello";
    systf_data.calltf      = hello;
    systf_data.compiletf   = 0;
    systf_data.sizetf      = 0;
    systf_data.user_data   = 0;
#ifndef ICARUS_VPI
    systf_handle = vpi_register_systf( &systf_data );
    vpi_free_object( systf_handle );
#else
    vpi_register_systf( &systf_data );
#endif
}

void (*vlog_startup_routines[])() = {
    vpit_register_hello,
    0
};








저작자 표시 비영리 동일 조건 변경 허락

'베릴로그' 카테고리의 다른 글

Wishbone SSRAM controller  (4) 2012/01/04
Clock speed  (0) 2011/05/02
Verilog VPI example  (2) 2011/03/21
Verilog Coding Guidelines  (2) 2010/12/11
베릴로그 스니펫 Resettable D flip-flop  (3) 2010/11/14
베릴로그 스니펫 D flip-flop, Verilog D flip-flop  (0) 2010/11/13

댓글을 달아 주세요

  1. ㅇㄸㅎ 2011/03/21 22:01  댓글주소  수정/삭제  댓글쓰기

    잘봤습니다~ 본격적으로 공부하게 되면. 꽤나 재미있을것 같네요

Verilog Coding Guidelines

베릴로그 | 2010/12/11 04:52 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License

합성 가능한 코드를 짜기위한 가이드라인이라구 한다능. 나도 어디선거 주워왔는데 쉽게 찾아볼 수 있게 블로그에 백ㅋ업ㅋ

Coding Guidelines
These coding guidelines assume that you are able to write correct synthesizeable code. You can always check the synthesizeablilty of your code by parsing it using the synthesis tool.

1. Use non-blocking assignments (<=) in clocked procedures. Don’t use blocking assignments (=).

1
2
    always @ (posedge clock)
        q <= d;

2 .Use blocking assignments (=) in combinational procedures:
1
2
3
4
5
    always @ (a or b or sl)
        if (sl)
            d = a;
        else
            d = b;

3. Make sure that the event lists are complete
1
2
3
4
5
    always @ (a or b) // this event list is missing signal sl
        if (sl)
            d = a;
        else
            d = b;

4. Take care of indentation. Develop your own identation guidelines and stick to them. Make sure others can read them. It helps readability and debugging greatly if it is done properly.

5. Comment code properly. The theory about good commenting is that you should be able to remove all functional code and the comments remaining should almost document the block you are designing.
1
2
3
4
5
6
7
8
9
10
    // example of bad comments
    // add a and b together
        always @ (a or b)
            c = a + b;

    // Good commenting
    // 8 bit unsigned adder for data signals ‘a’ and ‘b’
    // output is sent to UART2
        always @ (a or b)
            c = a + b;

6. Always completely specify literals.
1
2
3
4
5
    always @ (c)
        if (c == 4’b0101)
            a = 2’bxx;
        else
            a = 2’b10;

7. Use named port mapping when instantiating.
1
2
3
4
5
6
    state_machine u1 (
        .sm_in (in1),
        .sm_clock (clk),
        .reset (reset),
        .sm_out (data_mux)
    );

8. Don’t make the code any more complicated than it needs to be. Your priorities should be correctness, then readability and finally code efficiency.

저작자 표시 비영리 동일 조건 변경 허락

'베릴로그' 카테고리의 다른 글

Clock speed  (0) 2011/05/02
Verilog VPI example  (2) 2011/03/21
Verilog Coding Guidelines  (2) 2010/12/11
베릴로그 스니펫 Resettable D flip-flop  (3) 2010/11/14
베릴로그 스니펫 D flip-flop, Verilog D flip-flop  (0) 2010/11/13
베릴로그 스니펫 MUX, Verilog Snippet MUX  (3) 2010/05/06

댓글을 달아 주세요

  1. heroant 2011/04/04 17:44  댓글주소  수정/삭제  댓글쓰기

    5번은 좀 쩌네;; 3번이랑 6번은 같은 말 아니냐? 무슨 차이가 있는지 좀 알려줘 ㅠ

    • Favicon of http://www.filepang.co.kr BlogIcon DMW 2011/05/02 06:37  댓글주소  수정/삭제

      내가 알기로는 둘다 의도치 않은 latch가 생기는걸 막으려고 하는걸로 알고 있따능.

베릴로그 스니펫 Resettable D flip-flop

베릴로그 | 2010/11/14 18:50 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
D flip-flop with asynchronous active low reset
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// async active low reset d_ff
module d_ff(
      input        wire     clock
    , input        wire     reset
    , input        wire     d
    , output       reg      q
);

    always @(posedge clock or negedge reset) begin
        if(~reset) 
            q <= 1'b0;
        else
            q <= d;
    end
endmodule

D flip-flop with synchronous active low reset
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// sync active low reset d_ff
module d_ff(
      input        wire       clock
    , input        wire       reset
    , input        wire       d
    , output       reg        q
);

    always @(posedge clock) begin
        if(~reset) 
            q <= 1'b0;
        else
            q <= d;
    end
endmodule



저작자 표시 비영리 동일 조건 변경 허락

댓글을 달아 주세요

  1. 유노 2010/11/17 17:21  댓글주소  수정/삭제  댓글쓰기

    wire? 시뮬레이터에 표시할 때 쓰는거임?
    허굽허굽~

  2. Favicon of http://montanaviyas.tistory.com BlogIcon 멋진☆윤호™ 2011/03/25 22:08  댓글주소  수정/삭제  댓글쓰기

    물리적인 상태에서 연결하는 선을 표현하는 것이로군.
    거미줄.. ㅋㅋ 이해했음. ㅋ

크리에이티브 커먼즈 라이선스
Creative Commons License
postive edge triggered D flip-flop

1
2
3
4
5
6
7
8
9
module d_ff(
          input     wire    clock
        , input     wire    d
        , output    reg     q
);
    always @(posedge clock)
        q <= d;

endmodule

`include "timescale.v"

module tb();
    reg clock;
    reg d;
    wire q;

    initial begin
    	clock = 0;
    	d = 0;
    end

    always begin
    	#5	clock = ~clock;
    end

    initial begin
    	$dumpfile("sim.vcd");
    	$dumpvars(0, tb);

    	$monitor("TIME=%d clock=%d d=%d q=%d", $time, clock, d, q);

    	#60		d = 1;			
    	#60		d = 0;
    	#60		$finish;
    end

    d_ff Ud_ff(
    	  .clock(clock)
    	, .d(d)
    	, .q(q)
    );

endmodule



negative edge triggered D flip-flop

1
2
3
4
5
6
7
8
9
module d_ff(
    	  input 	wire	clock
    	, input		wire	d
    	, output	reg	q
);
    always @(negedge clock)
    	q <= d;

endmodule



끵끵
저작자 표시 비영리 동일 조건 변경 허락

댓글을 달아 주세요

크리에이티브 커먼즈 라이선스
Creative Commons License
MUX using procedure
module mux(
	iA,				// input 0
	iB,				// input 1
	iSel,			        // select 1 bit
	oC				// output
);		

/////////////////////// Port declaration///////////////////////
input			iA;
input			iB;
input			iSel;

output			oC;	
////////////////// Port data type declaration ///////////////////
reg			oC;

////////////////// Code Start here!           ///////////////////
always @(iA or iB or iSel) begin
    if(iSel == 1'b1) begin
	oC = iA;
    end else begin
	oC = iB;
    end		
end

endmodule


MUX using case
module mux(
	iA,				// input 0
	iB,				// input 1
	iSel,			        // select 1 bit
	oC				// output
);		

/////////////////////// Port declaration///////////////////////
input			iA;
input			iB;
input			iSel;

output			oC;	
////////////////// Port data type declaration ///////////////////
reg			oC;

////////////////// Code Start here!           ///////////////////
always @(iA or iB or iSel) begin
    case(iSel) 
	1'b1: oC = iA;
	1'b0: oC = iB;	
    endcase	
end

endmodule


Testbench
//`include "mux_using_procedure.v"
`include "mux_using_case.v"

module testbench();
reg		a;				// input 0
reg		b;				// input 1
reg		s;				// input select
wire		c;				// output

initial begin
	$dumpfile("sim.vcd");
	$dumpvars(0, testbench);
	
	$monitor("TIME=%d A=%b B=%b SEL=%b C=%b", $time, a, b, s, c);
	// test scenario
		a <= 1'b0;	b <= 1'b0;	s <= 1'b0;
	#2	a <= 1'b0;	b <= 1'b0;	s <= 1'b1;
	#2	a <= 1'b0;	b <= 1'b1;	s <= 1'b0;
	#2	a <= 1'b0;	b <= 1'b1;	s <= 1'b1;
	#2	a <= 1'b1;	b <= 1'b0;	s <= 1'b0;
	#2	a <= 1'b1;	b <= 1'b0;	s <= 1'b1;
	#2	a <= 1'b1;	b <= 1'b1;	s <= 1'b0;
	#2	a <= 1'b1;	b <= 1'b1;	s <= 1'b1;
	#2	$finish();
end

// connect DUT to testbench
mux dut_mux(
	.iA(a),
	.iB(b),
	.iSel(s),
	.oC(c)
);		

endmodule


Simulation Result

Waveform

할말업ㅂ음
읭여읭여
저작자 표시 비영리 동일 조건 변경 허락
TAG Mux, verilog

댓글을 달아 주세요

  1. ememoho 2010/06/28 21:33  댓글주소  수정/삭제  댓글쓰기

    MUX using case 21번 line
    1'b0: oC = iA; -> 1'b0: oC = iB;
    오타 수정 요망... ^^

  2. 형들아 2010/10/27 21:27  댓글주소  수정/삭제  댓글쓰기

    아 이 코드 생각나네요 ㅋㅋㅋ 예전에 제가 막 징징거리니까
    이게 기본인데... 라고 하셨었는데 이제야 이해가 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
    아 좀 막연히 겁먹지 말고 봤었으면 그때 그렇게 징징거리지도않았을텐데 ㅋㅋㅋㅋㅋㅋㅋ

Verilog HDL 입문하기

베릴로그 | 2009/12/29 00:18 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
 
 요즘 틈틈히 베릴로그를 공부하고 있는데.....공부하는 동안에는 짤막짤막한 코드를 많이 짠다능. 이걸 일일히 쿼터스로 프로젝트 만들고 코딩하고 시뮬레이션 하기도 귀찬고 베릴로그는 icarus 라는 매우 좋은 오픈소스 시뮬레이터가 있기 떄문에 그걸 많이 쓰고 있삼.

 이 문서는 윈도우 환경에서 icarus verilog simulator를 사용할 수 있도록 환경을 꾸미는 방법을 설명하고 있삼. C 처음 배우는 사람이 빌드환경을 어떻게 꾸며야 되는지 궁금해하듯 hdl을 처음 배우는 사람은 어떻게 hdl 코드를 돌려볼 수 있는 환경을 꾸며야 되는지가 궁금할꺼삼. 내 생각에는 그러타는 얘기임.

 설치해야 될것은 총 세가지삼.

1. Icarus Verilog Simulator
2. GTKWave
3. Verilog Syntax Highlight가 되는 Editor

 3번 같은 경우에는 나는 VIM을 쓴다능. 각자 알아서 하도록 하고.....1번과 2번의 설치하고 환경변수를 설정하는 순서로 진행하자능. 1번과 2번은 모두 리눅스에서 돌아가는 바이너리가 배포될탠데...리눅스 사용자는 알아서 설치하삼.

 
 1. Icarus Verilog Simulator 설치

 
 저곳에서 가장 최신의 안정 버젼을 받아서 설치하자. 설치 과정중에 환경변수를 설정할지 말지 고르라고 하는데 지 멋대로 내 시스템의 환경변수를 만지면 기분나쁘니까 설정하지 말도로 하자능. 나는 아래와 같은 위치에 설치했심.

C:\iverilog

기본으로 설치되는 패스일꺼삼.


2. GTKWave 설치


 저곳에서 win32용 바이러를 받고 DLL이랑 TCL/TK 8.5 라이브러리도 받으삼. 다운받는 gtkwave.exe.gz는 gtkwave.exe로 이름만 바꾸면 된다능. 압축을 푸는게 아님 -_-;;;

 나머지 두개도 압축을 풀어서 나오는 파일들이랑 gtkwave.exe를 아래 폴더로 복사하라능.

C:\iverilog\bin


3. 환경변수 설정하기

C:\iverilog\bin

 위의 위치에 set_path.bat라는 파일을 하나 만들고 아래 내용을 복붙하삼.

@call :icarus_setup
@call :prompt_setup

@goto end

:icarus_setup
@echo Setting environment for Icarus Verilog Simulator
@set PATH=%PATH%;C:\iverilog\bin
@exit /B 0

:prompt_setup
@rem 자신만의 프롬프트 설정을 이곳에 적자. 아래는 내 설정임. 긔찬으면 안해도 상관없다.
@rem PROMPT $P$_$+$S$G$S
@exit /B 0

:end


명령 프롬프트의 바로가긔를 하나 만든다음에 그 바로가긔 속성을 아래처럼 고쳐주자능.


  적당한 위치에 폴더를 만들고 그 경로를 시작위치에 써주자. 저기가 베릴로그 프로젝트들의 루트 폴더가 될꺼라능. 바로가긔를 더블클릭했을 때 아래와 비슷한 화면이 나오면 OK삼 >_<.



4. Verilog HDL 코드 작성해보기

 먼져 DUT Design Under Test 의 코드를 짜보자능. 일단은 보구 배긔라능. 파일이름은 add.v이고 적당한 자리에 생성하면 되심.


 ㅎㅎ 됐고, Testbench의 코드를 짜자능. 파일이름은 testbench.v이고 add.v랑 같은 위치에 만들면 되삼.


!!!  testbench.v 의 맨 마지막에 endmodule 가 안 찍혔심. add.v를 참고에서 한줄 적어주라능.  !!!

 우리가 작성성 DUT인 add 모듈에 여러가지 인풋을 넣어보고 어떤 아웃풋이 나오는지 시뮬레이션 해보는 거라능. testbench의 역활은 그거라능. 일단 콘솔창에 다음 명령어를 쳐서 컴파일을 하고

iverilog testbench.v -o testbench

 문제없이 컴파일이 되면 다음 명령어를 사용해서 실행하면 되삼. 그러면 결과가 화면에 나온다능.

vvp testbench

 아마 이런 화면이 나올꺼라능.


 아래 명령어를 쳐서 gtkwave를 실행시키면 wave form을 볼 수 있다능. gtkwave 사용법은 별로 어렵지 않으니 알아서 익히도록 하자능.

gtkwave wave.vcd



 끝이삼. 이제 당신도 베릴로그 hdl 사용자가 되었다능. 매우 축하한다능. 이젠 베릴로그 책을 사더 보던지 인터넷에서 튜토리얼 문서를 찾아서 보구 배우면 되는거심. 이카루스 베릴로그는 커맨드라인 명령어만 제공하니까..make 툴등을 사용해서 자동화된 빌드 환경을 꾸면 더욱 좋을꺼삼.
저작자 표시 비영리 동일 조건 변경 허락

댓글을 달아 주세요

  1. -0-;; 2010/04/04 15:35  댓글주소  수정/삭제  댓글쓰기

    Icarus verilog를 저도 실행시켜보려하는데요
    저 testbench.v 화면을 어떻게 띄어야되는건가요??;;;
    저 설명만 보고는 도저히 모르겠어서 답답한 마음에 질문 해봅니다.

    • Favicon of http://www.filepang.co.kr BlogIcon DMW 2010/04/06 17:10  댓글주소  수정/삭제

      저건 vim 이라는 텍스트 에디터를 사용해서 코드를 편집한 화면 이구요..메모장같은걸로 하셔도 됩니다

  2. 허준영 2010/05/05 15:55  댓글주소  수정/삭제  댓글쓰기

    바로가기 속성 고치는 부분에서 c:\project\verilog 이 path는 갑자기 어디서 나온건가요?
    설정이 안되네요..

  3. ^^; 2010/05/11 14:22  댓글주소  수정/삭제  댓글쓰기

    gtkwave wave.vcd 실행했더니
    프로그램이 너무 커서 메모리에 맞지 않습니다.
    라고 나오는데 어떻게 해야하나요... ^^;

    • Favicon of http://www.filepang.co.kr BlogIcon DMW 2010/05/12 23:38  댓글주소  수정/삭제

      아규먼트없이 gtkwave를 실행해보세요. 그래도 실행이 안되면 ftp://icarus.com/pub/eda/gtkwave/Windows/gtkwave-1.3.12-setup.exe 이걸 받아서 한번 해보세요

  4. ㅜㅜ 2010/05/25 23:49  댓글주소  수정/삭제  댓글쓰기

    명령 프롬프트 실행시켜보니

    Setting environment for Icarus Verilog Simulator
    시스템이 지정된 일괄 레이블을 찾을 수 없습니다 - end

    라고 나오네요.. Visual Studio 2008이 설치되어 있어야 하는 건가요?

    • Favicon of http://www.filepang.co.kr BlogIcon DMW 2010/05/26 22:17  댓글주소  수정/삭제

      배치 스크립트에 end 레이블을 빠져있네요. Visual Studio 2008은 없어도 괜찬습니다.
      왜 아무도 이거 얘기를 안해줬지??? -_-;;;
      수정해 놓았습니다.

  5. help me 2010/06/21 15:27  댓글주소  수정/삭제  댓글쓰기

    vvp까지는 되는데요. gtkwave vcd 파일 생성 방법 좀 알려주세요.

    또 'include "add.v" 이 줄이 에러라고 나오네요.ㅠㅠ

    • Favicon of http://www.filepang.co.kr BlogIcon DMW 2010/06/21 19:10  댓글주소  수정/삭제

      거기 까지 하셨으면 설치는 잘 된거 같네요. 이제 베릴로그 문법을 익히셔서 코드를 잘 짜보세요.

  6. 지나가는... 2010/10/13 23:24  댓글주소  수정/삭제  댓글쓰기

    순서대로 하니 잘 됩니다.. 여태 쿼터스로만 해서

    책은 테스트 벤치를 이용하는데 쿼터스는 그리 이용할줄을 몰랐는데

    잘 배우고 갑니다.

  7. 유노 2010/11/17 17:20  댓글주소  수정/삭제  댓글쓰기

    나도 여기에 쓰면 DMW님이 감사합니다. 하는 거임?

  8. 머시마로 2010/12/06 14:09  댓글주소  수정/삭제  댓글쓰기

    vpp가 실행이 안되네요 ㅠㅠ 왜그럴까요?

    • Favicon of http://wwww.filepang.co.kr BlogIcon DMW 2010/12/06 23:55  댓글주소  수정/삭제

      PATH를 잘 못 설정하신것 같네요. echo %PATH% 를 입력하셔서 현재 PATH가 어떻게 설정되어 있는지 확인해보시고 set_path.bat를 고쳐보세요

  9. 뽀드득 2011/03/26 15:44  댓글주소  수정/삭제  댓글쓰기

    재밌게 글 쓰셨네요 ㅎㅎㅎㅎ 하나 하나 따라해보니 재밌네요~~~~~정상 작동하구요^^
    최신 Icarus 는 gtkwave 까지 포함해서 배포하네요^^ 용량 많이 차지하고 작동법도 어려운 쿼터스랑 모델심 필요없겠어요~^^ 당장 지우고 iverilog 이것만 쓸꺼임 ㅎㅎㅎ
    앞으로도 자주 방문할게요 ㅎㅎㅎㅎㅎㅎㅎ

  10. 와이돈츄 2011/10/04 10:36  댓글주소  수정/삭제  댓글쓰기

    .vcd가 어떤의미를 갖고 있는 파일인지 알고 싶습니다. verdi 라는 eda툴을 사용하려고 합니다.

  11. 하아.... 2011/10/11 13:04  댓글주소  수정/삭제  댓글쓰기

    메모장으로 add.v하고 둘다 만들엇는데여... 콘솔창에서 실행하느게 안되네요 애초에
    멍청해서 시도안하는게 나앗나..
    뭐가문젠지도모르겟네요

    • 하아.... 2011/10/11 13:21  댓글주소  수정/삭제

      testbench.v 가 syntax에러가 낫는데요
      invalid module instantiatin 이라고 뜨네요.. 어떻게된걸가요.


      !!!!수정합니다. 글씨잘못 써서 그렇네요
      저도 이제 베릴로그 배워야되는일만 남앗습니다.
      덕분에 좋은 정보 배우고갑니다~~

  12. 하아.... 2011/10/11 13:48  댓글주소  수정/삭제  댓글쓰기

    저 그리고 제 중간고사 까지 과제가 전가산기 반가산기 이용해서 4비트 adder/subtractor만드는건데요..
    이걸로도 만들수 있나요?
    그리고 http://www.xilinx.com 에서 받는 베릴로그 프로그램과 다른점은 무엇인가요 ㅠㅠ

    • Favicon of http://www.filepang.co.kr BlogIcon DMW 2011/10/12 11:48  댓글주소  수정/삭제

      Xilinx 에서 제공해주는 ISE는 HDL 텍스트에디터, Xilinx의 FPGA를 위한 논리 합성기, Place & Route 툴, 시뮬레이터를 합쳐놓은 IDE같은거 에요. ISE를 설치하면 개발에 필요한 것을 모두 설치 할 수 있습니다.

      제가 올린 글은 시뮬레이터만 따로 설치하고 쓰는법을 올려놓은거구요. 과제에서 구현한 add/sub를 FPGA로 검증까지 하셔야 된다면 ISE가 만드시 필요하구요. 시뮬레이션만 하실꺼면 이것만 설치해도 됩니다.