Thiết kế và tổng hợp hệ thống số-Bài Giảng

November 27, 2017 | Author: Nam Ha Van | Category: N/A
Share Embed Donate


Short Description

Download Thiết kế và tổng hợp hệ thống số-Bài Giảng...

Description

Thiết kế và tổng hợp hệ thống số 2012 (C) [email protected] (www.edabk.org) ddas.edabk.org

1 Chương 1: Giới thiệu thiết kế mạch số 1.1 1.1 Các khái niệm cơ bản trong thiết kế mạch số 1.1.1 1.1.1 Định nghĩa: mạch điện tử là một hệ thống gồm các linh kiện điện tử biến đổi tín hiệu (dòng điện, điện áp) đầu vào thành tín hiệu đầu ra 1.1.1.1 Để mô tả mạch điện tử: cần mô tả tín hiệu đầu vào, tín hiệu đầu ra, và hàm truyền đạt của mạch 1.1.2 1.1.2 Phân loại 1.1.2.1 Mạch tương tự 1.1.2.2 Mạch số 

Tín hiệu vào/ra chỉ có 2 mức thấp và mức cao



Mức 0,1



Mạch số tổ hợp



Hàm truyền đạt chỉ phụ thuộc vào đầu vào



Mạch số tuần tự (Mạch dãy)



Hàm truyền đạt phụ thuộc vào đầu vào và trạng thái hiện tại của mạch



Mạch đồng bộ 



Trạng thái của mạch được lưu vào Flip Flop theo một tín hiệu nhịp (tín hiệu đồng hồ)

Mạch không đồng bộ 

Trạng thái và hoạt động của mạch không theo đồng hồ

1.1.3 1.1.3. Đại số Bool và logic tổ hợp 1.1.3.1 Biến Bool 

Biến đơn



a,b,x,y nhận các giá trị 0,1



Biến vector



a[3:0] nhận các giá trị {0,1}^4 1.1.3.2 Hàm Bool



Nhiều đầu vào, một đầu ra: MISO



Nhiều đầu vào, nhiều đầu ra: MIMO



Biểu diễn hàm Bool



Biểu thức Bool gồm 

Các biến Bool



Các phép toán Bool 



AND, OR, NOT, XOR

Bảng chân lý 

Liệt kê tất cả các tổ hợp giá trị của các biến đầu vào



Liệt kê các giá trị hàm tương ứng



Là cách biểu diễn duy nhất



Kích thước rất lớn ~ hàm mũ của số biến



Bảng chân lý rút gọn





Kích thước nhỏ hơn



Không là duy nhất

Chỉ có thể dùng cho các mạch đơn giản, ít đầu vào



Tối ưu hàm Bool



Dùng cách tối giản bìa Karnaugh  http://en.wikipedia.org/wiki/Karnaugh_map See document(s): Karnaugh_map



Dùng phương pháp Quine-McCluskey  http://en.wikipedia.org/wiki/Quine%E2%80%93McCluskey_algorithm See document(s): Quine%E2%80%93McCluskey_algorithm



Triển khai hàm Bool bằng mạch logic tổ hợp



Gồm các cổng logic căn bản kết nối với nhau để tạo thành hàm truyền đạt



Kích thước ~ tuyến tính với số phép toán dùng trong hàm truyền đạt



1.1.3.3 Ví dụ: 

Bộ giải mã 7 thanh



Bộ cộng 1.1.4 1.1.4. Máy trạng thái hữu hạn FSM 1.1.4.1 Hàm truyền đạt



Hàm trạng thái kế tiếp Delta



s' = delta(x,s) 

s' trạng thái tiếp theo của mạch



s trạng thái hiện tại của mạch



x là đầu vào của mạch



Hàm đầu ra Lambda



Mealy: y = lambda(x,s)



More: y = lambda(s) 1.1.4.2 Biểu diễn FSM



Đồ thị chuyển trạng thái



Node: các trạng thái 

Được dán nhãn là mã trạng thái tương ứng



Cạnh: chuyển trạng thái được dán nhãn là giá trị đầu vào tương ứng



Kích thước ~ số trạng thái ~ hàm mũ của số biến trạng thái



Bảng chuyển trạng thái và bảng đầu ra 1.1.4.3 Tối ưu FSM



Giảm số lượng trạng thái



Tìm các trạng thái tương đương



Mã hóa trạng thái



Mã one-hot, zero-hot, binary, gray 1.1.4.4 Triển khai FSM-Mạch dãy

 Mã hóa các trạng thái, các ký hiệu vào và các ký hiệu ra bằng các biến Bool trạng thái, tín hiệu vào và tín hiệu ra, tương ứng 

Xác định hàm Bool cho trạng thái kế tiếp và cho đầu ra



Mạch tổ hợp trạng thái kế tiếp



Các Flip Flop



Mạch tổ hợp ra



1.1.4.5 Ví dụ 

Bộ đếm



Bộ điều khiển đèn giao thông



Bộ điều khiển thang máy



Bộ điều khiển giao thức RS232, Bluetooth 1.1.5 1.1.5. Các phần tử phần cứng cơ bản 1.1.5.1 Transitor FET



1.1.5.2 Cổng logic cơ bản 

1.1.5.3 Gate Netlist: mạng cổng 

1.1.5.4 Standard Cell





Cell: Phần tử logic cơ bản, các khối chức năng cơ bản RAM, ROM...



Cấu trúc mô tả quy trình sản xuất



Chức năng logic



Mô hình tính thời gian



IC được chia làm các hàng và cột



Mỗi phần tử đặt một phần tử logic cơ bản: Cổng logic, RAM, ...



Các cell được kết nối thông qua dây kim loại 1.1.5.5 FPGA



Phần cứng có thể tái cấu hình: reconfigurable



Khối cơ bản LUT, LE: gồm bộ chọn MUX và SRAM



Bộ nhớ lưu bảng chân lý của hảm



Triển khai hàm logic



Giá trị bộ nhớ dùng điều khiển bộ MUX



Các khối được nối bằng đường dây có thể lập trình



1.2 1.2. Giới thiệu về HDL 1.2.1 1.2.1. Ngôn ngữ mô tả phần cứng (Hardware Description Language) 1.2.1.1 Mục đích 

Mô hình và mô phỏng (có thời gian) thiết kế số



Có thể tổng hợp thành mạch bằng các công cụ tổng hợp



Synopsys Design Compiler



Altera Quatus



Xilinx ISE



Cadence 1.2.1.2 Phân loại



Verilog



Mềm dẻo



Sử dụng nhiều trong công nghiệp



VHDL



Sử dụng trong quốc phòng và thiết kế ô tô



Hướng kiểu mạnh 1.2.1.3 Ưu điểm của HDL



Cho phép thiết kế mạch rất lớn



Trừu tượng hơn sơ đồ mạch 

Mô tả ở mức RTL-dịch chuyển thanh ghi



Sử dụng bit vector thay vì các bit đơn



Quá trình tổng hợp tự động sử dụng phần mềm EDA



Thiết kế có thể chuyển đổi

 Thiết kế Verilog mô tả hành vi hoặc dòng dữ liệu có thể tổng hợp thành mạch dùng công nghệ chế tạo mới với ít công sức (VD. Từ 0.13um sang 45nm)  Verilog ở dạng text, dễ dàng chuyển đổi giữa các chương trình khác nhau không như định dạng nhị phân dùng riêng cho các chương trình vẽ mạch 

Cho phép thử nghiệm, lựa chọn nhiều giải pháp thiết kế hơn

 Các tùy chọn tổng hợp cho phép tối ưu và cân bằng các tham số về năng lượng, thời gian, kích thước 

Cho phép kiểm nghiệm thiết kế tốt hơn



Dùng Verilog để mô hình hóa môi trường hoạt động của mạch (testbench)



Phần mềm tổng hợp hoạt động tốt đảm bảo tính đúng đắn của hàm Bool được triển khai 1.2.1.4 Chú ý



Trông giống ngôn ngữ lập trình



Không phải ngôn ngữ lập trình



Luôn phải nhớ rằng đang mô tả phần cứng



Mã được dùng để tổng hợp ra phần cứng



Mã có thể được mô phỏng trên máy tính, chỉ là mục đích thứ 2 1.2.2 1.2.2. Ví dụ và các khái niệm ngôn ngữ cơ bản 1.2.2.1 module decoder_2_to_4 (A, D) ; input [1:0] A ; output [3:0] D ; assign D = (A == 2'b00) ? 4'b0001 : (A == 2'b01) ? 4'b0010 : (A == 2'b10) ? 4'b0100 : (A == 2'b11) ? 4'b1000 ; assign D[0] = (~A[1])*(~A[2]); endmodule



1.2.2.2 Một mạch điện là 1 module, được mô tả gồm các thành phần 

Khai báo module



Tên 



decoder_2_to_4

Đầu vào, đầu ra 

Ports



A, D



Khai báo tín hiệu kết nối với đầu vào đầu ra



Kiểu port





Input



Output



Inout

Kích thước port 

vô hương (đơn)



vector 

[MSB:LSB]



Khai báo tín hiệu bên trong



Mô tả hoạt động của module

 assign D = (A == 2'b00) ? 4'b0001 : (A == 2'b01) ? 4'b0010 : 2'b10) ? 4'b0100 : (A == 2'b11) ? 4'b1000 ;

(A ==

1.2.3 1.2.3. Giới thiệu về phần mềm Quartus 1.2.3.1 http://www.youtube.com/watch?v=PDOTLuuKgqE See document(s): watch 1.2.3.2 http://www.youtube.com/watch?v=PDOTLuuKgqE See document(s): watch

1.2.4 1.2.4. Khái niệm mô phỏng và tổng hợp 1.2.4.1 Mô phỏng  Đưa tác động đầu vào (input stimuli) và quan sát so sánh đầu ra với đầu ra chuẩn (output reference) 

Hình vẽ





Kiểm tra mạch chiếm 90% công sức, giá thành làm ra mạch 1.2.4.2 Tổng hợp



Từ mô tả hoạt động mạch tạo ra phần cứng thực hiện hoạt động đó



Hình vẽ





Chú ý

 cứng

Khác với chạy chương trình phần mềm tất cả các câu lệnh đều được tổng hợp thành phần



Học đề biết các câu lệnh Verilog HDL được chuyển thành phần cứng thế nào



Hình vẽ



1.3 1.3. Lưu đồ thiết kế hệ thống số dùng ngôn ngữ mô tả phần cứng 1.3.1 Hình vẽ

1.3.1.1

1.3.2 Chia làm 2 công đoạn chính 1.3.2.1 Front-end 

Thiết kế ở mức hoạt động, mức logic



B1. Xác định các tham số kỹ thuật của mạch



Hiệu năng





Tần số hoạt động



Thông lượng dữ liệu (Data throughput)

Chức năng logic của mạch 



Ví dụ: Thực hiện phép cộng, thực hiện phép biến đổi FFT

B2. Phân tích chức năng và chia thành các khối chức năng nhỏ (thiết kế sơ đồ khối)



B3. Mô tả hoạt động các khối chức năng bằng ngôn ngữ HDL



Kiểm tra mô phỏng từng khối chức năng



Kiểm chứng toán học các khối chức năng



B4. Ghép nối các khối chức năng thành toàn bộ hệ thổng



Kiểm tra mô phỏng toàn bộ hệ thống



B5. Tổng hợp mạch từ mức HDL thành mức cổng



Kiểm tra các yêu cầu thời gian của mạch



Kiểm chứng sự tương đương của mạch ở mức cổng và mức HDL 1.3.2.2 Back-end



Thiết kế ở mức vật lý

1.4 1.4. Ứng dụng và ví dụ về thiết kế số 1.4.1 Thiết kế bộ xử lý MIPS pipelined 1.4.1.1 Chức năng 

Thực hiện các chương trình assembly theo kiến trúc tập lệnh MIPS



add, sub, addi



beq, bne



j



lw, sw



Pipeline 5 trạng thái



Chương trình được lưu trong bộ nhớ chương trình (bộ nhớ lệnh)



Dữ liệu lưu trong bộ nhớ dữ liệu 1.4.2 Thiết kế bộ truyền nhận số QAM16 1.4.2.1 Chức năng



Điều chế



Đầu vào: Dòng số 1 bit



Đầu ra: Dòng tín hiệu I/Q điều chế theo phương pháp QAM



Giải điều chế



Đầu vào: Dòng tín hiệu I/Q điều chế theo phương pháp QAM



Đầu ra: Dòng số 1 bit



Tùy chọn



Dòng tín hiệu I/Q cần được nhân với tín hiệu sóng mang



Tín hiệu sóng mang có thể được biến đổi thành tương tự bằng bộ DAC



Tín hiệu thu được tương tự được biến đổi thành số dùng ADC



Tin hiệu số thu được cần được đồng bộ và nhân với sóng mang sau đó giải điều chế

2 Chương 2. Các khái niệm cơ bản trong thiết kế số (ôn lại). Tham khảo: Digital Design and Computer Architecture 2.1 2.1 Mạch logic tổ hợp 2.1.1 2.1.1 Đại số Bool 2.1.1.1 Biểu thức và hàm Bool 

Biểu thức tổng các tích



sum of product 



DNF

sum of minterm 

canonical form



Biểu thức tích các tổng



product of sum 



product of maxterm 



CNF

canonical form

Tham khảo



Mục 2.2 2.1.1.2 Phép toán và phép biến đổi Bool



And, or, not, xor



Tiên đề trong đại số Bool





Các quy tắc/định lý trong đại số bool



Quy tắc AND/OR với 1/0



Luật giao hoán, kết hợp, phân phối



Biến đổi Demorgan



Định lý với 1 biến 



Định lý nhiều biến





Sử dụng phép biến đổi Bool để tối giản biểu thức Bool 2.1.2 2.1.2 Triển khai hàm Bool 2.1.2.1 Các cổng logic cơ bản



Tham khảo



Mục 1.5 sách đã nêu



Not





Buffer





And





Or





XOR, NAND, NOR, XNOR





2.1.2.2 Từ biểu thức Bool đến mạch logic 

Tham khảo



Mục 2.4



Schematic, Gate-Net list



Gồm các cổng logic và các dây dẫn nối các cổng logic





Cổng logic: các node trong đồ thị



Dây dẫn: các cạnh có hướng trong đồ thị



Input: các node không có node phía trước



Output: các node không có node phía sau



Fanout: Các node nối vào cạnh đi ra khỏi một node



Fanin: Các node nối vào các cạnh đi vào node

Ví dụ





Mạch logic nhiểu mức



Tham khảo 

Mục 2.5

2.1.3 2.1.3 Tối ưu hàm Bool bằng bìa Karnaugh 2.1.3.1 Tham khảo 

Mục 2.6



Mục 2.7 2.1.3.2 Ví dụ



2.1.4 2.1.4 Một số hàm Bool và mạch đơn giản 2.1.4.1 Hàm lựa chọn và bộ MUX 

Triển khai bộ MUX 4-1





Hình vẽ bộ MUX 2-1





Sử dụng bộ MUX để thực hiện các hàm logic



2.1.4.2 Hàm giải mã và bộ giải mã 

Bộ Decoder 2:4



2.1.4.3 Tham khảo 

Mục 2.8 2.1.5 2.1.5 Hoạt động của mạch logic 2.1.5.1 Biểu đồ thời gian



Sườn lên: tín hiệu thay đổi từ mức logic thấp lên mức logic cao



Sườn xuống: tín hiệu thay đổi từ mức logic cao xuống mức logic thấp



Điểm 50%: thời điểm tín hiệu thay đổi giá trị được 50%



Hình vẽ



2.1.5.2 Thời gian  Thời gian đáp ứng của 1 cổng logic: Khoảng thời gian từ lúc đầu vào thay đổi đến khi đầu ra thay đổi tương ứng 

Đo từ điểm 50% của tín hiệu vào tới điểm 50% của tín hiệu ra



Độ trễ lan truyền (propagation delay) tpd



Thời gian từ lúc 1 đầu vào thay đổi đến khi đầu ra/các đầu ra đạt tới giá trị cuối cùng



trod = count t pdf ☹ of logic i train koreroing door what



Độ trễ ảnh hưởng (contamination delay) tcd



Thời gian từ khi 1 đầu vào thay đổi đến khi đầu ra bắt đầu thay đổi



tainted ong logic i train origin gain. what



Hình vẽ





Thời gian chuyển đổi (transition time)

 Thời gian tín hiệu chuyển từ trạng thái 1->0 (falling time), và 0->1 (rising time): Đo bằng khoảng cách giữa 2 điểm 10%-90% của tín hiệu 2.1.5.3 Đường tới hạn (đường dài nhất) - critical path và đường ngắn nhất 

Đường dài nhất và chậm nhất trong mạch tổ hợp



Trễ lan truyền tpd là tổng trễ lan truyền của các cổng logic trên đường dài nhất



Trễ ảnh hưởng tcd là tổng các trễ ảnh hưởng của các cổng logic trên đường ngắn nhất



Ví dụ





Hình vẽ



2.1.5.4 Glitches/Hazards  1 sự thay đổi của đầu vào dẫn tới nhiều sự thay đổi ở đầu ra mà không phù hợp/tương ứng với hàm logic 

Hình vẽ





Loại trừ ành hưởng của hazards



Đợi đến khi đầu ra ổn định



Thêm cổng logic kết nối các prime implicants cách nhau





2.1.5.5 Tham khảo 

Mục 2.9

2.2 2.2 Mạch dãy 2.2.1 2.2.1 Các phần tử nhớ cơ bản 2.2.1.1 Cấu trúc 

Phần tử chốt SR







Phần tử chốt D





Thay đổi trạng thái khi CLK = 1 (level sensitive latch)



Phần từ D-Flip Flop



Thay đổi trạng thái khi có sườn lên của CLK



2.2.1.2 Mô tả hoạt động 

Lưu trữ trạng thái



Chuyển đổi trạng thái 2.2.1.3 Mạch hoạt động theo đồng hồ



Tham khảo 3.3

 hồ

Các phần từ nhớ trong mạch thay đổi trạng thái tại các sườn lên (xuống) của tín hiệu đồng



Hình vẽ



2.2.1.4 Tham khảo



Mục 3.2 2.2.1.5 Thực hành



Lab 3

 ftp://ftp.altera.com/up/pub/Altera_Material/11.0/Laboratory_Exercises/Digital_Logic/DE2/ verilog/lab3_Verilog.pdf See document(s): lab3_Verilog.pdf

2.2.2 2.2.2 Máy trạng thái hữu hạn - FSM 2.2.2.1 Hàm Bool biểu diễn FSM 

Hàm chuyển trạng thái



Hàm trạng thái kế tiếp Delta 

s' = delta(x,s) 

s' trạng thái tiếp theo của mạch



s trạng thái hiện tại của mạch



x là đầu vào của mạch



Hàm đầu ra



Hàm đầu ra Lambda 

Mealy: y = lambda(x,s)



Moore: y = lambda(s)

2.2.2.2 Biểu diễn FSM bằng đồ thị chuyển trạng thái STG 

Node: các trạng thái



Được dán nhãn là mã trạng thái tương ứng



Cạnh: chuyển trạng thái được dán nhãn là giá trị đầu vào tương ứng



Kích thước ~ số trạng thái ~ hàm mũ của số biến trạng thái 2.2.2.3 Mã hóa trạng thái bằng biến Bool 2.2.2.4 Biểu diễn hàm chuyển trạng thái bằng bảng chuyển trạng thái 2.2.2.5 Tham khảo



Mục 3.4 2.2.2.6 Thực hành



Lab 4. Phần 1

 ftp://ftp.altera.com/up/pub/Altera_Material/11.0/Laboratory_Exercises/Digital_Logic/DE2/ verilog/lab4_Verilog.pdf See document(s): lab4_Verilog.pdf

2.2.2.7 Máy Moore/Mealy 

2.2.3 2.2.3 Thời gian trong mạch dãy 2.2.3.1 Thời gian trong Flip-Flop 

Setup time và hold time



Khoảng thời gian đầu vào D cần ổn định



Trễ lan truyền từ đồng hồ đến Q: Tpdq



Trễ ảnh hưởng từ đồng hồ đến Q: Tcdq



Hình vẽ



2.2.3.2 Thời gian hệ thống 

Chu kỳ đồng hồ



Khoảng thời gian giữa 2 sườn lên (xuống) của tín hiệu đồng hồ Tc 2.2.3.3 Điều kiện thời gian setup



Đường trễ giữa 2 thanh ghi





Điều kiện về thời gian setup



Hình vẽ







Trong thực tế

 Chu kỳ đồng hồ quyết định bởi khách hàng, thị trường, và giám đốc kỹ thuật để đảm bảo tính cạnh tranh của sản phẩm 

tsetup quyết định bởi nhà sản xuất



cần thiết kế phần mạch logic tổ hợp để thỏa mãn điều kiện thời gian setup 2.2.3.4 Điều kiện thời gian hold



Đầu vào D của FF không được thay đổi đến thold sau sườn lên (xuống) của clock



Hình vẽ





3 Chương 3. Cú pháp cơ bản của ngôn ngữ Verilog Tham khảo ví dụ: http://www.asic-world.com 3.1 3.1. Chú thích 3.1.1 Giúp đọc code dễ dàng hơn cho người khác và về sau 3.1.2 Giúp gỡ lỗi dễ hơn 3.1.3 Không cần chú thích chức năng của đoạn code 3.1.3.1 Bản thân code chính là làm việc đó như thế nào nên không cần chú thích nữa 3.1.3.2 Ví dụ

 always @(posedge clk) begin Sig_FF1 các cổng logic tính toán ngay lập tức 3.4.3.3 Ví dụ 3.4.6  module fa_bhv (A, B, CI, S, CO) ; input A, B, CI; output S, CO; reg S, CO; // assignment made in an always block // must be made to registers // use procedural assignments always@(A or B or CI) begin S = A ^ B ^ CI; CO = (A & B) | (A & CI) | (B & CI); end endmodule 3.4.3.4 Chú ý  Khi mô phỏng khi tín hiệu đầu vào (bên phải phép gán) thay đổi, đầu ra (bên trái phép gán) được tính toán lại 3.4.4 3.4.4. Phân cấp 3.4.4.1 Trong Verilog, mỗi khối (mạch) là một module. 3.4.4.2 Các module có thể được tái sử dụng bên trong một module khác (instantiate)

3.4.4.3 Thiết kế phân cấp xây dựng hệ thống từ các phần tử nhỏ hơn. Đây là phương pháp thiết kế top-down 

Primitives (cổng logic cơ bản)



Các module khác 3.4.4.4 Ví dụ



Thiết kế phân cấp của full-adder





Half-Adder



 module Add_half(c_out, sum, a, b); output sum, c_out; input a, b; xor sum_bit(sum, a, b); and carry_bit(c_out, a, b); endmodule 

Full-Adder



 module Add_full(c_out, sum, a, b, c_in) ; output sum, c_out; input a, b, c_in; wire w1, w2, w3; Add_half AH1(.sum(w1), .c_out(w2), .a(a), .b(b)); Add_half AH2(.sum(sum), .c_out(w3), .a(c_in), .b(w1)); or carry_bit(c_out, w2, w3); endmodule 3.4.4.5 Chú ý: Trong một module có thể sử dụng nhiều loại mô hình mô tả  Khi tổng hợp thành mạch, việc tính toán không cần chờ đợi được kích hoạt. Tính toán đồng thời, cả 3 loại mô hình đều được tổng hợp thành phần cứng như nhau

3.4.4.6 Chú ý: Phạm vi của tín hiệu  Module cha không thể truy cập vào các tín hiệu trong module con => cần phải đưa ra thành các cổng của module con 

Ví dụ  module add8bit(cout, sum, a, b); output [7:0] sum; output cout; input [7:0] a, b; wire cout0, cout1,… cout6; FA A0(cout0, sum[0], a[0], b[0], 1’b0); FA A1(cout1, sum[1], a[1], b[1], cout0); … FA A7(cout, sum[7], a[7], b[7], cout6); endmodule 

Để phát hiện tràn overflow = cout XOR cout6 Cần đưa ra tín hiệu cout6 hoặc overflow

3.4.4.7 Chú ý: Mỗi module nên đưa vào 1 file riêng biệt 

Dễ tổ chức



Dễ tìm kiếm



Dễ tái sử dụng trong project khác



Tăng tốc độ tổng hợp khi tái sử dụng



Hình vẽ



Các module cùng trong 1 file 



Mỗi module trong 1 file



3.5 3.5. Các cấu trúc mô tả dòng dữ liệu 3.5.1 3.5.1. Phép gán liên tục (continuous assignment) 3.5.1.1 Cú pháp  assign [drive_strength] [delay] list_of_net_assignments; Where: list_of_net_assignment ::= net_assignment [{,net_assignment}] & Where: Net_assignment ::= net_lvalue = expression 

assign = ;

 Khi các biến trong vế phải thay đổi giá trị, kết quả biểu thức RHS thay đổi, biến LHS được cập nhật giá trị mới 

Phép gán này hoạt động liên tục (hardware) và được tổng hợp thành mạch logic tổ hợp 

Chú ý có một trường hợp ngoại lệ



Biểu thức RHS sử dụng các biến (dây dẫn, thanh ghi) và các phép toán: +,-,&,|,^,~,>>,…



LHS luôn là các biến kiểu dây dẫn (wire) hoặc phép toán nối vector 3.5.1.2 Ví dụ 3.5.1: Đơn giản



// out is a net, a & b are also nets assign out = a & b; // and gate functionality 3.5.1.3 Ví dụ 3.5.2: Gán vector

 wire [15:0] result, src1, src2; // 3 16-bit wide vectors assign result = src1 ^ src2; // 16-bit wide XOR 3.5.1.4 Ví dụ 3.5.3: Bộ cộng 32 bit  wire [31:0] sum, src1, src2; // 3 32-bit wide vectors assign {c_out,sum} = src1 + src2 + c_in; // wow!



3.5.2 3.5.2. Các phép toán 3.5.2.1 Nối các vector 

Tạo ra các vector từ các vector nhỏ hơn hoặc từ biến đơn



Operator {v1, v2}



Cú pháp: {list_of_subvector}



Các vector phía trái của danh sách các vector con sẽ có ý nghĩa cao hơn các vector phía phải



Ví dụ 3.5.4

 module concatenate(out, a, b, c, d); [9:0] out; assign out = {a[1:0],b,c,d,a[2]}; 

input [2:0] a; input [1:0] b, c; input d; output // assign out10 ={a[1:0],b,c,d,a[2]}[1:0]; endmodule

Ví dụ 3.5.5: Sử dụng khi kết nối cổng module

 module add_concatenate(out, a, b, c, d); input [7:0] a; input [4:0] b; input [1:0] c; input d; output [7:0] out; add8bit(.sum(out), .cout(), .a(a), .b({b,c,d}), .cin()); // đầu vào 8 bit b của bộ cộng là 1 vector ghép từ 3 vector b, c, d endmodule 

Thêm hằng số vào trước phép toán {}



Dùng để nhân bản bit



Ví dụ 3.5.6: Mở rộng dấu  input [7:0] offset; // 8-bit offset term from EEPROM wire [15:0] src1,src2; // 16-bit source busses to ALU assign src1 = {8{offset[7]},offset}; // sign extend offset term // src1 = offset[7], offset[7], ..., offset[7], offset[7], offset[6], ..., offset[0]



Chú ý phép toán tách vector là [msb_index:lst_index]



Ví dụ a[1:0] lấy 2 bit thấp của vector a 3.5.2.2 Phép toán số học



* multiply ** exponent / divide % modulus + add - subtract



Dễ mô tả hơn dùng mô hình cấu trúc



Không phải tất cả các phép toàn đều có thể tổng hợp

 Ví dụ: các phép toàn *, **, /, % khó tổng hợp thành mạch logic, cho mạch kích thước lớn, tốc độ chậm 

Phần mềm tổng hợp thường sử dụng thư viện module có sẵn cho các phép toán



Cần chú ý đến kích thước kết quả



Ảnh hưởng đến dấu của phép toán



Kích thước (bitsize) quyết định bởi cả 2 phía của phép toán



Ví dụ 3.5.7: Các phép toán số học

 1 module arithmetic_operators(); 2 3 initial begin 4 $display (" 5 + 10 = %d", 5 + 10); 5 $display (" 5 - 10 = %d", 5 - 10); 6 $display (" 10 - 5 = %d", 10 - 5); 7 $display (" 10 * 5 = %d", 10 * 5); 8 $display (" 10 / 5 = %d", 10 / 5); 9 $display (" 10 / -5 = %d", 10 / -5); 10 $display (" 10 %s 3 = %d","%", 10 % 3); 11 $display (" +5 = %d", +5); 12 $display (" -5 = %d", -5); 13 #10 $finish; 14 end 15 16 endmodule 3.5.2.3 Phép toán logic 

Phép dịch



Dịch trái







Số học:



Logic: >>

Ví dụ 3.5.8: Phép dịch  1 module shift_operators(); 2 3 initial begin 4 // Left Shift 5 $display (" 4'b1001 1 = %b", (4'b1001 >> 1)); 10 $display (" 4'b10x1 >> 1 = %b", (4'b10x1 >> 1)); 11 $display (" 4'b10z1 >> 1 = %b", (4'b10z1 >> 1)); 12 #10 $finish; 13 end 14 15 endmodule



Phép so sánh



Lớn hơn, nhỏ hơn: , =



Bằng: ==, !=



Có xét đến giá trị x và z





===, !==



chỉ dùng khi mô phỏng

Ví dụ 3.5.9: Phép so sánh  1 module relational_operators(); 2 3 initial begin 4 $display (" 5 = 10 = %b", (5 >= 10)); 6 $display (" 1'bx
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF