Ching-Hsuan Ma
Ching-Hsuan Ma
Ching-Hsuan Ma
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
FPGA<br />
<strong>Ching</strong>-<strong>Hsuan</strong> <strong>Ma</strong>
• Basic concepts<br />
Outline<br />
• Combinational circuit<br />
• Sequential circuit<br />
• Finite state machine
• Basic concepts<br />
Outline<br />
• Combinational circuit<br />
• Sequential circuit<br />
• Finite state machine
• Modules<br />
Basic concepts<br />
module ();<br />
…<br />
<br />
…<br />
endmodule<br />
The half adder could be defined as a module as follows:<br />
module HA(…);<br />
…<br />
<br />
…<br />
endmodule<br />
HA
• Ports<br />
module HA(a,b,sum,c_out);<br />
input a, b;<br />
output sum,c_out;<br />
…<br />
<br />
…<br />
endmodule<br />
Basic concepts<br />
a<br />
b<br />
HA<br />
sum<br />
c_out
Basic concepts<br />
• Structured procedures<br />
module HA(a,b,sum,c_out);<br />
input a, b;<br />
output sum,c_out;<br />
reg sum, c_out;<br />
always@(a or b)<br />
begin<br />
sum = a ^ b;<br />
c_out = a & b;<br />
end<br />
endmodule
Basic concepts<br />
• Number specification<br />
4’b1111; // a 4-bit binary number<br />
12’habc; // a 12-bit hexadecimal number<br />
10’d1023; // a 10-bit decimal number
• Data types<br />
Basic concepts<br />
Nets represent connections between hardware elements.<br />
wire GND = 1’b0; //1-bit net<br />
wire [3:0] data; //4-bit net<br />
Registers represent data storage elements.<br />
reg data1;<br />
reg [7:0] data2;
Basic concepts<br />
• Conditional statements<br />
if () true_statement;<br />
else false_statement;<br />
Ex: a = ~b<br />
If (a==1’b0) begin<br />
b = 1’b1;<br />
end<br />
else begin<br />
b = 1’b0;<br />
end
• Case statement<br />
Basic concepts<br />
case (expression)<br />
alternative1: statement1;<br />
alternative2: statement2;<br />
alternative3: statement3;<br />
default: default_statement;<br />
endcase<br />
Ex: ALU<br />
case (opcode)<br />
2’b00: out=a+b;<br />
2’b01: out=a-b;<br />
2’b10: out=a&b;<br />
default: out=a|b;<br />
endcase
• Basic concepts<br />
Outline<br />
• Combinational circuit<br />
• Sequential circuit<br />
• Finite state machine
Combinational circuit<br />
• A combinational circuit consists of logic gates whose<br />
outputs at any time are determined directly from the<br />
present combination of inputs without regard to previous<br />
inputs.
• Always block<br />
Combinational circuit<br />
– always@(sensitive list) begin<br />
….<br />
end module adder(a, b, c_in, sum, c_out);<br />
input a, b, c_in;<br />
output sum, c_out;<br />
reg sum, c_out;<br />
always@(a or b or c_in)<br />
begin<br />
{c_out, sum} = a + b + c_in;<br />
end<br />
endmodule
Combinational circuit<br />
• Continuous assignment<br />
– assign wire_variable = expression;<br />
module adder(a, b, c_in, sum, c_out);<br />
input a, b, c_in;<br />
output sum, c_out;<br />
wire sum, c_out;<br />
assign {c_out, sum} = a + b + c_in;<br />
endmodule
Combinational circuit<br />
• The same result<br />
a<br />
b<br />
c_in<br />
1' h0 --<br />
1' h0 --<br />
Add0<br />
A[1..0]<br />
B[1..0]<br />
ADDER<br />
OUT[1..0]<br />
1' h0 --<br />
Add1<br />
A[1..0]<br />
B[1..0]<br />
ADDER<br />
OUT[1..0]<br />
sum<br />
c_out
• Basic concepts<br />
Outline<br />
• Combinational circuit<br />
• Sequential circuit<br />
• Finite state machine
Sequential circuit<br />
• A sequential circuit is a system whose<br />
outputs at any time are determined from<br />
the present combination of inputs and the<br />
previous inputs or outputs.
Sequential circuit<br />
• always@(posedge clk) begin<br />
…..<br />
end<br />
• always@(negedge clk) begin<br />
…..<br />
end
Sequential circuit<br />
• EX: a 10-bit counter<br />
module counter(clk, reset, D, Q);<br />
input clk, reset;<br />
output [9:0] count;<br />
reg [9:0] count;<br />
always@(posedge clk)<br />
begin<br />
if (reset) count=0;<br />
else count=count + 1’b1;<br />
end<br />
endmodule
• Basic concepts<br />
Outline<br />
• Combinational circuit<br />
• Sequential circuit<br />
• Finite state machine
Finite state machine<br />
• Finite state machine (FSM)<br />
– 2C1S<br />
C: combinational circuit, S: sequential circuit
• Top module<br />
Moore machine<br />
module Moore_FSM(Clock, Reset, In, Out);<br />
input Clock, Reset, In;<br />
output [1:0] Out;<br />
reg [1:0] Out;<br />
reg [1:0] State, NextState;<br />
parameter S0=2'b00, S1=2'b01, S2=2'b10, S3=2'b11;<br />
….<br />
endmodule
• 1S, state logic<br />
Moore machine<br />
always @(posedge Clock or posedge Reset)<br />
begin<br />
if(Reset)<br />
State = S0;<br />
else<br />
State = NextState;<br />
end
Moore machine<br />
• 2C, next state logic and output logic<br />
always @(In or State)<br />
begin<br />
case(State)<br />
S0: begin<br />
if(In == 1)<br />
NextState = S2;<br />
else<br />
NextState = S0;<br />
end<br />
….<br />
endcase<br />
end<br />
always @(State)<br />
begin<br />
case(State)<br />
S0:Out = 0;<br />
S1:Out = 1;<br />
S2:Out = 1;<br />
S3:Out = 0;<br />
endcase<br />
end
• Top module<br />
Mealy machine<br />
module Mealy_FSM(Clock, Reset, In, Out);<br />
input Clock, Reset, In;<br />
output [1:0] Out;<br />
reg [1:0] Out;<br />
reg [1:0] State, NextState;<br />
parameter S0=2'b00, S1=2'b01, S2=2'b10, S3=2'b11;<br />
….<br />
endmodule
Mealy machine<br />
• 1S, state logic(the same with Moore<br />
machine)<br />
always @(posedge Clock or posedge Reset)<br />
begin<br />
if(Reset)<br />
State = S0;<br />
else<br />
State = NextState;<br />
end
Mealy machine<br />
• 2C, next state logic and output logic<br />
always @(In or State)<br />
begin<br />
case(State)<br />
S0: begin<br />
if(In == 1)<br />
begin<br />
NextState = S1;<br />
end<br />
else<br />
begin<br />
NextState = S0;<br />
end<br />
end<br />
…<br />
endcase<br />
end<br />
always @(In or State)<br />
begin<br />
case(State)<br />
S0: begin<br />
if(In == 1)<br />
begin<br />
Out = 1;<br />
end<br />
else<br />
begin<br />
Out = 0;<br />
end<br />
end<br />
…<br />
endcase<br />
end
Reference<br />
• 數位IC設計入門-Verilog<br />
作者:陳培殷等編著<br />
年份:2008年1版<br />
ISBN:9789866889905<br />
書號:EE0343<br />
規格:16開/平裝/單色<br />
頁數:328<br />
出版商:滄海書局