real world fpga design with verilog
DESCRIPTION
Real World FPGA design with Verilog. Milo š Milovanović [email protected] Jovan Popović [email protected] Veljko Milutinović [email protected]. Literature. - Real World FPGA Design with Verilog by Ken Coffman, Prentice Hall PTR - On-line Verilog HDL Quick Reference Guide - PowerPoint PPT PresentationTRANSCRIPT
Real World FPGA design
with Verilog
Miloš Milovanović[email protected]
Jovan Popović[email protected]
Veljko Milutinović[email protected]
2
Literature- Real World FPGA Design with Verilog by Ken Coffman, Prentice Hall PTR
- On-line Verilog HDL Quick Reference Guide
by Stuart Sutherland titan.etf.bg.ac.yu/~gvozden/VLSI/
Miloš Milovanović/75
3
Field Programmable Gate Array design
Verilog – designed as a simulation and test language
Real World - &¨!¸!!”#$%&@#$%
/75Miloš Milovanović
4
A day in the life of an FPGA Silicon Designer
/75Miloš Milovanović
5
Design must be: Understandable to other designers
Logically correct
Perform under worst-case conditions of temperature and process variation
/75Miloš Milovanović
6
Design must be: Reliable
Testable and can be proven to meet the specification
Do not exceed the power consumption goals
(a battery-operated circuit)Miloš Milovanović
/75
7
Understandable Design
Miloš Milovanović /75
8
FPGA Architecture
Miloš Milovanović/75
9
Xilinx 4K Family CLB Architecture
Miloš Milovanović/75
11
Solution:
Miloš Milovanović/75
12Miloš Milovanović /75
13Miloš Milovanović /75
14
Simulation
Miloš Milovanović/75
15
Assignments Concurrent
Initial: A=B=C=E=1
A <= B + C;D <= A + E;
After assignment:A=2, D=2
Sequential
Initial: A=B=C=E=1
A = B + C;D = A + E;
After assignment:A=2, D=3
Miloš Milovanović/75
16
Module – the building block
module module_name (port_name, port_name, ... );
module_itemsendmodule
module module_name (.port_name (signal_name ), .port_name (signal_name ), ... );
module_itemsendmodule
Miloš Milovanović/75
17
Module Port Declarationsport_direction [port_size] port_name,
port_name, ... ;
port_direction – input, output, inoutport_size is a range from [ msb : lsb ]
Example1: Example2:parameter word = 32; input [15:12] addr;input [word-1:0] addr;
Miloš Milovanović/75
18
Data Type Declarations 1register_type [size] variable_name ,
variable_name , ... ;register_type [size] memory_name [array_size];
register_type:reg - unsigned variable of any bit sizeinteger - signed 32-bit variabletime - unsigned 64-bit variablereal or realtime - double-precision floating point variable
/75Miloš Milovanović
19
Data Type Declarations 2
net_type [size] #(delay) net_name , net_name , ... ;
net_type: wire or tri - Simple Interconnecting Wirewor or trior - Wired outputs OR together
wand or triand - Wired outputs AND togetherMiloš Milovanović
/75
20
Data Type Declarations 3#delay or #(delay) - Single delay for all output transitions
#(delay, delay) - Separate delays for (rising, falling) transitions
Miloš Milovanović/75
21
Data Type Declarations 4- wire a, b, c; - tri [7:0] data_bus; - reg [1:8] result; // an 8-bit // unsigned variable - reg [7:0] RAM [0:1023];
8-bits wide, with 1K of addresses- wire #(2.4,1.8) carry;a net with rise, fall
delays
/75Miloš Milovanović
22
Assign statement Continuous (combinational) logic
- net_type [size] net_name;assign #(delay) net_name = expression;
- net_type [size] net_name = expression;
assign out = in1 & in2; assign bidir = OE ? out : 1’bz;
Miloš Milovanović/75
23
Procedural Blocks
type_of_block @(sensitivity_list) statement_group: group_name local_variable_declarations
timing_control procedural_statements end_of_statement_group
Miloš Milovanović/75
24
Type of block
initial – process statements one time
always – process statements repeatedly
Miloš Milovanović/75
25
Sensitivity list OPTIONAL Signals Posedge – rising-edge triggered Negedge – falling-edge triggered
example:always @ (posedge clk or posedge rst)begin … end
Miloš Milovanović/75
26
Statement group
begin – end – the sequential block
fork – join – statements are evaluated concurrently
/75Miloš Milovanović
27
Exampleinitial
fork #10 bus = 16'h0000; #20 bus = 16'hC5A5; #30 bus = 16'hFFAA;
join
/75Miloš Milovanović
28
Examplealways
begin#10 bus = 16'h0000; #20 bus = 16'hC5A5; #30 bus = 16'hFFAA;
end
/75Miloš Milovanović
29
1
Miloš Milovanović
Example
/75
30
Verilog Hierarchymodule_name
instance_name(port_list);
Miloš Milovanović/75
31
Named & Positional Assignment
Miloš Milovanović/75
32
Built-in Logic Primitives and, or, nand, nor, xor, nxor bufif0, bufif1, notif0, notif1
Miloš Milovanović/75
33Miloš Milovanović /75
34
Latches and Flipflops Clocked D flipflop
Miloš Milovanović /75
35
Basic Latch
Miloš Milovanović/75
36Miloš Milovanović
/75
37Miloš Milovanović
test_out2 <= 0;
/75
38
Blocking and Nonblocking Assignments
Miloš Milovanović /75
39
Blocking assignmentsare order sensitive
Miloš Milovanović/75
40
Nonblocking Assignment
Miloš Milovanović/75
41
Miscellaneous Verilog Syntax Items
Numbers
- default: 32 bits wide- size’base value- underscore is legal- X is undefined- Z is the high impedance
Miloš Milovanović/75
42
Number examples
Miloš Milovanović/75
43
Forms of Negation
! – logical negation
~ - bitwise negation
Miloš Milovanović/75
44Miloš Milovanović
/75
45
Forms of AND & is a bitwise AND
&& is a logical AND (true/false)
Miloš Milovanović/75
46
Forms of OR | is a bitwise OR
|| is a logical OR (true/false)
Miloš Milovanović/75
47
AND/OR examlpe
Miloš Milovanović/75
48Miloš Milovanović /75
49
Equality Operators == is logical equalityhave an unknown (x) result if any of the compared bits are x or z
=== is case equalitylooks for exact match of bits
including x’s and z’s and return only true or false
Miloš Milovanović/75
50
Not equal operators
!= opposite to ==
!== opposite to ===
Miloš Milovanović/75
51Miloš Milovanović /75
52Miloš Milovanović
/75
53Miloš Milovanović /75
54
Also supported greater than (>)
less than (<)
greater than or equal (>=)
less than or equal (<=)Miloš Milovanović
/75
55
Shift operators
>> n – right shift (divide by 2n)
<< n – left shift (multiple by 2n)
Operating on a value which contains an x or z
gives an x result in all bit positions.Miloš Milovanović
/75
56
Shift operations example
Miloš Milovanović/75
57Miloš Milovanović
/75
58Miloš Milovanović
/75
59
Conditional Operator
out <= expression ? true_assignment : false_assignment;
- Special case: expression = x or z calculates every single bit
Miloš Milovanović/75
60Miloš Milovanović
/75
61
Math Operatorsaddition (+), subtraction (-), multiplication (*), division (/), modulus (%)
synthesis tool probably limits multiplication and division to constant powers of two
verilog assumes all reg and wire variables are unsigned
Miloš Milovanović/75
62
Parameters used in modules where they are
defined
can be changed by higher-level modules
cannot be changed at run timeMiloš Milovanović
/75
63Miloš Milovanović
/75
64Miloš Milovanović
/75
65Miloš Milovanović /75
66
Concatenations
Miloš Milovanović /75
67
Programming Statementsif, casecasez, casexforever, repeat(number), while, for
initial begin clk = 0; #1000 forever #25 clk = ~clk;
end
Miloš Milovanović /75
68
Testing…Compiler directives:
‘define, ‘ifdef, ‘else, ‘endif, ‘undef
‘include
‘timescale unit/precision example: ‘timescale 1ns/0.5ns
/75Miloš Milovanović
69
System Tasks starts with $
$finish – terminate
$stop – (time out)
/75Miloš Milovanović
70
System Tasks $display(format, vars…) - printf
$write(format, vars…) - $display + ‘\n’
$timeformat
$time
/75Miloš Milovanović
71
System Tasks $monitor (signal list and formatting)
$monitoron
$monitoroff
/75Miloš Milovanović
72
System Tasks$dumpfile(“filename”)
$dumpvars
$dumpall
$dumpvars(…)
$dumplimit(size)
/75Miloš Milovanović
73
System Tasks
$readmemh(“filename”, memory_name)
$readmemb(“filename”, memory_name)
/75Miloš Milovanović
74
Watch for those alligators!
/75Miloš Milovanović
Real World FPGA design
with Verilog
Miloš Milovanović[email protected]
Jovan Popović[email protected]
Veljko Milutinović[email protected]