November 27, 2017 | Author: Nam Ha Van | Category: N/A
Download Thiết kế và tổng hợp hệ thống số-Bài Giảng...
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