Trong chỉ định trễ t là khoảng thời gi n trải qu trƣ c khi một lệnh đƣợc thực thi và b n trái lệnh gán đƣợc tạo r . V i nhiều chỉ định trễ (intr - ssignment del y), b n phải đƣợc định giá trị trực
tiếp nhƣng c một del y củ t trƣ c khi kết quả đƣợc đặt b n trái lệnh gán. Nếu th m một quá trình th y đổi nữ cạnh b n phải tín hiệu trong khoảng thơi gi n t,thì khơng cho kết quả ở ngõ r . Del y không đƣợc hỗ trợ bởi các công cụ.
1. Cú pháp chỉ định thủ tục: Biến = biểu thức; Chỉ dịnh trễ: #t biến = biểu thức; intra_assignment delay: biến = #t biểu thức. III. Chỉ định khối:
Chỉ định khối (=) thực hiện li n tục trong thứ tự lệnh đã đƣợc viết. Chỉ định thứ h i không đƣợc thực thi nếu nhƣ chỉ định đầu cho hoàn thành.
1. Cú pháp:
Biến = biểu thức; Biến = #t biểu thức; #t biến = biểu thức;
IV. Begin …end:
Lệnh khối begin … end đƣợc dùng để nh m một vài lệnh mà một lệnh cú pháp đƣợc cho phép. B o gồm function, khối lw ys và khối initi l. Những khối này c thể đƣợc tùy ý gọi t n. Và b o gồm kh i báo reg, integer, th m số.
1. Cú pháp: Begin: t n khối
Reg[msb:lsb] d nh sách biến reg; Integer [msb:lsb] danh sách integer; Parameter [msb:lsb] d nh sách th m số;
…các lệnh…
V. Vòng lặp for:
Giống nhƣ c/c++ đƣợc dùng để thực hiện nhiều lần một lệnh hoặc khối lệnh.Nếu trong vịng lặp chỉ chứ một lệnh thì khối begin … end c thể bỏ qu .
1. Cú pháp:
For (biến đếm = giá trị 1; biến đếm </ <=/ >/ >= giá trị 2;
biến đếm = biến đếm +/- giá trị)
begin
… lệnh …
end
VI. Vòng lặp while:
Vòng lặp while thực hiện nhiều lần một lệnh hoặc khối lệnh cho đến khi biểu thức trong lệnh while định giá là s i.
1. Cú pháp:
While (biểu thức) Begin
… các lệnh…
End
VII. Khối lệnh if… else if… else:
Thực hiện một lệnh hoặc một khối lệnh phụ thuộc vào kết quả củ biểu thức theo s u mệnh đề if.
Cú pháp If (biểu thức) Begin … các lệnh… end else if (biểu thức) Begin … các lệnh… end else Begin … các lệnh…
end
VIII. Case:
Lệnh c se cho phép lự chọn trƣờng hợp. Các lệng trong khối def ult thực thi khi không c trƣờng hợp lự chọn so sánh giống nh u. Nếu không c sự so sánh, b o gồm cả def ult, là đúng, sự tổng hợp sẽ tạo r chốt không mong muốn.
1. Cú pháp: Case (biểu thức) Case 1: Begin … các lệnh… end Case 2: Begin … các lệnh… end Case 3: Begin … các lệnh… end … default: begin … các lệnh… end endcase X. Ố LW YS VÀ Ố N T L I. Khối always:
Là cấu trúc chín trong khn mẫu RTL (Register Transfer Level). Giống chỉ định li n tục, đây là trạng thái tồn tại mà đƣợc thực thi li n tục trong khi mô phỏng. Cái này cũng c nghĩ là tất cả các khối lw ys trong một module thực thi một cách li n tục. Khối
lw ys c thể đƣợc dùng trong chốt, flip flop h y các kết nối logic. Nếu các lệnh củ khối lw ys nằm trong phạm vi khối begin… end thì đƣợc thực thi li n tục, nếu nằm trong khối fort… join, chúng đƣợc thực thi đồng thời (chỉ trong mô phỏng). Khối lw ys thực hiện bằng mức, cạnh l n hoặc cạnh xuống củ một h y nhiều tín hiệu (các tín hiệu cách nh u bởi từ kh OR).
Cú pháp:
Always @(sự kiện 1 or sự kiện 2 or…) Begin
… các lệnh…
end
Always @(sự kiện 1 or sự kiện 2 or…) Begin: t n khối
… các lệnh…
End
II. Khối initial
Giống nhƣ khối lw ys nhƣng khối initi l chỉ thực thi một lần từ lúc bắt dầu củ q trình mơ phỏng. Khối này thì ti u biểu để biến khởi chạy và chỉ định dạng s ng tín hiệu trong lúc mơ phỏng.
1. Cú pháp: Initial Begin … các lệnh… End 2. Ví dụ Initial Begin Clr = 0; Clk = 1; End Initial Begin = 2‟b00; #50 = 2‟b01;
#50 = 2‟b10;
End X. HÀM
Hàm đƣợc kh i báo trong phạm vi một module, và c thể đƣợc gọi từ những lệnh li n tục, khối lw ys, hoặc những hàm khác. Trong lệnh chỉ định li n tục, cúng đƣợc chỉ định li n tục khi bất kì các hàm kh i báo ngõ vào th y đổi. Trong chƣơng trinh chúng đƣợc chỉ dịng t i khi cần gọi. Các hàm mô tả sự kết nối logic, và không tạo r chốt. Do đ một lệnh if mà không else se mô phỏng , mặc dù n c chốt dữ liệu nhƣng mơ phỏng thì khơng c . Đây là trƣờng hợp dở củ tổng hợp không c mô phỏng theo s u. Đây là khái niệm tốt để mã h hàm, vì vậy chúng sẽ khơng tạo r chốt nếu mã hàm đƣợc dùng trong một chƣơng trình.
I. Khai báo hàm:
Kh i báo hàm là chỉ r t n hàm, chiều rộng củ hàm giá trị trả về, đối số hàm dữ liệu vào, các biến (reg) dùng trong hàm, và th m số cục bộ củ hàm, số nguy n củ hàm.
1. Cú pháp:
Function [msb:lsb] tên hàm; Input [msb:lsb]biến vào; Reg [msb:lsb]biến reg;
Parameter [msb:lsb] th m số; Integer [msb:lsb] số nguy n;
… các lệnh…
Endfunction
XI. Ứ NĂN L N N
Chốt dữ liệu (l tches): đƣợc suy nếu một biến, một trong các bit không đƣợc gán trong các nhánh củ một lệnh if. Chốt dữ liệu cũng đƣợc suy r từ lệnh c se nếu một biến đƣợc gán chỉ trong một vài nhánh.
Hoàn thiện mã c thể đọc đƣợc dùng lệnh if để tổng hợp chốt vì thật kh để chỉ định rõ ràng. Theo lý thuyết, một sự xác lập hợp lí n n đƣợc suy r từ mã Verilog.
Cú pháp:
If… else if… else và c se.
I. Thanh ghi Edge_triggered, flip_flop, bộ đếm:
Một th nh ghi (flip_flop) đƣợc suy luận bằng việc dùng xung kích cạnh l n
hoặc xuống trong d nh sách sự kiện củ lệnh khối lw ys.
Cú pháp:
Always @(posedge clk or posedge reset1 or nesedge reset2) Begin
If (reset1) begin
Các chỉ định reset
end
else if (reset2) begin
Các chỉ định reset End Else begin Các chỉ định reset End II. Bộ đa cộng:
Đƣợc suy r bởi việc gán một biến mà giá trị mỗi biến khác nh u trong mỏi nhánh củ lệnh if hoặc c se. C thể tránh các chỉ định và mọi nhánh c thể tồn tại bằng việc sử dụng ngoài những nhánh mặc định. Chú ý rằng chốt sẽ đƣợc tạo r nếu một biến không đƣợc gán cho các điều kiện nhánh c thể tồn tại.Để hoàn thiện mã c thể đọc đƣợc, dùng lệnh c se để tạo mẫu đ cộng l n.
III. Bộ cộng, trừ:
Toán tử cộng trừ trong bộ cộng trừ mà c chiều rộng phụ thuộc vào chiều rộg củ toán tử l n hơn.
IV. Bộ đệm 3 trạng thái:
Bộ đệm b trạng thái đƣợc suy r nếu biến đƣợc gán theo điều kiện giá trị tổng trở c o Z dùng một trong các toán tử: if, c se,…
V. Các linh kiện khác:
Hầu hết các cổng logic đƣợc suy r từ việc dùng những toán hạng tƣơng ứng củ chúng. Nhƣ một sự lự chọn một cổng hoặc một thành phần c thể đƣợc giải thích rõ ràng bằng ví dụ cụ thể và sử dụng các cổng cơ sở ( nd, or, nor, inv…) miễn là bằng ngôn ngữ Verilog.
PHẦN 3: MỘT SỐ VÍ DỤ
1.VÍ DỤ 1
a.Chương trình tính NOR các bít của biến vào module vdcong(in,out);
input[3:0] in; output out; assign out= ~|in; endmodule
2.ví dụ
.chuơng trình cơng 2 biến 4 bít
3. ví dụ 3
4. ví dụ 4
5.ví dụ 5
b.mơ phỏng
6.ví dụ 6
7. ví dụ 7
PHẦN 4:THIẾT KẾ SEQUENTIAL LOGIC USING UDP DÙNG VERILOG
//CÁC PHƢƠN P ÁP T T
// ÚN T Ó T Ể DÙN Á P ƢƠN P ÁP S U D LACTH
1 primitive latch_udp(q, clock, data) ; 2 output q; reg q ;
3 input clock, data; Table 4 // clock data q q+ 0 1 : ? : 1 ; 0 0 : ? : 0 ; 1 ? : ? : - ; // - = no change 5 endtable 6 endprimitive D Flip Flop 1 //-------------------------------------- ---------------
2 // Design Name : dff_udp 3 // File Name : dff_udp.v 4 // Function : D Flip Flop
5 // Coder : Deepak Kumar Tala
6 //-------------------------------------- ---------------
7 primitive dff_udp (q,clk,d); 8 input clk,d;
9 output q; 10 reg q; 11 table 12 // clk d : q : q+ 13 r 0 : ? : 0 ; 14 r 1 : ? : 1 ; 15 f ? : ? : - ; 16 ? * : ? : - ; 17 endtable 18 endprimitive SR Flip Flop 1 primitive srff_udp (q,s,r); 2 output q; 3 input s,r; 4 5 reg q; 6 7 initial q = 1'b1; 8 9 table 10 // s r q q+ 11 1 0 : ? : 1 ; 12 f 0 : 1 : - ; 13 0 r : ? : 0 ; 14 0 f : 0 : - ; 15 1 1 : ? : 0 ; 16 endtable 17 18 endprimitive
JK Flip Flop
1 //-------------------------------------- ---------------
2 // Design Name : jkff_udp 3 // File Name : jkff_udp.v
4 // Function : JK Flip Flop Using UDP 5 // Coder : Deepak Kumar Tala
6 //-------------------------------------- --------------- 7 primitive jkff_udp (q,clk,j,k); 8 input clk,j,k; 9 output q; 10 reg q; 11 table 12 // clk j k : q : q+ 13 r 0 0 : ? : - ; 14 r 0 1 : ? : 0 ; 15 r 1 0 : ? : 1 ; 16 r 1 1 : 0 : 1 ; 17 r 1 1 : 1 : 0 ; 18 f ? ? : ? : - ; 19 ? * ? : ? : - ; 20 ? ? * : ? : - ; 21 endtable 22 endprimitive
ết lu n
Việc giảng dạy phƣơng pháp thiết kế sử dụng Verilog là rất cần thiết đối v i sinh vi n điện tử viễn thông - công nghệ thông tin. Đối v i sinh vi n thì việc triển kh i nghi n cứu và ứng dụng củ Verilog đã trình bày ở tr n quả thực rất c ý nghĩ . Hiệu quả củ vấn đề không phải chỉ là nắm bắt đƣợc những tiến bộ m i củ kho học n i chung, công nghệ chế tạo phần cứng n i ri ng mà chính Verilog sẽ là một phƣơng thức hỗ trợ giảng dạy thật hữu hiệu, n sẽ giúp cho các môn học vi xử lý, kiến trúc máy tính, trở n n b t trìu tƣợng hơn. Hiện n y Verilog đã và đ ng đƣợc sử dụng rất phổ biến trong các phịng thực hành thí nghiệm Điện tử-Viễn thông ở các trƣờng đại học tr n thế gi i, và đ ng đƣợc nhiều công ty điện tử - viễn thông - tin học sử dụng để thiết kế, phát triển các sản phẩm củ mình.. Các mơn học phƣơng pháp thiết kế sử dụng Verilog sẽ tr ng bị cho sinh vi n một phƣơng pháp thiết kế các hệ thống số ti n tiến từ đ sinh vi n c thể phân tích và thiết kế đƣợc các thiết bị, hệ thống điện tử số ứng dụng trong ngành điện tử - viễn thông c hiệu quả c o. Do thời làm bài tập c hạn và những hạn chế không tránh khỏi củ việc hiểu biết các vấn đề dự tr n lý thuyết là chính n n bài tập củ nh m em chắc chắn không tránh khỏi những thiếu s t. Chung em rất mong c đƣợc những ý kiến đánh giá, g p ý củ các thầy và các bạn để bài tập củ chúng em th m hoàn thiện.
S u thời gi n làm bài tập. Chúng em đã rút r đƣợc rất nhiều kinh nghiệm cho bản thân, đ cũng là nhờ vào sự chỉ dậy nhiệt tình củ các thầy cơ và sự giúp đỡ củ các bạn.
Chúng em xin chân thành cảm ơn !
T i liệu tham khảo
1.Verilog Digital System Design 2.Introduction of Verilog
3.Cadence Verilog –XL Reference Manual
4.Synopsys HDL Compiler for Verilog Reference Manual 5.Diglad 10k10 Mannual 6.www.Syncad .com 7.TimingTool.com 8.www.maia-eda.net 9.http://tailieu.vn/xem-tai-lieu/tom-tat-bai-giang-verilog.174162.html 10. http:// www.eej.ulst.ac.uk/guide/guide.html 11. http:// www.eej.ulst.ac.uk/guide/syntax.html 12. http:// www.eej.ulst.ac.uk/tutor/Vhdnotes.html 13. VHDL : Active Tutorial ALDEC Cooperation 14.http:// www.xilinx.com