09.01.2013 Views

Ching-Hsuan Ma

Ching-Hsuan Ma

Ching-Hsuan Ma

SHOW MORE
SHOW LESS

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 />

出版商:滄海書局

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!