Professional Documents
Culture Documents
FPGA design
with Verilog
Miloš Milovanović
miloshm@yahoo.com
Jovan Popović
josars@galeb.etf.bg.ac.yu
Veljko Milutinović
vm@etf.bg.ac.yu
Literature
- Real World FPGA Design with Verilog
by Ken Coffman, Prentice Hall PTR
Miloš Milovanović
2 /75
Field Programmable Gate Array design
Miloš Milovanović
3 /75
A day in the life
of an FPGA Silicon Designer
Miloš Milovanović
4 /75
Design must be:
Understandable to other designers
Logically correct
Miloš Milovanović
5 /75
Design must be:
Reliable
Miloš Milovanović
6 /75
Understandable Design
Miloš Milovanović
8 /75
Xilinx 4K Family
CLB Architecture
Miloš Milovanović
9 /75
Trivial Overheat Detector Example
josars@galeb.etf.bg.ac.yu
“Big Brother” vm@etf.bg.ac.yu
Miloš Milovanović
10 /75
Solution:
Miloš Milovanović
11 /75
Miloš Milovanović 12 /75
Miloš Milovanović 13 /75
Simulation
Miloš Milovanović
14 /75
Assignments
Concurrent Sequential
A <= B + C; A = B + C;
D <= A + E; D = A + E;
Miloš Milovanović
15 /75
Module – the building block
Example1: Example2:
parameter word = 32; input [15:12] addr;
input [word-1:0] addr;
Miloš Milovanović
17 /75
Data Type Declarations 1
register_type [size] variable_name ,
variable_name , ... ;
register_type [size] memory_name [array_size];
register_type:
reg - unsigned variable of any bit size
integer - signed 32-bit variable
time - unsigned 64-bit variable
real or realtime - double-precision
Miloš Milovanović floating point variable
18 /75
Data Type Declarations 2
net_type:
wire or tri - Simple Interconnecting Wire
wor or trior - Wired outputs OR together
wand or triand - Wired outputs AND together
Miloš Milovanović
19 /75
Data Type Declarations 3
#delay or #(delay) - Single delay
for all output transitions
Miloš Milovanović
20 /75
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
Miloš Milovanović
21 /75
Assign statement
Continuous (combinational) logic
- net_type [size] net_name;
assign #(delay) net_name =
expression;
type_of_block @(sensitivity_list)
statement_group: group_name
local_variable_declarations
timing_control procedural_statements
end_of_statement_group
Miloš Milovanović
23 /75
Type of block
Miloš Milovanović
24 /75
Sensitivity list
OPTIONAL
Signals
Posedge – rising-edge triggered
Negedge – falling-edge triggered
example:
always @ (posedge clk or posedge rst)
begin … end
Miloš Milovanović
25 /75
Statement group
fork – join –
statements are evaluated concurrently
Miloš Milovanović
26 /75
Example
initial
fork
#10 bus = 16'h0000;
#20 bus = 16'hC5A5;
#30 bus = 16'hFFAA;
join
Miloš Milovanović
27 /75
Example
always
begin
#10 bus = 16'h0000;
#20 bus = 16'hC5A5;
#30 bus = 16'hFFAA;
end
Miloš Milovanović
28 /75
Example
Miloš Milovanović
29 /75
Verilog Hierarchy
module_name instance_name(port_list);
Miloš Milovanović
30 /75
Named & Positional Assignment
Miloš Milovanović
31 /75
Built-in Logic Primitives
and, or, nand, nor, xor, nxor
bufif0, bufif1, notif0, notif1
Miloš Milovanović
32 /75
Miloš Milovanović 33 /75
Latches and Flipflops
Clocked D flipflop
Miloš Milovanović
35 /75
Miloš Milovanović
36 /75
test_out2 <= 0;
Miloš Milovanović
39 /75
Nonblocking Assignment
Miloš Milovanović
40 /75
Miscellaneous Verilog
Syntax Items
Numbers
Miloš Milovanović
42 /75
Forms of Negation
! – logical negation
~ - bitwise negation
Miloš Milovanović
43 /75
Miloš Milovanović
44 /75
Forms of AND
& is a bitwise AND
Miloš Milovanović
45 /75
Forms of OR
| is a bitwise OR
|| is a logical OR (true/false)
Miloš Milovanović
46 /75
AND/OR examlpe
Miloš Milovanović
47 /75
Miloš Milovanović 48 /75
Equality Operators
== is logical equality
have an unknown (x) result
if any of the compared bits are x or z
Miloš Milovanović
49 /75
Not equal operators
!= opposite to ==
Miloš Milovanović
50 /75
Miloš Milovanović 51 /75
Miloš Milovanović
52 /75
Miloš Milovanović 53 /75
Also supported
greater than (>)
Miloš Milovanović
55 /75
Shift operations example
Miloš Milovanović
56 /75
Miloš Milovanović
57 /75
Miloš Milovanović
58 /75
Conditional Operator
Miloš Milovanović
59 /75
Miloš Milovanović
60 /75
Math Operators
addition (+), subtraction (-), multiplication (*),
division (/), modulus (%)
Miloš Milovanović
62 /75
Miloš Milovanović
63 /75
Miloš Milovanović
64 /75
Miloš Milovanović 65 /75
Concatenations
casez, casex
initial begin
clk = 0;
#1000 forever #25 clk = ~clk;
end
‘include
‘timescale unit/precision
example: ‘timescale 1ns/0.5ns
Miloš Milovanović
68 /75
System Tasks
starts with $
$finish – terminate
Miloš Milovanović
69 /75
System Tasks
$display(format, vars…) - printf
$timeformat
$time
Miloš Milovanović
70 /75
System Tasks
$monitor (signal list and formatting)
$monitoron
$monitoroff
Miloš Milovanović
71 /75
System Tasks
$dumpfile(“filename”)
$dumpvars
$dumpall
$dumpvars(…)
$dumplimit(size)
Miloš Milovanović
72 /75
System Tasks
$readmemh(“filename”, memory_name)
$readmemb(“filename”, memory_name)
Miloš Milovanović
73 /75
Watch for those alligators!
Miloš Milovanović
74 /75
Real World
FPGA design
with Verilog
Miloš Milovanović
miloshm@yahoo.com
Jovan Popović
josars@galeb.etf.bg.ac.yu
Veljko Milutinović
vm@etf.bg.ac.yu