CHƯƠNG 3: CẤU TRÚC CỦA 1 MODULE 3.1. Cách gọi module con: Khi một môđun được khởi tạo, phải xác định kết nối đến các cổng của các module. Có hai cách gọi để kết nối cổng các module là: • Kết nối theo thứ tự cổng: thứ tự các cổng trong module chính phải phù hợp với thứ tự xuất hiện các cổng trong module con. • Kết nối theo tên cổng: tên cổng phải phù hợp với module con, thứ tự không quan trọng. a) Kết nối theo thứ tự: Tên_module_con Nhãn(signal_1, signal_2,…, signal_N); b) Kết nối theo tên: Tên_module_con Nhãn (.port_name_1(signal_1, .port_name_2(signal_2,…,.port_name_n(signal_n); Trong đó: • Signal: tên các cổng của module top • Port_name: tên các cổng của module con Ví dụ: module adder_order(S,cout,A,B,cin); Input Port Declarations input 3:0 A ; input 3:0 B ; input cin ; Output Port Declarations output 3:0 S ; output cout ; Port Wires wire 3:0 A ; wire 3:0 B ; wire cin ; wire 3:0 S ; wire cout ; Internal variables wire c1 ; wire c2 ; wire c3 ; Code Starts Here addbit u0 (A0,B0,cin,S0,c1); addbit u1 (A1,B1,c1,S1,c2); addbit u2 (A2,B2,c2,S2,c3); addbit u3 (A3,B3,c3,S3,cout); endmodule Kết nối theo tên(by port name) : module adder_name(S,cout,A,B,cin); Input Port Declarations input 3:0 A ; input 3:0 B ; input cin ; Output Port Declarations output 3:0 S ; output cout ; Port Wires wire 3:0 A ; wire 3:0 B ; wire cin ; wire 3:0 S ; wire cout ; Internal variables wire c1 ; wire c2 ; wire c3 ; Code Starts Here addbit u0 (.a(A0),.b(B0),.ci(cin),.sum(S0),.co(c1)); addbit u1 (.a(A1),.b(B1),.ci(c1),.sum(S1),.co(c2)); addbit u2 (.a(A2),.b(B2),.ci(c2),.sum(S2),.co(c3)); addbit u3 (.a(A3),.b(B3),.ci(c3),.sum(S3),.co(cout)); endmodule 3.2. Quy định kết nối port: • Input: Kết nối bên trong luôn luôn là kiểu net; bên ngoài có thể khai báo kiểu net hoặc reg. • Output: Bên ngoài luôn là kiểu net, bên trong có thể là kiểu net hoặc reg. • Cổng không kết nối được cho phép sử dụng dấu “ , ” Ví dụ:
Thiết kế logic số (Digital Logic design) Bộ môn Điện tử máy tính 08/2018 Chủ đề CẤU TRÚC MODULE Bộ mơn Điện tử máy tính 08/2018 Nội dung 4.1 Phương pháp thiết kế 4.2 Module 4.3 Quy định kết nối port 4.4 Bài tập 4.1 Phương pháp thiết kế Phương pháp thiết kế: Top-down design: Top-Level Sub-Block1 Leaf-cell Sub-Block2 Leaf-cell Bottom-up design: Top-Level Macro-cell1 Leaf-cell Macro-cell2 Leaf-cell 4.2 Module Module: khối xây dựng thiết kế Verilog Có cách để mô tả chức năng: Mức cổng (gate level) Mức luồng liệu (Dataflow level) Mức hành vi (Behavioral or algorithmic level) 4.2 Module Ví dụ: mô tả luồng liệu mạch cộng bit module addbit (a,b,ci,sum,co); //Input declaration input a,b,ci; //Ouput declaration output sum; output co; //Port Data types wire a,b,ci; wire sum; wire co; //Code starts here assign {co,sum} = a + b + ci; addbit a b ci co sum endmodule // End of Module addbit 4.2 Module Cách gọi module con: Khi mô-đun khởi tạo, phải xác định kết nối đến cổng module Có hai cách gọi để kết nối cổng module là: Kết nối theo thứ tự cổng: thứ tự cổng module phải phù hợp với thứ tự xuất cổng module Kết nối theo tên cổng: tên cổng phải phù hợp với module con, thứ tự không quan trọng 4.2 Module Kết nối theo thứ tự: Tên_module_con Nhãn (signal_1, signal_2,…,signal_n); Kết nối theo tên: Tên_module_con Nhãn (.port_name_1(signal_1, port_name_2(signal_2,…,.port_name_n(signal_n); Trong đó: Signal: tên cổng module top Port_name: tên cổng module 4.2 Module Ví dụ: thực mạch cộng bit sử dụng mạch cộng bit thiết kế ví dụ A3 B3 cout a b ci co A2 B2 c3 a b ci co A1 B1 c2 a b ci co A0 B0 c1 a b ci co sum sum sum sum S3 S2 S1 S0 cin 4.2 Module Kết nối theo thứ tự (by port order) : module adder_order(S,cout,A,B,cin); // Input Port Declarations input [3:0] A ; input [3:0] B ; input cin ; // Output Port Declarations output [3:0] S ; output cout ; // Port Wires wire [3:0] A ; wire [3:0] B ; wire cin ; wire [3:0] S ; wire cout ; 10 4.2 Module Kết nối theo thứ tự (by port order) : // Internal variables wire c1 wire c2 wire c3 ; ; ; // Code Starts Here addbit u0 (A[0],B[0],cin,S[0],c1); addbit u1 (A[1],B[1],c1,S[1],c2); addbit u2 (A[2],B[2],c2,S[2],c3); addbit u3 (A[3],B[3],c3,S[3],cout); endmodule // End Of Module adder 11 4.2 Module Kết nối theo tên(by port name) : module adder_name(S,cout,A,B,cin); // Input Port Declarations input [3:0] A ; input [3:0] B ; input cin ; // Output Port Declarations output [3:0] S ; output cout ; // Port Wires wire [3:0] A ; wire [3:0] B ; wire cin ; wire [3:0] S ; wire cout ; 12 4.2 Module Kết nối theo tên (by port name) : // Internal variables wire c1 wire c2 wire c3 ; ; ; // Code Starts Here addbit u0 (.a(A[0]),.b(B[0]),.ci(cin),.sum(S[0]),.co(c1)); addbit u1 (.a(A[1]),.b(B[1]),.ci(c1),.sum(S[1]),.co(c2)); addbit u2 (.a(A[2]),.b(B[2]),.ci(c2),.sum(S[2]),.co(c3)); addbit u3 (.a(A[3]),.b(B[3]),.ci(c3),.sum(S[3]),.co(cout)); endmodule // End Of Module adder 13 4.3 Quy định kết nối port Quy định kết nối port: Input: Kết nối bên luôn kiểu net; bên ngồi khai báo kiểu net reg Output: Bên ngồi ln kiểu net, bên kiểu net reg Cổng không kết nối cho phép sử dụng dấu “,” Net Net Output Net or reg Net Net Input Net or reg Inout 14 4.3 Quy định kết nối port Ví dụ: // D flip-flop module dff (q, q_not, clk, d, rst, pre); input clk, d, rst, pre; output q, q_not; reg q; pre assign q_not = ~q; d q always @ (posedge clk) clk if (rst == 1'b1) begin q_not q