7KLӃW NӃ IC trên FPGA (Field-Programmable Gate Array ) ĈһQJBá .KҳF 7ULӅX *LҧQJ viên Khoa CNTT 7UѭӡQJ Ĉ+%.Ĉj 1ҹQJ 1 2009 Ĉɴ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 2009 ĈɴQJBá .KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1 Multiplier, 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 # OBUF : 8 3 Multiplier 4 4 8 2009 Ĉɴ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. 2009 ĈɴQJBá .KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1 Comparator (PҥFK so sánh) 5 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. 2009 ĈɴQJBá .KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1 ROM %ӝ QKӟ ROM ÿѭӧF mô SKӓQJ QKѭ WKӃ nào? 6 Input là ÿӏD FKӍ các ô QKӟ Output là giá WUӏ OѭX trong ô QKӟ ÿy ROM 4 8 addr data /ұS EҧQJ WѭѫQJ quan JLӳD addr và data Mô SKӓQJ: Dùng OӋQK gì ÿӇ mô SKӓQJ? addr data 00 11 24 39 14 196 15 225 2009 ĈɴQJBá .KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1 &KѭѫQJ trình 7 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 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ӋX ÿҫX ra hiên WҥL. 8 2009 ĈɴQJBá .KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%.Ĉ1 D Flip-flop D Flip-flop là gì? 9 D flip-flop D Clk Q Clock D Q Qprev Rising edge 0 0 X Rising edge 1 1 X Non-Rising X Qprev %ҧ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) 2009 Ĉɴ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 [...]...D Flip-flop có set, reset Khi tín set 1 thành 0 thì Q 1 D Khi tín reset 1 thành 0 thì Q 0 Clk công tác Set D flip-flop RS Q Reset Clock Rising edge Rising edge Non-Rising X X 2009 Set Reset D Q Qprev 1 1 0 0 X 1 1 1 1 X 1 1 X Qprev 0 1 X 1 X 1 0 X 0 X Bá , GV khoa CNTT, 11 Module D_FlipFlopWithSR module D_FlipFlopWithSR(clk, set, reset, D,... == 0) Q . 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 X01X1X X10X0X 2009 ĈɴQJBá .KɬF 7ULɾX, GV khoa CNTT, WUɉ͝QJ Ĉ+%. 1 Module. addr; case (addr) 0: romOut = 0; 1: romOut = 1; «««««« 14 : romOut = 19 6; 15 : romOut = 225; endcase endfunction endmodule Macro Statistics # ROMs : 1 16x8-bit ROM : 1 0ҥFK WXҫQ Wӵ 0ҥFK WXҫQ Wӵ là. Ĉ+%. 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 JKQ 00Q 010 10 1 1