intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Giáo trình lập trình Verilog Tiếng Việt 5

Chia sẻ: Cinny Cinny | Ngày: | Loại File: PDF | Số trang:6

298
lượt xem
82
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'giáo trình lập trình verilog tiếng việt 5', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Giáo trình lập trình Verilog Tiếng Việt 5

  1. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông IX KHOÁI ALWAYS VAØ KHOÁI INITIAL I. Khoái always: Laø caáu truùc chín trong khuoân maãu RTL (Register Transfer Level). Gioáng chæ ñònh lieân tuïc, ñaây laø traïng thaùi toàn taïi maø ñöôïc thöïc thi lieân tuïc trong khi moâ phoûng. Caùi naøy cuõng coù nghóa laø taát caû caùc khoái always trong moät module thöïc thi moät caùch lieân tuïc. Khoái always coù theå ñöôïc duøng trong choát, flip flop hay caùc keát noái logic. Neáu caùc leänh cuûa khoái always naèm trong phaïm vi khoái begin… end thì ñöôïc thöïc thi lieân tuïc, neáu naèm trong khoái fort… join, chuùng ñöôïc thöïc thi ñoàng thôøi (chæ trong moâ phoûng). Khoái always thöïc hieän baèng möùc, caïnh leân hoaëc caïnh xuoáng cuûa moät hay nhieàu tín hieäu (caùc tín hieäu caùch nhau bôûi töø khoùa OR). Cuù phaùp: Always @(söï kieän 1 or söï kieän 2 or…) Begin … caùc leänh… end Always @(söï kieän 1 or söï kieän 2 or…) Begin: teân khoái … caùc leänh… end II. Khoái initial Gioáng nhö khoái always nhöng khoái initial chæ thöïc thi moät laàn töø luùc baét d8aàu cuûa quaù trình moâ phoûng. Khoái naøy thì tieâu bieåu ñeå bieán khôûi chaïy vaø chæ ñònh daïng soùng tín hieäu trong luùc moâ phoûng. GV: Nguyeãn Troïng Haûi Trang 24
  2. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog 1. Cuù phaùp: Initial Begin … caùc leänh… end 2. Ví duï: Initial Begin Clr = 0; Clk = 1; End Initial Begin a = 2’b00; #50 a = 2’b01; #50 a = 2’b10; end GV: Nguyeãn Troïng Haûi Trang 25
  3. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông X HAØM Haøm ñöôïc khai baùo trong phaïm vi moät module, vaø coù theå ñöôïc goïi töø nhöõng leänh lieân tuïc, khoái always, hoaëc nhöõng haøm khaùc. Trong leänh chæ ñònh lieân tuïc, cuùng ñöôïc chæ ñònh lieân tuïc khi baát kì caùc haøm khai baùo ngoõ vaøo thay ñoåi. Trong chöông trinh chuùng ñöôïc chæ dòng tôùi khi caàn goïi. Caùc haøm moâ taû söï keát noái logic, vaø khoâng taïo ra choát. Do ñoù moät leänh if maø khoâng else se moâ phoûng , maëc duø noù coù choát döõ lieäu nhöng moâ phoûng thì khoâng coù. Ñaây laø tröôøng hôïp dôû cuûa toång hôïp khoâng coù moâ phoûng theo sau. Ñaây laø khaùi nieäm toát ñeå maõ hoùa haøm, vì vaäy chuùng seõ khoâng taïo ra choát neáu maõ haøm ñöôïc duøng trong moät chöông trình. I. Khai baùo haøm: Khai baùo haøm laø chæ ra teân haøm, chieàu roäng cuûa haøm giaù trò traû veà, ñoái soá haøm döõ lieäu vaøo, caùc bieán (reg) duøng trong haøm, vaø tham soá cuïc boä cuûa haøm, soá nguyeân cuûa haøm. 1. Cuù phaùp: Function [msb:lsb] teân haøm; Input [msb:lsb]bieán vaøo; Reg [msb:lsb]bieán reg; Parameter [msb:lsb] tham soá; Integer [msb:lsb] soá nguyeân; … caùc leänh… endfunction 2. Ví duï Function [7:0] my_func; // haøm traû veà giaù trò 8 bit Input [7:0] i; Reg [4:0] temp; Integer n; GV: Nguyeãn Troïng Haûi Trang 26
  4. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog temp = i[7:4]| (i[3:0]); my_func = {temp,i[1:0]}; endfunction II. Ví duï: Moät haøm chæ coù chöùa moät döõ lieäu ra. Neáu coù nhieàu hôn moät giaù trò traû veà ñöôïc yeâu caàu, ngoõ ra seõ phaûi keát noái taïo thaønh moät vector tröôùc khi ñaët giaù trò cho haøm ñeå goïi teân haøm. Goïi teân chöông trình module coù theå trích ra sau ñoù, rieâng ñoái vôùi ngoõ ra töø caùc bieåu maåu noái vaøo nhau. Ví duï döôùi ñaây minh hoïa toång quaùt caùch duøng vaø cuù phaùp haøm trong verilog. 1. Cuù phaùp: Teân haøm = bieåu thöùc. 2. Ví duï: Module simple_processor (instruction, outp); Input [31:0] instruction; Output [7:0] outp; Reg [7:0] outp;// coù theå ñöôïc gaùn trong khoái always. Reg func; Reg [7:0] opr1, opr2; Function[16:0] decode add(instr) Input [31:0] instr; Reg add_func; Reg [7:0] opcode, opr1, opr2; Begin Opcode = instr[31:24]; Opr1 = instr[7:0]; Case (opcode) 8’b 10001000: begin add_func = 1; opr2 = instr[15:8]; end GV: Nguyeãn Troïng Haûi Trang 27
  5. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog 8’b 10001001: begin add_func = 0; opr2 = instr[15:8]; end 8’b 10001010: begin add_func = 1; opr2 = 8’b 00000001; end default: begin add_func = 0; opr2 = 8’b00000001; end endcase decode_add = {add_func, opr2, opr1}; end endfunction always @(intruction) begin {func, opr2, opr1}= decode_add (intruction); if (func= =1) outp = opr1+ opr2; else outp = opr1 – opr2; end endmodule GV: Nguyeãn Troïng Haûi Trang 28
  6. Toùm taét baøi giaûng TK Heä Thoáng Soá Phaàn Verilog Chöông XI CHÖÙC NAÊNG LINH KIEÄN Choát döõ lieäu (latches): ñöôïc suy neáu moät bieán, moät trong caùc bit khoâng ñöôïc gaùn trong caùc nhaùnh cuûa moät leänh if. Choát döõ lieäu cuõng ñöôïc suy ra töø leänh case neáu moät bieán ñöôïc gaùn chæ trong moät vaøi nhaùnh. Hoaøn thieän maõ coù theå ñoïc ñöôïc duøng leänh if ñeå toång hôïp choát vì thaät khoù ñeå chæ ñònh roõ raøng. Theo lyù thuyeát, moät söï xaùc laäp hôïp lí neân ñöôïc suy ra töø maõ Verilog. Cuù phaùp: If… else if… else vaø case. I. Thanh ghi Edge_triggered, flip_flop, boä ñeám: Moät thanh ghi (flip_flop) ñöôïc suy luaän baèng vieäc duøng xung kích caïnh leân hoaëc xuoáng trong danh saùch söï kieän cuûa leänh khoái always. Cuù phaùp: Always @(posedge clk or posedge reset1 or nesedge reset2) Begin If (reset1) begin Caùc chæ ñònh reset end else if (reset2) begin Caùc chæ ñònh reset End Else begin Caùc chæ ñònh reset End II. Boä ña coäng: Ñöôïc suy ra bôûi vieäc gaùn moät bieán maø giaù trò moãi bieán khaùc nhau trong moûi nhaùnh cuûa leänh if hoaëc case. Coù theå traùnh caùc chæ ñònh vaø moïi nhaùnh coù theå GV: Nguyeãn Troïng Haûi Trang 29
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2