Jaehan Koh ([email protected])

Ph.D. Candidate CSE Dept., SUNY at Buffalo    Introduction  Programming on Windows  Verilog Programming on Linux  Example 1: Swap Values  Example 2: 4-Bit Binary Up-Counter  Summary  X-Win32 2010 Installation Guide  References

4/2/2012 (c) 2012 Jaehan Koh 2

 Verilog o A commonly used hardware description language (HDL) o Organizes hardware designs into modules  o An open-source compiler/simulator/synthesis tool • Available for both Windows and linux o Operates as a compiler • Compiling source code written in Verilog (IEEE-1364) into some target format o For batch simulation, the compiler can generate an intermediate form called vvp assembly • Executed by the command, “vvp” o For synthesis, the compiler generates netlists in the desired format  Other Tools o ’s WebPack & ModelSim o ’s Quartus

4/2/2012 (c) 2012 Jaehan Koh 3  Verilog Programming on Windows o Use Icarus Verilog  Verilog Programming on Linux o Remotely have access to CSE system

4/2/2012 (c) 2012 Jaehan Koh 4  Downloading and Installing Software o Icarus Verilog for Windows • Download Site: http://bleyer.org/icarus/  Edit source code using a text editor o Notepad, Notepad++, etc  Compiling Verilog code o Type “iverilog –o xxx_out.vvp xxx.v xxx_tb.v”  Running the simulation o Type “vvp xxx_out.vvp”  Viewing the output o Type “gtkwave xxx_out.vcd” o An output waveform waveform file xxx_out.vcd (“value change dump”) can be viewed by gtkwave under Linux/Windows.

4/2/2012 (c) 2012 Jaehan Koh 5  Icarus Verilog under CSE Systems o Have access to [timberlake] remotely using • [X-Win 2010] software • [Cygwin] software  How to check if the required software is installed • Type “where iverilog” • Type “where vvp”  Edit source code using a text editor o Vim, emacs, etc.  Compiling Verilog code o Type “iverilog –o xxx_out.vvp xxx.v xxx_tb.v”  Running the simulation o Type “vvp xxx_out.vvp”

4/2/2012 (c) 2012 Jaehan Koh 6  Swapping inputs o Swap the first bit with the second, the third with the fourth. o E.g., 0101  1010

4 4 IN 0 0 OUT

1 1

2 2

3 3

4/2/2012 (c) 2012 Jaehan Koh 7  Code

module swapvals(IN, OUT); module swapvals_tb; input [3:0] IN; reg [3:0] IN = 4'b0101; output [3:0] OUT; wire [3:0] OUT;

// swap the input bits initial assign OUT ={IN[2],IN[3],IN[0],IN[1]}; begin endmodule $dumpfile("swapvals.vcd"); $dumpvars(0, s); $monitor("IN=[%b], OUT=[%b].",IN,OUT); #100 IN = 4'b0011; #100 $finish; end

swapvals s(IN, OUT); endmodule

4/2/2012 (c) 2012 Jaehan Koh 8  How to compile code o iverilog -o swapvals.vvp swapvals.v swapvals_tb.v  How to run the simulation o vvp simple.vvp  How to view the output using GTKWave program o gtkwave swapvals.vcd

C:\iverilog\bin>vvp swapvals.vvp VCD info: dumpfile swapvals.vcd opened for output. IN=[0101], OUT=[1010]. IN=[0011], OUT=[0011]. C:\iverilog\bin>gtkwave swapvals.vcd

GTKWave Analyzer v3.3.0 (w)1999-2009 BSI

[0] start time. [200] end time. (c) 2012 Jaehan Koh 9  4-bit binary up counter o The desired pattern sequence is as follows • 0000  0001  …  1111  0000  … o No external input is required.

4 0 OUT

1

2

3

4/2/2012 (c) 2012 Jaehan Koh 10 `timescale 1ns/1ns  Code module fourbit_up_counter_tb; reg clk; reg reset; module fourbit_up_counter(clk,q,reset); wire [3:0] q; input clk; input reset; fourbit_up_counter output reg [3:0] q; instance0(.clk(clk),.q(q),.reset(reset)); initial initial begin begin clk = 1'b0; q=4'b0000; reset = 1'b1; end #10 reset = 1'b0; #1000 ; always@(posedge clk) $finish; begin end if (reset==1'b1) initial q=4'b0000; begin else forever #20 clk = ~clk; q=q+1; end end initial endmodule begin $monitor("Time = [%t]ns, Q = [%b]",$time,q); end endmodule 4/2/2012 (c) 2012 Jaehan Koh 11 C:\iverilog\bin>vvp fourbit_up_counter.vvp  How to compile code Time = [ 0]ns, Q = [0000] Time = [ 20]ns, Q = [0001] o C:\iverilog\bin>iverilog -o Time = [ 60]ns, Q = [0010] Time = [ 100]ns, Q = [0011] fourbit_up_counter.vvp Time = [ 140]ns, Q = [0100] fourbit_up_counter.v Time = [ 180]ns, Q = [0101] Time = [ 220]ns, Q = [0110] fourbit_ Time = [ 260]ns, Q = [0111] Time = [ 300]ns, Q = [1000] o up_counter_tb.v Time = [ 340]ns, Q = [1001] Time = [ 380]ns, Q = [1010]  How to run the simulation Time = [ 420]ns, Q = [1011] Time = [ 460]ns, Q = [1100] o vvp simple.vvp Time = [ 500]ns, Q = [1101] Time = [ 540]ns, Q = [1110] Time = [ 580]ns, Q = [1111] Time = [ 620]ns, Q = [0000] Time = [ 660]ns, Q = [0001] Time = [ 700]ns, Q = [0010] Time = [ 740]ns, Q = [0011] Time = [ 780]ns, Q = [0100] Time = [ 820]ns, Q = [0101] Time = [ 860]ns, Q = [0110] Time = [ 900]ns, Q = [0111] Time = [ 940]ns, Q = [1000] 4/2/2012 (c) 2012 Jaehan Koh Time = [ 980]ns, Q = [1001]  Icarus Verilog is a Verilog simulation and synthesis tool  You can download and run it under different platforms  You can perform simulation by using Xilinx WebPack software

4/2/2012 (c) 2012 Jaehan Koh 13  Download the Software o Visit http://ubit.buffalo.edu/software/ o Go to [Windows software]  [Software downloads]. o Download the file [win_xwin32-2010_xxxx.exe]. o You will be asked to log in for downloading.

4/2/2012 (c) 2012 Jaehan Koh 14 4/2/2012 (c) 2012 Jaehan Koh 15  How to remotely have access to [timberlake] system. o Run [X-Config]. o Choose [CSE-timberlake] and click on [Launch]. o Log in.

Log in to CSE system. You will see a prompt.

4/2/2012 (c) 2012 Jaehan Koh 16  Icarus Verilog, http://iverilog.icarus.com/.  Matt Zucker, “Icarus Verilog,” Swarthmore College, http://www.swarthmore.edu/NatSci/mzucker1/e15/iverilo g-instructions.html.  Wikipedia, “Icarus Verilog,” http://en.wikipedia.org/wiki/Icarus_Verilog.

4/2/2012 (c) 2012 Jaehan Koh 17