0ҥFK WXҫQ Wӵ0ҥFK WXҫQ Wӵ là ORҥL PҥFK ÿLӋQ Wӱ Vӕ mà tín KLӋX ÿҫX ra WҥL WKӡL ÿLӇP WӟL FKҷQJ QKӳQJ SKө WKXӝF vào Wә KӧS giá WUӏ ELӃQ vào WҥL WKӡL ÿLӇP KLӋQ WҥL mà còn SKө WKXӝF vào tín KL
Trang 17KLӃW NӃ IC trên FPGA
(Field-Programmable Gate Array )
ĈһQJ Bá KҳF 7ULӅX
*LҧQJ viên Khoa CNTT 7UѭӡQJ Ĉ+%.Ĉj 1ҹQJ
Trang 22009 ĈɴQJBá KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1
Multiplier ( PҥFK nhân)
0ҥFK nhân có 2 input a,
b ÿӅX là 4 bit thì output
SKҧL là Pҩ\ bit?
=> output q SKҧL 8 bit
9ӟL Verilog ta FKӍ FҫQ
dùng OӋQK gán:
assign q = a * b;
2
Multiplier
4
4
8
Trang 3Multiplier, FKѭѫQJ trình PүX
module Multiplier(a, b, q);
input [3:0] a, b;
output [7:0] q;
assign q = a * b;
endmodule
Khi xem report ta WKҩ\:
4x4-bit multiplier : 1
Cell Usage :
# BELS : 72
# AND2 : 37
# OR2 : 14
# OR3 : 1
# XOR2 : 20
# IO Buffers : 16
# IBUF : 8
Multiplier
4
4
8
Trang 42009 ĈɴQJBá KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1
Comparator ( PҥFK so sánh)
4
Greater
8
8
1
module Greater(a, b, a_gt_b);
input [7:0] a, b;
output a_gt_b;
assign a_gt_b = (a > b)? 1'b1 : 1'b0;
endmodule
0ҥFK so sánh OӟQ KѫQ:
Khi a > b thì cho ra giá WUӏ 1,
QӃX không thì cho ra giá WUӏ 0.
Trang 5Comparator ( PҥFK so sánh)
Equal
8
8
1
module Equal(a, b, a_eq_b);
input [7:0] a, b;
output a_eq_b;
assign a_eq_b = (a == b);
endmodule
0ҥFK so sánh EҵQJ
Khi a = b thì cho ra giá WUӏ 1,
QӃX không thì cho ra giá WUӏ 0.
Trang 62009 ĈɴQJBá KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1
ROM
SKӓQJ QKѭ WKӃ nào?
6
Input là ÿӏD FKӍ các ô QKӟ
Output là giá WUӏ OѭX trong
ô QKӟ ÿy
ROM
addr data
/ұS EҧQJ WѭѫQJ quan
JLӳD addr và data
Mô SKӓQJ:
Dùng OӋQK gì ÿӇ mô
SKӓQJ?
Trang 7&KѭѫQJ trình
module ROM(addr, data);
input [3:0] addr;
output [7:0] data;
assign data = romOut(addr);
function [7:0] romOut;
input [3:0] addr;
case (addr)
0: romOut = 0;
1: romOut = 1;
««««««
14: romOut = 196;
15: romOut = 225;
endcase endfunction
endmodule
Macro Statistics
# ROMs : 1 16x8-bit ROM : 1
Trang 80ҥFK WXҫQ Wӵ
0ҥFK WXҫQ Wӵ là ORҥL PҥFK ÿLӋQ Wӱ Vӕ mà
tín KLӋX ÿҫX ra WҥL WKӡL ÿLӇP WӟL FKҷQJ
QKӳQJ SKө WKXӝF vào Wә KӧS giá WUӏ ELӃQ
vào WҥL WKӡL ÿLӇP KLӋQ WҥL mà còn SKө WKXӝF vào tín KLӋX ÿҫX ra hiên WҥL.
8
Trang 9D Flip-flop
D Flip-flop là gì?
D flip-flop
D
Clk
Q
Clock D Q Qprev Rising edge 0 0 X Rising edge 1 1 X
%ҧQJ công tác FӫD D
Flip-flop ORҥL rising edge (thay
ÿәL WUҥQJ thái khi clock
FKX\ӇQ Wӯ 0 sang 1)
Trang 102009 ĈɴQJBá KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1
Module D_FlipFlop
10
module D_FlipFlop(clk, D, Q);
input clk, D;
output Q;
reg Q;
always @(posedge clk)
begin
Q <= D;
end
endmodule
3KҫQ PӅP QKұQ ra
ÿk\ là Flip-flop NLӇX D
Trang 11D Flip-flop có set , reset
Khi tín KLӋX set Wӯ 1 thành
0 thì Q EҵQJ 1
Khi tín KLӋX reset Wӯ 1
thành 0 thì Q EҵQJ 0
%ҧQJ công tác
D flip-flop RS
D
Clk
Q
Set
Reset
Clock Set Reset D Q Qprev Rising edge 1 1 0 0 X
Rising edge 1 1 1 1 X
Non-Rising 1 1 X Qprev
Trang 122009 ĈɴQJBá KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1
12
module D_FlipFlopWithSR(clk, set, reset, D, Q);
input clk, set, reset, D;
output Q;
reg Q;
always @(posedge clk or negedge set or negedge reset)
begin
if(reset == 0)
Q <= 0;
else if(set == 0)
Q <= 1;
else
Q <= D;
end
endmodule
Trang 130ҥFK WҥR ra
3KҫQ PӅP FNJQJ QKұQ ra ÿk\ là Flip-flop
NLӇX D có set (prepare) và reset (clear)
Trang 142009 ĈɴQJBá KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1
JK Flip-flop có set , reset
Khi tín KLӋX set Wӯ 1 thành
0 thì Q EҵQJ 1
Khi tín KLӋX reset Wӯ 1
thành 0 thì A EҵQJ 0
14
%ҧQJ công tác
JK flip-flop RS
J
Clk
Q
Set
Reset
K
1 1 not Q
Trang 15Module JK_FlipFlopWithSR
module JK_FlipFlopWithSR(clk, set, reset, J, K, Q);
input clk, set, reset, J, K;
output Q;
always @(posedge clk or negedge set or negedge reset) begin
if(reset == 0)
Q <= 0;
else if(set == 0)
Q <= 1;
else
case ({J, K})
2'b00: Q <= Q;
2'b01: Q <= 0;
2'b10: Q <= 1;
2'b11: Q <= ~Q;
Trang 162009 ĈɴQJBá KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1
0ҥFK WҥR ra
&KӍ có VҹQ Flip-flop NLӇX D có set (prepare) và
reset (clear) Flip-flop NLӇX JK FҫQ ÿѭӧF Wә
KӧS Wӯ Flip-flop NLӇX D và các FәQJ logic Fѫ
EҧQ khác
16