BÁO CÁO TUẦN 4 ĐỊNH THÌ FLIP-FLOPSetup and Hold time Là khoảng thời gian mà tín hiệu đầu vào của Flip-Flop không được thay đổi.. Vì khi tín hiệu của Flip-Flop thay đổi từ 10 hay từ 01
Trang 1BÁO CÁO TUẦN 4 ĐỊNH THÌ FLIP-FLOP
Setup and Hold time
Là khoảng thời gian mà tín hiệu đầu vào của Flip-Flop không được thay đổi
Vì khi tín hiệu của Flip-Flop thay đổi từ 10 hay từ 01 thì trong lúc thay đổi sẽ điqua vùng không xác định giữa 1 và 0 Nếu đúng lúc này xuất hiện cạnh xung
“Clock” thì đầu vào được “bắt” là không xác định Lúc này ngõ ra Flip-Flop rơi vào trạng thái không xác định (gọi là metastable)
Nguyên nhân dẫn đến vi phạm setup và hold time là do tín hiệu ngõ vào trên đường truyền bị suy hao và rơi vào vùng không xác định là mức 0 hay mức 1 không phải là nguyên nhân chính yếu ???
Setup time : là khoảng thời gian cần thiết mà tín hiệu đầu vào ổn định trước
khi xuất hiện xung “Clock”
Hold time : là thời gian cần thiết mà tín hiệu đầu vào vẫn không đổi sau khi
có xung “Clock”
Metastable : Nếu vị phạm setup time và hold time thì trạng thái metastable
xảy ra Ngõ ra của Flip-Flop trong trạng thái không xác định ( không biết là mức 0hay mức 1), nhưng trạng thái này chỉ xuất hiện một thời gian và sau đó sẽ đạt mức
ổn định Có nghĩa là sau một thời gian “undefined” thì sẽ “settles-down” về 0 hay
1 Và yếu tố về 0 hay về 1 là ngẫu nhiên và không biết trước được Và thời gian xảy ra “metastable” kéo dài bao lâu là do công nghệ của nhà sản xuất ra Flip-Flop
Trang 2Như vậy, để tránh trường hợp này xảy ra khi thiết kế mạch số ta cần phải lưu
ý đến vấn đề thời gian (định thời ???) Ta xét ví dụ sau:
• Vi phạm Setup Time:
Tc: chu kì xung clock
tpcq: thời gian từ khi xung clock đưa tín hiệu ngõ vào đến ngõ ra
tpd : thời gian tính toán mạch combination logic
tskew: thời gian tín hiệu clock nằm trong vùng không xác định khi chuyển từ 0lên 1
Như vậy, nếu không muốn vi phạm setup time thì ta phải tính toán thời gian tpcq sao cho sau khi ổn định không rơi vào vùng tsetup
Trang 4• Ghép nối tiếp hai Flip-Flop với nhau :
Dựa vào đặc tính của metastable là ngõ ra Q sẽ không ổn định Sau một thời gian thì trạng thái metastable sẽ mất và lúc này ngõ ra Q sẽ giữ ổn định ở mức 0 hay mức 1 Do đó, đối với Flip-Flop thứ hai thì ngõ vào gần như là ổn định
o Nếu trong trường hợp xấu nhất xảy ra Có nghĩa là delay của Clock từ FF1 đến FF2 bằng với delay để chuyển tín hiệu không xác định từ ngõvào FF1 đến ngõ ra FF1 thì FF2 cũng bắt được tín hiệu không xác định
o Như vậy, ghép thêm 1 Flip-Flop nối tiếp nữa là sẽ an toàn hơn khi sử dụng phương pháp này
• Điều chỉnh vị trí thanh ghi hoặc chèn clock gate:
Việc sử dụng điều chỉnh vị trí thanh ghi hoặc chèn clock gate cũng có thể tránh được những vi phạm về setup time và hold time nhưng một số vi phạm về các vấn
Trang 5đề timing khác sẽ xảy ra như (không đồng bộ được đường Clock của tất cả các Flip-Flop) nên không khuyến dụng cách này.
MÃ GRAY
Đối với các chuỗi số tăng tuần tự, việc chuyển giữa các trạng thái trong hệ đếm nhị phân có thể làm thay đổi nhiều bit từ 0 sang 1 và ngược lại Ví dụ, có 3 bitthay đổi khi chuyển từ 0011 đến 0100 Trong các hệ thống thực tế, không có cách nào đảm bảo rằng 3 bit này sẽ chuyển đổi cùng lúc với nhau, vì vậy hệ thống có thể
đi qua một số trạng thái tạm thời không ổn định trước khi chuyển đến giá trị cuối cùng Để tránh vấn đề này người ta dùng mã Gray, trong hệ thống mã này việc chuyển giữa các giá trị lân cận nhau sẽ chỉ thay đổi giá trị của 1 bit duy nhất
Dựa vào đặc tính như vậy, mã Gray được sử dụng rất hiệu quả để rút gọn hàm logic tới mức tối giản hoặc dùng để tối thiểu hóa sai số
Sơ đồ khối chuyển đổi mã Gray :
endmodule
Trang 7 Cú pháp khai báo parameter :
parameter < signed > <range> name_1 = const_1
• signed : từ khóa cho biết parameter được khai báo kiểu có dấu hay không dấu
• range : dùng để khai báo độ rộng của parameter
• name_1 : tên của parameter cần khai báo
• const_1 : là giá trị của các parameter
Trang 8defparam reg2 SIZE = 4;// xảy ra lỗi
Như vậy, ta có thể sử dụng defparam để thay đổi giá trị parameter “SIZE” trong module con là “register” Đây cũng là lợi điểm khi sử dụng defparam là nó
cho phép thay đổi giá trị của parameter của bất kì module nào có cấp độ thấp hơn
mà không cần phải ở cấp liền kề
Nhưng một khuyết điểm xảy ra khi thực hiện việc gọi defparam là : nếu một thiết kế lớn với số lượng dòng code lớn thì việc dùng defparam để thay đổi
Trang 9giá trị parameter các module con là khó kiểm soát Vì thay đổi nhiều lần module con cùng lúc làm cho chức năng sai lệch đi.
o Truyền trực tiếp giá trị cho parameter :
CASE, CASEZ, CASEX
Cả ba loại của phát biểu trên đều có cú pháp hoàn toàn giống nhau, chỉ có
một điểm khác biệt duy nhất là từ khóa case, casex, casez chỉ khác nhau từ khóa
???
Cách sử dụng phát biểu case, casex và casez
Ta có thể sử dụng giá trị don’t care trong các phát biểu case Trong case, giá trị
x và z (hay ?) thì không được xem là don’t care mà chúng được xem là giá trị không xác định
Trang 10Trong ví dụ này, khi biến “sel” có giá trị là 2’b100 thì nhánh default sẽ được
thực thi Vì trong case không hiểu ? là don’t care.
Nhưng trong casez thì dòng code trên thực thi đúng vì trong casez ? được
hiểu là don’t care Ta xét ví dụ sau :
Lúc này, khi ngõ vào “sel” có giá trị là 3’b101 thì nhánh default được thực
thi Vì trong casez giá trị x không được hiểu là don’t care.
Như vậy, ta rút ra kết luận sau :
• Case : chỉ hiểu giá trị xác định không dùng don’t care
• Casez : hiểu giá trị z và ? là don’t care
• Casex : hiểu giá trị x, z, ? là don’t care
Ví dụ : Sử dụng casex
module Dungcase ( sel, din1,din2,din3,dout);
input din1 ,din2,din3;
input [1:0] sel;
output dout ;
Trang 12Ví dụ : Sử dụng casez
module Dungcase ( sel, din1,din2,din3,dout);
input din1 ,din2,din3;
MÃ HÓA MÁY TRẠNG THÁI
Việc lựa chọn mã hóa trạng thái khác nhau sẽ cho mạch tổng hợp có tài nguyên và tốc độ khác nhau Nhiều loại mã có thể sử dụng để mã hóa trạng thái như one-hot, binary tuần tự, gray…
Trang 13• One-hot Encoding :
Mỗi bit trong thanh ghi trang thái sẽ quy định một trạng thái Chỉ có 1 bit là 1 còn tất cả các bit khác đều mang giá trị 0 Mã hóa One-Hot trong máy biến trạng thái là một kiểu mã hóa tốt Vì thế mã hóa kiểu One-Hot yêu cầu một số lượng lớn Flip-Flop, nó cung cấp một phương pháp đơn giản và dễ sử dụng tạo ra việc tối ưu hóa trong thiết kế máy trạng thái
Mã hóa One-hot là kiểu mã hóa có tốc độ cao nhất, và tốc độ này không phụ thuộc vào số lượng trạng thái mà chỉ phụ thuộc vào việc chuyển đổi giữa các trạng thái
Trong mã hóa kiểu One-Hot thì sẽ làm tăng tối đa số Flip-Flop (mỗi trạng thái
là một Flip-Flop) và làm giảm tối thiểu số cổng logic (làm nhỏ mạch Combination Logic)
Kết quả là khi sử dụng mã hóa One-Hot có thể tối ưu hóa về mặc sử dụng diện tích do các cổng logic được tối giản, do đó có thể tiêu thụ ít điện năng lượng hơn
• Mã hóa nhị phân Binary :
Trong mã hóa máy biến trạng thái bằng mã nhị phân thì ta có quan hệ giữa các biến trạng thái và số lượng trạng thái qua công thức sau:
Mã hóa nhị phân sử dụng ít FlipFlop hơn mã hóa One-Hot Thực chất cho thấy rằng chỉ cần 7 Flip-Flop có thể mã hóa 100 trạng thái trong khi đó mã One-Hot muốn mã hóa 100 trạng thái cần phải dùng tới 100 Flip-Flops
Trang 14Như vậy, khi sử dụng tối thiểu số lượng Flip-Flop thì làm cho mạch tổ hợp (Combination Logic) lớn lên bởi vì cần các mạch logic để giải mã các trạng thái Phương pháp này thích hợp hơn cho việc sử dụng thiết kế các máy trạng thái ít hơn
8 trạng thái
Một nhược điểm của mã hóa nhị phân là khi chuyển trạng thái thì có thể có nhiều hơn 1-bit thay đổi và nó yêu cầu một mạch tổ hợp phức tạp để xác định các trạng thái hiện tại Dẫn đến tình trạng là tiêu tốn năng lượng nhiều hơn
• Gray Code Encoding :
Là kiểu mã hóa mà mỗi trạng thái kề cận nhau chỉ có 1-bit thay đổi mà thôi.Nói cách khác là chỉ có giá trị của một Flip-Flop thay đổi lúc mà các trạng thái thay đổi liên tục
Số flip-flop được xác định như sau:
Số biến trạng thái = số Flip-Flop = log2(số trạng thái)
Có nghĩa là 3-bit mã gray biểu hiện được 8 trang thái và số FF là 3
Mã hóa sử dụng mã Gray là để giảm tiêu tốn về năng lượng khi các trạng thái chuyển đổi nhiều và liên tục và trong trường hợp lý tưởng nghĩa là các trạng thái chuyển đổi theo một thứ tự kề cận nhau (S1->S2->S3->S4…) thì việc sử dụng kiểu mã hóa này là tối ưu và giảm thiểu năng lượng hoạt động của hệ thống một cách tối đa tối ưu theo khía cạnh nào???
Cũng có thể cải thiện hơn nữa để làm giảm diện tích của các mạch tổ hợp (Combination Logic) từ đó tạo nên một lợi ích về năng lượng tiêu thụ
Trang 15CHƯƠNG 3 : MODELING EXAMPLES 3.11 MODELING DECODER
assign DecodeOut [0] = ~( Enable&Abar&Bbar);
assign DecodeOut [1] = ~( Enable&Abar&B );
assign DecodeOut [2] = ~( Enable&A&Bbar);
assign DecodeOut [3] = ~( Enable&A&B);
Decoder2
Decoder3
Trang 16Giải thích dạng sóng:
Khi tín hiệu cho phép “Enable” =0 thì bất chấp ngõ vào A,B là giá trị nào thìngõ ra “DecoderOut” vẫn mang giá trị là 4’b1111
Khi tín hiệu cho phép tích cực mức 1 thì quá trình giải mã được cho phép
Do tín hiệu ngõ ra tích cực mức thấp nên mỗi thời điểm trong 4 trạng thái của “DecoderOut” chỉ có 1 bit 0 xuất hiện mà thôi
3.11.2 BINARY DECODER
module BinaryDecoder (SelectAddress, DecodeOut);
parameter SBITS = 2;
parameter OUT_BITS = 4;
input [SBITS-1:0] SelectAddress;
output [OUT_BITS-1:0] DecodeOut;
reg [OUT_BITS-1:0] DecodeOut;
Trang 17Do ngõ ra tích cực mức cao và không có tín hiệu cho phép “Enable” nên tại mỗi thời điểm lựa chọn địa chỉ “SelectAddress” thì chỉ có một bit ngõ ra tích cực mức cao Ta xem xét bảng trạng thái của bộ giải mã:
Decoder2
Decoder1
Decoder0
Trang 18“DataIn” và 1 kênh ngõ ra “MuxOut”
Tai một thời điểm thì chỉ có dữ liệu của 1 kênh ngõ vào được chọn và đưa đến ngõ ra
Trang 193.12.2 A PARAMETERIZED MULTIPLEXER
module BinaryMultiplexer (DataBus, Select, Enable, Y,
Ybar);
parameter NBITS =2, WORDS=2;
input [NBITS*WORDS-1:0] DataBus;
input [WORDS-1:0] Select;
input Enable ;
output [NBITS-1:0] Y,Ybar;
reg [NBITS-1:0] Y,Ybar;
integer k ;
function [WORDS-1:0] GetWordIndex;
//Get the first index that has value 1
input [WORDS-1:0] DecodedSelect;
Trang 20always @( DataBus or Select or Enable)
begin
Y='bz;
Ybar='bz;
end else
begin
Y='bx;
Ybar='bx;
end endmodule
Giải thích:
RTL trên có chức năng chọn kênh, dữ liệu được chọn là “DataBus” Khi tín hiệu chọn lựa “Select” có giá trị là 00,01,11 thì tín hiệu “DataBus[1:0]” được đưa đến ngõ ra “Y” Khi “Select” là 10 thì “DataBus[2:3]” được đưa đến ngõ ra “Y”
Giải thích dạng sóng :
Trang 21Ta thấy rằng chỉ có thời điểm “Select” mang giá trị là 2’b10 thì
“DataBus[2:3]” mới được đưa đến ngõ ra “Y” Tất cả các lựa chọn còn lại thì ngõ
ra đều là “DataBus[1:0]” Ta xem sơ đồ khối sau :
3.13 MODELING A PARAMETERIZED PARITY GENERATOR
module ParityGenerator (DataIn, OddPar, EvenPar);
parameter N =4;
input [N-1:0] DataIn;
output OddPar , EvenPar;
assign EvenPar = ^DataIn;
assign OddPar =~EvenPar;
endmodule
Giải thích:
Trang 22RTL trên có chức năng tạo ra bit Parity Nếu sử dụng phương pháp kiểm tra chẵn thì sử dụng tín hiệu “EvenPar” làm bit kiểm tra Ngược lại, với phương pháp kiểm tra lẻ ta sử dụng tín hiệu “OddPar” làm bit kiểm tra chẵn.
Giải thích dạng sóng :
Bằng cách kiểm tra số bit 1 của dữ liệu ngõ vào Khi “DataIn” có số bit 1 lẻ thì biến “EvenPar”=1 Khi “DataIn” có số bit 1 là chẵn thì tín hiệu “EvenPar” là 0
3.14 MODELING A THREE-STATE GATE
module ThreeStateGates (ReadState, CpuBus, MainBus);
Trang 23Giải thích :
RTL trên mô tả chức năng của cổng 3 trạng thái, với tín hiệu điều khiển
“ReadState” Khi tín hiệu “ReadState” tích cực mức cao thì ngõ ra “MainBus” bị cách ly với ngõ vào nên ở trạng thái tổng trở cao
Khi “ReadState” tích cực mức thấp thì ngõ vào “CpuBus” được đưa đến ngõ
ra “MainBus”
3.15 A COUNT THREE 1’S MODEL
module Count3Ones (Data, Clock, Reset, SeqFound);
input Data , Clock, Reset;
Trang 24Previous <= 3'b000;
SeqFound <= 1'b0;
end else begin
Previous <= {Previous[1:0],Data};
SeqFound <=
(Previous==PATTERN_SEARCHED_FOR);
end endmodule
Giải thích :
RTL trên có chức năng đếm ba bit 1 liên tiếp nhau Khi dữ liệu vào “Data” là
ba bit 1 liền kề nhau thì ngõ ra “SeqFound” sẽ có giá trị là 1 Ngược lại, toàn bộ giá trị ngõ ra “SeqFound” mang giá trị 0
Ta thấy rằng, do việc gán tín hiệu ngõ ra “SeqFound” dưới tác động của cạnh xuống xung “Clock” nên Flip-Flop đã được tạo ra cho biến này Dẫn đến sự bất lợi là khi đã có liên tiếp ba bit 1 xuất hiện mà ngõ ra vẫn chưa tích cực mà phải đợi đến cạnh xuống “Clock” tiếp theo Ta xét thêm ví dụ sau
module Count3Ones (Data, Clock, Reset, SeqFound);
input Data , Clock, Reset;
Trang 25Previous <= {Previous[1:0],Data};
assign SeqFound = (Previous == PATTERN_SEARCHED_FOR);
endmodule
Giải thích:
Trong ví dụ đưa ra sau đây, ngõ ra “SeqFound” do không được gán dưới tác động của cạnh xuống “Clock” nên ngõ ra không tạo Flip-Flop cho biến
“SeqFound” Lúc này khi ngõ vào “Data” là ba bit 1 liên tiếp nhau thì ngõ ra
“SeqFound” lập tức tích cực mức 1 liền mà không cần đợi đến cạnh xuống “Clock”tiếp theo
3.16 A FACTORIAL MODEL
Trang 26module Factorial (Reset, Start, Clk, Data, Done,
output [7:0] Result, Exponent;
reg [7:0] Result, Exponent;
if ((InLatch>1)&&(!Done)) begin
NextResult=Result*InLatch;
Result<=NextResult;
end end
endmodule
Giải thích:
Trang 27RTL trên có chức năng tính giai thừa với dữ liệu ngõ vào là tín hiệu “Data”
và chỉ tính được tối đa là 15!
Vì dữ liệu ngõ ra “Result” là 8-bit nên không đủ thể hiện giá trị lớn hơn 255
Vì thế nếu kết quả lớn hơn 255 thì Kết quả hiển thị dưới dạng “Result*2Exponent”
Giải thích dạng sóng:
• Dữ liệu ngõ vào “Data”=6
• Kết quả trả về là 180*22=720 tương đương với 6!
3.17 UART MODEL
DIV
module DIV (CK, RESET, TESTN, ENA);
input CK , RESET, TESTN;
Trang 283.17 UART MODEL (RX)
module RX (CK, RESET, ENA, DIN, RD, DR,
DOUT,PERR,FERR,OERR);
input CK , RESET, ENA, DIN, RD;
output DR ;
output [7:0] DOUT;
output PERR , FERR, OERR;
reg DR ;
reg PERR ,FERR,OERR,START;
reg [3:0] CBIT, CSAM;
reg DI , PI;
reg [7:0] SR;
reg [7:0] DOUT;
Trang 30else //((0<=CSAM<8)||(8<CSAM<15))
CSAM<=CSAM+1;
end end endmodule
Giải thích :
Trang 31RTL trên mô tả khối RX trong khối UART Khối RX có chức năng nhận tín hiệu “DNA” từ khối “DIV” báo hiệu quá trình nhận dữ liệu bắt đầu thực hiện.
Chức năng chính của khối RX này là nhận dữ liệu ngõ vào nối tiếp và đưa
dữ liệu ngõ ra song song, kết hợp với một số tín hiệu điều khiển và tín hiệu Parity
Ta phân tích dạng sóng như sau :
• Ở đầu quá trình chuyển đổi dữ liệu, tín hiệu “RESET” tác động để thiết lập giá trị ban đầu cho các tín hiệu điều khiển và các tín hiệu nhận dữ liệu từ
“DIN”
• Tại 110ns, tín hiệu “START”=1 báo hiệu quá trình nhận dữ liệu bắt đầu
“CSAM” bắt đầu tăng
• Khi “CSAM”=8 thì dữ liệu vào “DIN” được lưu giữ trong thanh ghi “DI”
• Khi “CSAM”=15 thì bắt đầu tăng giá trị của CBIT
Trang 32• Khi “CSAM”=15 thì “CBIT” tăng một đơn vị và “CSAM” được trả về 0.
• Ta xét “CSAM” từ 18 Lúc này, mỗi bit dữ liệu “DIN” được đưa từ từ vào thanh ghi “SR” Đến khi “CBIT”=9 thì chuỗi 8-bit dữ liệu ngõ vào nối tiếp được đưa vào thanh ghi “SR”
• Việc này được thực hiện bằng cách dịch phải dữ liệu “DIN” vào thanh ghi
bị quá trình nhận dữ liệu tiếp theo
• Đến thời điểm này đã kết thúc việc chuyển 8-bit dữ liệu ngõ vào nối tiếp thành 8-bit dữ liệu ngõ ra song song
• Tiếp tục chờ tín hiệu “ENA” để thực hiện tiếp việc nhận dữ liệu từ “DIN” Trong mô phỏng trên giả sử tín hiệu “ENA” luôn tích cực Nhận dữ liệu liên tục
3.18 A BLACKJACK MODEL
module Blackjack (CardValue, Clock, InsertCard,
NewGame, TotalPoints, Won, Lost);
input [3:0] CardValue;
input Clock , InsertCard, NewGame;
output [5:0] TotalPoints;
output Won , Lost;
reg Won , Lost;