Transcript Document
數位系統實驗 Experiment on Digital System Lab05: IC design flow and FPGA Introduction to Verilog HDL 負責助教:葉俊顯 stanley Outline IC Design Flow and FPGA Introduction to HDL Write Verilog code using Quartus II Lab 2015/7/20 2 Outline IC Design Flow and FPGA Introduction to HDL Write Verilog code using Quartus II Lab 2015/7/20 3 Digital system Digital system 數位系統 (digital system) 通常被設計用來實現或完成 某一些特殊的功能需求 MP3 player Mobile phone … 一個數位系統可能包含數個不同功能特質的數位電路, 而數位電路一般是使用所謂的半導體技術實作於積體電路 (Integrated circuit, IC) 上 2015/7/20 4 IC design flow Product specification Sim/Ver Circuit design Sim/Ver Layout (placement & routing) GDS-II 2015/7/20 5 ASIC and FPGA 當設計者完成RTL(Register Transfer Level)電路後,若使用製作 功能應用導向晶片(Application Specific Integrated Circuit,ASIC) 的EDA tools來進行合成、模擬、驗證,最後,會產生一個GDSII檔案。最後,可將此檔案委請晶圓廠製成一顆ASIC晶片 FPGA/CPLD是一種可依需要做程式規劃的晶片,其中包含許多 可被使用的cells,透過FPGA廠商提供的FPGA-EDA tool進行合 成、模擬與驗證,最後將所設計的電路燒錄到FPGA上面 FPGA (Field Programmable Gate Array) – 本課程所使用 CPLD (Complex Programmable Logic Device) 2015/7/20 6 FPGA design flow Design ideas Detailed design Functional simulation Implementation (P & R) Time simulation Device programming 2015/7/20 7 Outline IC Design Flow and FPGA Introduction to HDL Write Verilog code using Quartus II Lab 2015/7/20 8 Introduction to HDL HDL Hardware description language Similar to general-purpose languages like C Modeling and simulation of the functionality of combinational and sequential circuits Parallel vs. sequential behaviors Two competitive forces Verilog: C-like language – 本課程所使用 VHDL: ADA-like language 2015/7/20 9 Introduction to Verilog HDL C-like syntax/semantics Basic building block Module Four kinds of model for circuits Switch Level Model or Transistor Model (npn & pnp …) Gate Level Model (or & and …) Data Flow Model (assign) Behavioral Model (RTL description) (always@() begin … end) 2015/7/20 10 Design hierarchy output1 input1 top_module sub_module1 output2 input2 output3 input3 sub_module2 sub_module3 output4 input4 output5 2015/7/20 11 Identifier Names of modules, ports, wires and instances are all identifiers First character must be a letter, and other characters can be letters, numbers or underscore ( _ ) Upper case and lower case letters are different 2015/7/20 12 Keyword All keywords are defined in lower case 2015/7/20 13 Keyword All keywords are defined in lower case 2015/7/20 14 Data type net reg parameter 2015/7/20 15 Data type - net (wire) 2015/7/20 16 Data type - reg A reg data type represents a variable in Verilog Type ”reg” variable stores values, but not necessarily a FF (register) Are only assigned in an ”always” block task or function If a reg data type is assigned a value in an always block that has a clock edge expression, a flip-flop is inferred 2015/7/20 17 Data type - reg By default, net and register are one-bit wide 2015/7/20 18 Data type - parameter Represents constants Declared by: parameter data_size = 5; Cannot be changed at run time 2015/7/20 19 Value Set Verilog has four value levels 2015/7/20 20 Operator Priority 2015/7/20 21 Module 2015/7/20 22 Module - example module name module half_adder ( x, y, c, port name s ); // port declaration input x; // width: 1 bit input y; output c, s; 2015/7/20 // I/O type and data type wire c; wire s; // functionality or structure xor (s, x, y); // (out, in, ……) and (c, x, y); endmodule Verilog primitive 23 Circuit design using - Four kinds of model Switch Level Model Gate Level Model Data Flow Model Behavioral Model 2015/7/20 24 Example: Half adder module half_adder ( //input x, y, //output c, s ); // port declaration input x; // width: 1 bit input y; output c, s; Gate Level Model // I/O type and data type wire c; wire s; // functionality or structure xor (s, x, y); and (c, x, y); x S half_adder y x S C Behavioral Model C y reg s,c; always @(x or y) begin s=x^y; c=x&y; Data Flow Model assign s=x^y; assign c=x&y; end endmodule 25 Example: Full adder (Gate Level Model) module full_adder (x, y, z, S, C); input x, y, z; output S, C; wire01 x S xor01 // internal nets/registers wire wire01; wire wire02; wire wire03; xor02 wire03 y C and01 and02 z wire02 // functionality or structure xor xor01(wire01, x, y); and and01(wire02, x, y); xor xor02(S, wire01, z); and and02(wire03, wire01, z); or (C, wire02, wire03); endmodule 26 Example: Full adder (2HA+1OR) module full_adder (x, y, z, S, C); input x, y, z; output S, C; wire wire1, wire2, wire3 ; // functionality or structure // module instantiations half_adder ha1( //input .x (x), .y (y), //output .c (wire2), .s (wire1) ); half_adder ha2( //input .x (wire1), .y (z), //output .c (wire3), .s (S) ); or (C, wire2, wire3); endmodule x s HA 1 y z wire1 S s HA 2 c c wire3 C wire2 27 Instantiation and port mapping In order // in half_adder.v half_adder (x, y, c, s); // in full_adder.v half_adder ha1(x, y, wire2, wire1); half_adder ha2(wire1, z, wire3, s); By name // in half_adder.v half_adder (x, y, c, s); // in full_adder.v half_adder ha1(.x(x), .y(y), .c(wire2), .s(wire1)); half_adder ha2(.x(wire1), .y(z), .s(s), .c(wire3)); 28 Outline IC Design Flow and FPGA Introduction to HDL Write Verilog code using Quartus II Lab 2015/7/20 29 Step by Step Getting Started – Start the Quartus II software 30 Step by Step Create a New Project – Open New Project Wizard (File → New Project Wizard…) 31 Step by Step Specify the working directory and the name of the project 可先新增資料夾 請記住! 32 Step by Step Select design files. Or click “Next” to skip this step Specify device settings - (Here we use the VerLite Device family) EP1C6Q240C8 33 Step by Step Edit a Schematic File Open a new Verilog HDL file (File → New → Verilog HDL File → OK) 34 Step by Step Write Verilog code Top module name 一定要跟 Project name 相同 !! 1: 2: 3: 4: //File Name:Half_Adder.v module Half_Adder(a, b, sum, carry); input a, b; output sum, carry; 5: 6: 7: 輸入(input) 被加數(a) 加數(b) 0 0 0 1 1 0 1 1 a assign sum = a ^ b; b 輸出(output) 和(sum) 進位(carry) 0 0 1 0 1 0 0 1 Half Adder sum carry assign carry = a & b; 8: 9: endmodule 35 Step by Step Compiling the Designed Circuit (Processing → Start Compilation) 36 Step by Step Successful compilation 37 Step by Step Simulating the Designed Circuit Using the Waveform Editor (File → New → Vector Waveform File) 38 Step by Step Simulating the Designed Circuit Use node finder to find all the pins (Edit → Insert → Insert Node or Bus…) 39 Step by Step Simulating the Designed Circuit Selecting nodes to insert into the Waveform Editor 沒跑出pin腳,表示你剛剛忘記compile 40 Step by Step Simulating the Designed Circuit Selecting nodes to insert into the Waveform Editor 41 Step by Step Simulating the Designed Circuit Select and edit waveform 42 Step by Step Simulating the Designed Circuit Setting of test values 43 Step by Step Performing the Simulation Modify default settings (Assignments → Settings… → Simulator Settings → Functional → OK) 44 Step by Step Generate functional simulation netlist before simulation (Processing → Generate Functional Simulation Netlist) 45 Step by Step Start simulation (Processing → Start Simulation ) 46 Step by Step The result of functional simulation 輸入(input) 被加數 加數(b) (a) 0 0 0 1 輸出(output) 進位 和(sum) (carry) 0 0 1 0 1 0 1 0 1 1 0 1 47 Outline IC Design Flow and FPGA Introduction to HDL Write Verilog code using Quartus II Lab 2015/7/20 48 Lab I Using Verilog to implement a 1-bit Full Adder Simulation Result z y x S C 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 49 Lab I - Hint Hint (Gate Level Model) wire01 x S xor01 xor02 wire03 y C and01 and02 z wire02 50 Lab II Using Verilog to implement a 2-bit Full Adder Simulation Result z1 y1 x1 C1 y2 x2 S1 S2 C2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 0 0 0 1 1 1 0 1 1 0 1 1 0 1 0 0 1 1 1 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 51 Lab II - Hint wire01 wire01 x1x S1 S xor01 xor02 wire03 wire03 y1y and01 C C1 and02 z1z or01 Ref. Instantiation and port mapping wire01 wire04 x x2 xor01 xor03 wire02 wire02 xor04 S S2 xor02 wire06 wire03 y2 y z X C1 and01 and03 and02 and04 C C2 or02 wire05 wire02 52 Notice 請勿在桌面建立 Project 及請勿命名中文資料夾 Device family 請確認與 FPGA Chip 符合 (EP1C6Q240C8) Top module name & Project name 需要一致 確認 module … endmodule 為keyword 變成藍色字體 53