Professional Documents
Culture Documents
Chương 3:
Ngôn ngữ mô tả phần cứng
Verilog HDL
Sơ đồ chân MUX2-1
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Chuù yù: neáu khoâng ghi heä soá thì xem nhö soá ñoù ñöôïc
bieåu dieãn ôû daïng thaäp phaân
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Ví dụ: Tìm và biểu diễn giá trị của s và p dạng nhị
phân và thập lục phân
Cho a = 4’B0010, b = 8’H1A. Tính s và p.
s=a+b
p= a x b
biểu diễn giá trị của s và p dạng nhị phân
s = a + b = 5’b11100
p = a x b = 6’b110100
biểu diễn giá trị của s và p dạng thập lục phân
s = a + b = 8’H1C
p = a x b = 8’H34
Ví dụ:
input [3:0] a; // a là input 4 bit, a[3] là MSB
output [0:7] b // b là output 8 bit, b[0] là MSB
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Bài tập 1:
Khai báo bien C là input và có độ rộng 6 bit.
Khai báo bien D là output và có độ rộng 8 bit.
Khai báo bien E là inout và có độ rộng 6 bit
II. Ngôn ngữ mô tả phần cứng Verilog HDL
module mux4-1(a0,a1,a2,a3,s1,s0,y);
input a0,a1,a2,a3,s1,s0;
output y;
……
……
endmodule
module mux4-1(a,s,y);
input [3:0]a;
input [1:0]s;
output y;
……
……
endmodule
Bài tập 2:
Vẽ sơ sồ chân và viết một đoạn code khai báo
PORT cho DECODER 4-16 có ngõ vào cho phép
tích cực mức cao, ngõ ra tích cực mức thấp.
Bài tập 3:
Vẽ sơ sồ chân và viết một đoạn code khai báo
PORT cho mạch so sánh 2 số nhị phân 4 bit.
Bieán wire:
- Hoaït ñoäng nhö moät daây noái vaät lyù keát noái giöõa caùc linh
kieän
- Giaù trò cuûa wire coù theå ñoïc, nhöng khoâng ñöôïc gaùn trong
haøm (function) hoaëc khoái (block)
- Caùc daïng khaùc cuûa bieán wire laø : wand, wor, tri
- Bieán wire khoâng löu giöõ giaù trò cuûa noù maø ñöôïc ñieàu
khieån baèng moät trong hai caùch sau:
+ Keát noái wire ñeán ngoõ ra cuûa moät coång hay moät
module
+ Gaùn moät giaù trò ñeán wire trong moät pheùp gaùn noái tieáp
II. Ngôn ngữ mô tả phần cứng Verilog HDL
wire wire_variable_list;
wire [MSB: LSB] wire_variable_list;
Ví duï:
wire a; // a laø bieán wire 1 bit
wire [0:7] b; // b laø bieán wire 8 bit, b[0] laø MSB
wire [3:0] c; // c laø bieán wire 4 bit, c[3] laø MSB
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Ví dụ: khai báo port và biến wire cho mạch tổ hợp sau
Tham soá (parameter): laø haèng soá coù giaù trò xaùc
ñònh ñöôïc söû duïng trong module
a. Toaùn töû soá hoïc: Laø caùc toaùn töû thöïc hieän caùc
pheùp toaùn soá hoïc trong Verilog
+ Pheùp coäng
- Pheùp tröø
* Pheùp nhaân
/ Pheùp chia laáy phaàn nguyeân
% Pheùp chia laáy phaàn dö
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Bài tập 4:
Cho a = 4’b1001, b = 4’b1011. Tìm giá trị của c,d,e.
c=a|b
d=c^a
e = (~a) & c
27
II. Ngôn ngữ mô tả phần cứng Verilog HDL
c.Toaùn töû so sánh: Thöïc hieän so saùnh hai toaùn haïng vaø traû
veà keát quaû laø 0 hoaëc 1
Đáp án : F = 4’b1011
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Bài tập 5 : cho X = 4’b1100, Y = 4’b 1110, tính giá trị của F.
module so_sanh (X,Y,F);
input [3:0] X,Y;
output [3:0] F;
reg [3:0] F;
always @ (X or Y)
if (X<Y)
F = X ^ Y;
else
F = ~X;
endmodule
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Ví duï:
A = 4’B1110;
D = A >> 2; D = 4’B0011
C = A << 1; C = 4’B1100
34
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Ví dụ:
35
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Bài tập 6:
Cho a = 8’b10011100, b = 8’b00101011.
Tìm giá trị của c, d, f
c = a <<4
d = b>>4
f=c|d
36
II. Ngôn ngữ mô tả phần cứng Verilog HDL
j. Toaùn töû choïn bit:
Variable_name [index]
Variable_name [msb:lsb]
{n{item}}
Ví duï:
A = 2’B10;
B = 3’B101;
T = {3{A}}; T = 6’B101010;
X = {2{1’B0},A} ; X = 4’B0010
Y = {3{A}, 2{B}} ; Y = 12’B101010101101
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Ví duï: Mux 2 to 1
Löu yù: các biến ñöôïc gaùn trong always hoaëc initial thì phaûi
khai baùo laø reg
II. Ngôn ngữ mô tả phần cứng Verilog HDL
6. Phát biểu if, case
a. Phát biểu if:
Cú pháp:
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Ví duï: Viết chương trình verilog mô tả Mux 2-1, dùng
cấu trúc if…else
module mux2_1 (i0, i1, s, y);
input i0, i1, s;
ouput y;
reg y;
MUX 2-1
always @ (i0, i1, s) begin
if (s == 1’b0)
y = i0;
else
y = i1;
end
endmodule
II. Ngôn ngữ mô tả phần cứng Verilog HDL
b. Phát biểu case
Cú pháp:
case (biểu thức)
giá trị 1: lệnh 1;
giá trị 2: lệnh 2;
…..
giá trị n: lệnh n;
default : lệnh 0;
endcase
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Ví duï: Viết chương trình verilog mô tả Mux 4-1, dùng
cấu trúc case Module mux4_1 (out, in, sel);
input [3:0] in;
input [1:0] sel;
output out;
reg out;
always @(in or sel) begin
case (sel)
2’b00: out = in[0];
2’b01: out = in[1];
2’b10: out = in[2];
2’b11: out = in[3];
endcase
end
endmodule
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Bài tập:
1. Viết chương trình verilog mô tả Decoder 2-4 dùng
cấu trúc case
2. Viết chương trình verilog mô tả Demux 1-4 dùng cấu
trúc case
II. Ngôn ngữ mô tả phần cứng Verilog HDL
Ví duï 3: vieát chöông trình verilog moâ taû maïch logic sau
Lưu ý:
Mô hình cấu trúc, luồng dữ liệu thường dùng
mô tả mạch tổ hơp nhỏ và vừa
Mô hình hành vi thường dùng mô tả mạch tuần
tự, mạch tổ hơp kích thước lớn
II. Ngôn ngữ mô tả phần cứng Verilog HDL