ການຈຳລອງຊອບແວ RENESAS ForgeFPGA
ຂໍ້ມູນທີ່ສໍາຄັນ
ການຈໍາລອງແມ່ນເຕັກນິກຂອງການນໍາໃຊ້ການກະຕຸ້ນການປ້ອນຂໍ້ມູນທີ່ແຕກຕ່າງກັນກັບການອອກແບບໃນເວລາທີ່ແຕກຕ່າງກັນເພື່ອກວດເບິ່ງວ່າລະຫັດ RTL ປະຕິບັດວິທີການທີ່ມີຈຸດປະສົງ. ມັນຖືກນໍາໃຊ້ເພື່ອກວດສອບຄວາມທົນທານຂອງການອອກແບບ. ການຈໍາລອງອະນຸຍາດໃຫ້ຜູ້ໃຊ້ view ແຜນວາດເວລາຂອງສັນຍານທີ່ກ່ຽວຂ້ອງເພື່ອເຂົ້າໃຈວິທີການອະທິບາຍການອອກແບບໃນການອອກແບບ file ປະພຶດ.
Testbenches ແມ່ນຊິ້ນສ່ວນຂອງລະຫັດທີ່ຖືກນໍາໃຊ້ສໍາລັບການຈໍາລອງ. A testbench ງ່າຍດາຍຈະເຮັດໃຫ້ຫນ່ວຍງານພາຍໃຕ້ການທົດສອບ (UUT) ທັນທີແລະຂັບລົດການປ້ອນຂໍ້ມູນ. ຊອບແວ Go Configure ໃຊ້ Icarus Verilog (iVerilog) ແລະ GTKWave ເພື່ອສັງເກດການຈໍາລອງຄື້ນຟອງທີ່ມີການກະຕຸ້ນທີ່ສະຫນອງໃຫ້ຢູ່ໃນ testbench.
ເອກະສານນີ້ອະທິບາຍຂັ້ນຕອນທີ່ຕ້ອງເຮັດໃນຂະນະທີ່ຕິດຕັ້ງ Icarus ໃນລະບົບຂອງທ່ານແລະວິທີການດໍາເນີນການຈໍາລອງທີ່ປະສົບຜົນສໍາເລັດ.
ການຕິດຕັ້ງ Icarus Verilog
a. ຕິດຕັ້ງເວີຊັນຫຼ້າສຸດຂອງ Icarus Verilog (IVerilog) ຈາກ https://bleyer.org/icarus/
b. ໃຫ້ແນ່ໃຈວ່າເພີ່ມ IVerilog ໃສ່ PATH ແລະໃຫ້ມັນຕິດຕັ້ງ GTKWave (ເບິ່ງຮູບ 1)
c. ເປີດ Go Configure Software ແລະເລືອກສ່ວນ: SLG47910(Rev BB) ເພື່ອເປີດກອງປະຊຸມ Forge (ເບິ່ງຮູບ 2).
d. ໃຫ້ຄລິກໃສ່ຕົວແກ້ໄຂ FPGA ຢູ່ເຄິ່ງກາງຂອງແຖບເຄື່ອງມືຢູ່ເທິງສຸດຫຼືຜູ້ໃຊ້ຍັງສາມາດຄລິກສອງຄັ້ງໃສ່ໂຄງສ້າງ FPGA Core ຢູ່ເຄິ່ງກາງຂອງປ່ອງຢ້ຽມ.
e. ປ່ອງຢ້ຽມໃຫມ່ເປີດເອີ້ນວ່າ Forge Workshop. ໃນແຖບເຄື່ອງມືເມນູຢູ່ເທິງສຸດ, ໃຫ້ຄລິກໃສ່ຕົວເລືອກ → ການຕັ້ງຄ່າ. ໃນກ່ອງໂຕ້ຕອບການຕັ້ງຄ່າ, ໄປທີ່ເຄື່ອງມືພາຍໃຕ້ແຖບການຕັ້ງຄ່າຜູ້ໃຊ້. ຍົກເລີກການເລືອກກ່ອງ "ສະພາບແວດລ້ອມລະບົບ" ສໍາລັບທັງ Icarus Verilog ແລະ GTKWave. ເພີ່ມເສັ້ນທາງໄປຫາ Iverilog ແລະ GTKWave ທີ່ບັນທຶກໄວ້ໃນລະບົບຂອງທ່ານເຂົ້າໄປໃນພື້ນທີ່ທີ່ໄດ້ຮັບ (ເບິ່ງຮູບ 4).
ທ່ານໄດ້ຖືກຕັ້ງໄວ້ທັງຫມົດເພື່ອຈໍາລອງ testbench ແລະຂັ້ນຕອນຂ້າງເທິງນີ້ໃຫ້ແນ່ໃຈວ່າ GTKWave ເປີດຕົວໂດຍອັດຕະໂນມັດເມື່ອ simulate testbench ໃນ Go Configure software.
Testbench
ຂັ້ນຕອນທີ່ສໍາຄັນທີ່ສຸດໃນການປະຕິບັດລະບົບໃດຫນຶ່ງຢ່າງສໍາເລັດຜົນແມ່ນເພື່ອກວດສອບການອອກແບບແລະການທໍາງານຂອງມັນ. ການກວດສອບລະບົບສະລັບສັບຊ້ອນຫຼັງຈາກປະຕິບັດຮາດແວບໍ່ແມ່ນທາງເລືອກທີ່ສະຫລາດ. ມັນບໍ່ມີປະສິດທິພາບທາງດ້ານເງິນ, ເວລາ, ແລະຊັບພະຍາກອນ. ດັ່ງນັ້ນ, ໃນກໍລະນີຂອງ FPGA, testbench ຖືກນໍາໃຊ້ເພື່ອທົດສອບລະຫັດແຫຼ່ງ Verilog.
ສົມມຸດວ່າພວກເຮົາມີ input ທີ່ມີ 11 bits, ແລະພວກເຮົາຕ້ອງການທີ່ຈະທົດສອບອຸປະກອນສໍາລັບຄ່າປະສົມປະສານການປ້ອນຂໍ້ມູນທີ່ເປັນໄປໄດ້ທັງຫມົດ ie (211). ເນື່ອງຈາກວ່ານີ້ແມ່ນການປະສົມຈໍານວນຫລາຍ, ມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະທົດສອບດ້ວຍຕົນເອງ. ໃນກໍລະນີດັ່ງກ່າວ, testbenches ມີປະໂຫຍດຫຼາຍຍ້ອນວ່າທ່ານສາມາດທົດສອບການອອກແບບອັດຕະໂນມັດສໍາລັບມູນຄ່າທີ່ເປັນໄປໄດ້ທັງຫມົດແລະເພາະສະນັ້ນ, ຢືນຢັນຄວາມຫນ້າເຊື່ອຖືຂອງການອອກແບບການທົດສອບ. Verilog Testbenches ຖືກນໍາໃຊ້ເພື່ອຈໍາລອງແລະວິເຄາະການອອກແບບໂດຍບໍ່ຈໍາເປັນຕ້ອງມີອຸປະກອນຮາດແວທາງດ້ານຮ່າງກາຍໃດໆ.
ການອອກແບບພາຍໃຕ້ການທົດສອບ, ຫຍໍ້ເປັນ DUT, ແມ່ນໂມດູນສັງເຄາະຂອງຫນ້າທີ່ພວກເຮົາຕ້ອງການທົດສອບ. ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ມັນແມ່ນການອອກແບບວົງຈອນທີ່ພວກເຮົາຢາກຈະທົດສອບ. ພວກເຮົາສາມາດອະທິບາຍ DUT ຂອງພວກເຮົາໂດຍໃຊ້ຫນຶ່ງໃນສາມແບບຈໍາລອງໃນ Verilog - Gate-level, Dataflow, ຫຼື Behavioral.
A testbench ແມ່ນບໍ່ສາມາດສັງເຄາະໄດ້, ສະນັ້ນມັນຖືກນໍາໃຊ້ເພື່ອຈຸດປະສົງການຈໍາລອງເທົ່ານັ້ນ. ນີ້ອະນຸຍາດໃຫ້ຜູ້ໃຊ້ໃຊ້ Verilog constructs ເຕັມຮູບແບບເຊັ່ນ: ຄໍາສໍາຄັນເຊັ່ນ "ສໍາລັບ", "$display" ແລະ "$monitor" ແລະອື່ນໆສໍາລັບການຂຽນ testbenches. A testbench ງ່າຍດາຍຈະເຮັດໃຫ້ຫນ່ວຍງານພາຍໃຕ້ການທົດສອບ (UUT) ຫຼືອຸປະກອນພາຍໃຕ້ການທົດສອບ (DUT) ແລະຂັບ inputs.
ຄວາມເຂົ້າໃຈ Testbench
ຄໍານິຍາມຂະຫນາດເວລາໃນ Testbench
ໃນເວລາທີ່ຈໍາລອງ, ຊອບແວຈໍາເປັນຕ້ອງຮູ້ວ່າເວລາໄດ້ຖືກກໍານົດແນວໃດ. ຫນ່ວຍຄວາມລ່າຊ້າແມ່ນລະບຸໄວ້ໂດຍໃຊ້ 'ຄໍາສັ່ງຂະຫນາດເວລາ, ເຊິ່ງລະບຸຫນ່ວຍເວລາແລະຄວາມແມ່ນຍໍາສໍາລັບໂມດູນທີ່ປະຕິບັດຕາມມັນ. `ໄລຍະເວລາຊ່ວຍໃນການກໍານົດສິ່ງທີ່ #1 ຫມາຍຄວາມວ່າໃນແງ່ຂອງເວລາ. # ຖືກນໍາໃຊ້ເພື່ອກໍານົດຄວາມລ່າຊ້າທີ່ຈະນໍາສະເຫນີໃນລະບົບໂດຍສອດຄ່ອງກັບຫນ່ວຍງານເວລາທີ່ກໍານົດໄວ້ໃນຂະຫນາດເວລາ. ດັ່ງນັ້ນ, #1 ຫມາຍຄວາມວ່າ 1 ns ຂອງການຊັກຊ້າຖ້າ time_unit ຢູ່ໃນ ns.
syntax:
`ເວລາ / /
time_unit ແມ່ນຈໍານວນເວລາທີ່ຊັກຊ້າຂອງ #1 ເປັນຕົວແທນ. ພື້ນຖານ time_precision ສະແດງເຖິງຈຳນວນຈຸດທົດສະນິຍົມຂອງຄວາມແມ່ນຍໍາທີ່ຈະໃຊ້ທຽບກັບຫົວໜ່ວຍເວລາ. (ເບິ່ງແຖວທີ 23 ໃນຮູບ 5)
ພວກເຮົາສາມາດນໍາໃຊ້ການກໍ່ສ້າງຂະຫນາດເວລາເພື່ອນໍາໃຊ້ຫນ່ວຍງານເວລາທີ່ແຕກຕ່າງກັນໃນການອອກແບບດຽວກັນ. ຜູ້ໃຊ້ຈໍາເປັນຕ້ອງຈື່ຈໍາໄວ້ວ່າຂໍ້ກໍານົດການຊັກຊ້າແມ່ນບໍ່ສາມາດສັງເຄາະໄດ້ແລະບໍ່ສາມາດປ່ຽນເປັນເຫດຜົນຂອງຮາດແວ. ຫນ້າທີ່ການຊັກຊ້າແມ່ນທັງຫມົດສໍາລັບຈຸດປະສົງການຈໍາລອງ. $ເວລາ ແລະ $ເວລາຈິງ ຟັງຊັນຂອງລະບົບສົ່ງຄືນເວລາປະຈຸບັນ ແລະຮູບແບບການລາຍງານເລີ່ມຕົ້ນສາມາດປ່ຽນແປງໄດ້ດ້ວຍໜ້າວຽກລະບົບອື່ນ $timeformat .
Example:
ໄລຍະເວລາ 10us/100ns
`ໄລຍະເວລາ 1ns/1ps
#10 ປັບ = 1; // ຊັກຊ້າສັນຍານໂດຍ 10 ns
#0.49 $display(“T = %0t ໃນເວລາ #0.49”, $realtime);
ຄວາມລ່າຊ້າທີ່ລະບຸໄວ້ແມ່ນ #0.49 ເຊິ່ງໜ້ອຍກວ່າເຄິ່ງໜ່ວຍເວລາ. ຢ່າງໃດກໍ່ຕາມ, ຄວາມແມ່ນຍໍາຂອງເວລາແມ່ນຖືກກໍານົດໄວ້ເປັນ 1ps ແລະດັ່ງນັ້ນ simulator ບໍ່ສາມາດໄປຂະຫນາດນ້ອຍກວ່າ 1ns ເຊິ່ງເຮັດໃຫ້ມັນໄປຮອບຄໍາຖະແຫຼງການຊັກຊ້າແລະຜົນຜະລິດ 0ns. ດັ່ງນັ້ນ, ຄໍາຖະແຫຼງການນີ້ບໍ່ສາມາດສະຫນອງການຊັກຊ້າໃດໆ.
ບັນທຶກການຈຳລອງ:
T = 1 ເວລາ #0.49
ການປະກາດໂມດູນ
ການປະກາດໂມດູນໃນ testbench ໃດກໍ່ຕາມແມ່ນແຕກຕ່າງຈາກລະຫັດ Verilog ຕົ້ນຕໍ. ໃນ testbench, ໂມດູນໄດ້ຖືກປະກາດໂດຍບໍ່ມີພອດ terminal ພ້ອມກັບມັນ. (ເບິ່ງແຖວທີ 25 ໃນຮູບ 5)
syntax:
ໂມດູນ ;
ການປະກາດໂມດູນແມ່ນປະຕິບັດຕາມໂດຍການກໍານົດສັນຍານຂາເຂົ້າແລະຜົນຜະລິດທີ່ໄດ້ກໍານົດໄວ້ກ່ອນຫນ້ານີ້ໃນການອອກແບບຕົ້ນຕໍ file.
ພວກເຮົານໍາໃຊ້ສອງປະເພດສັນຍານສໍາລັບການຂັບລົດແລະສັນຍານການຕິດຕາມໃນລະຫວ່າງການຈໍາລອງ. ປະເພດຂໍ້ມູນ reg ຈະຖືຄ່າໄວ້ຈົນກ່ວາຄ່າໃຫມ່ຖືກມອບຫມາຍໃຫ້ມັນ. ປະເພດຂໍ້ມູນນີ້ສາມາດຖືກມອບຫມາຍເປັນຄ່າພຽງແຕ່ຢູ່ໃນບລັອກສະເຫມີຫຼືເບື້ອງຕົ້ນເທົ່ານັ້ນ.
ປະເພດຂອງຂໍ້ມູນສາຍແມ່ນຄ້າຍຄືກັບການເຊື່ອມຕໍ່ທາງດ້ານຮ່າງກາຍ. ມັນຈະຖືມູນຄ່າທີ່ຖືກຂັບເຄື່ອນໂດຍພອດ, ມອບຫມາຍຄໍາສັ່ງ, ຫຼື reg. ປະເພດຂໍ້ມູນນີ້ບໍ່ສາມາດຖືກນໍາໃຊ້ໃນເບື້ອງຕົ້ນຫຼືຖືກບລັອກຕະຫຼອດເວລາ. ການປະກາດພາລາມິເຕີໃດນຶ່ງ ແລະຈຳນວນເຕັມແມ່ນເຮັດຢູ່ໃນພາກນີ້.
Example:
Reg a,b; // ການປ້ອນຂໍ້ມູນໃນລະຫັດ HDL ຖືກກໍານົດເປັນ reg ໃນ testbench
ສາຍ y; // ສັນຍານຜົນຜະລິດໃນ HDL ຖືກກໍານົດເປັນສາຍໃນ testbench
DUT Instantion
ຈຸດປະສົງຂອງ testbench ແມ່ນເພື່ອກວດສອບວ່າໂມດູນ DUT ຂອງພວກເຮົາເຮັດວຽກຫຼືບໍ່. ເພາະສະນັ້ນ, ພວກເຮົາຈໍາເປັນຕ້ອງໄດ້ instantiate ໂມດູນການອອກແບບຂອງພວກເຮົາເພື່ອທົດສອບໂມດູນ.
syntax:
(. (ສັນຍານ1), . signal1>(signal2));
Example:
ALU d0 (.a(a), // ສັນຍານ “a” ໃນ ALU ຄວນເຊື່ອມຕໍ່ກັບ “a” ໃນໂມດູນ ALU_tb
.b(b), // ສັນຍານ “b” ໃນ ALU ຄວນເຊື່ອມຕໍ່ກັບ “b” ໃນໂມດູນ ALU_tb
.c(c));// ສັນຍານ “c” ໃນ ALU ຄວນເຊື່ອມຕໍ່ກັບ “c” ໃນໂມດູນ ALU_tb
ພວກເຮົາໄດ້ສົ່ງໂມດູນ DUT ALU ໃຫ້ກັບໂມດູນການທົດສອບ. ຊື່ຕົວຢ່າງ (d0) ແມ່ນທາງເລືອກຂອງຜູ້ໃຊ້. ສັນຍານທີ່ມີໄລຍະເວລາ "." ຢູ່ທາງຫນ້າຂອງພວກເຂົາແມ່ນຊື່ຂອງສັນຍານພາຍໃນໂມດູນ ALU, ໃນຂະນະທີ່ສາຍຫຼື reg ທີ່ພວກເຂົາເຊື່ອມຕໍ່ຢູ່ໃນຫ້ອງທົດລອງແມ່ນຢູ່ຂ້າງສັນຍານໃນວົງເລັບ (). ແນະນໍາໃຫ້ໃສ່ລະຫັດການເຊື່ອມຕໍ່ແຕ່ລະພອດໃນແຖວແຍກຕ່າງຫາກເພື່ອໃຫ້ຂໍ້ຄວາມຜິດພາດການລວບລວມຂໍ້ມູນຈະຊີ້ໄປຫາຈໍານວນແຖວທີ່ຂໍ້ຜິດພາດເກີດຂຶ້ນ. ເນື່ອງຈາກວ່າການເຊື່ອມຕໍ່ເຫຼົ່ານີ້ຖືກສ້າງຂື້ນໂດຍຊື່, ຄໍາສັ່ງທີ່ພວກເຂົາປາກົດແມ່ນບໍ່ກ່ຽວຂ້ອງ.
DUT instantiation ຍັງສາມາດຖືກສ້າງຂື້ນສໍາລັບໂມດູນທີ່ໂມດູນ testbench ມີຊື່ສັນຍານທີ່ແຕກຕ່າງກັນ. ການສ້າງແຜນທີ່ທີ່ຖືກຕ້ອງຂອງສັນຍານແມ່ນສິ່ງທີ່ສໍາຄັນໃນເວລາທີ່ instantiating.
Example:
ALU d0 (.a(A), // ສັນຍານ “a” ໃນ ALU ຄວນເຊື່ອມຕໍ່ກັບ “A” ໃນໂມດູນ ALU_tb
.clk(ໂມງ), // ສັນຍານ “clk” ໃນ ALU ຄວນເຊື່ອມຕໍ່ກັບ “ໂມງ” ໂມດູນ ALU_tb.
.out(OUT)); // ສັນຍານ "ອອກ" ໃນ ALU ຄວນເຊື່ອມຕໍ່ກັບ "OUT" ໃນໂມດູນ ALU_tb
ສະເຫມີ & Initial Block ໃນ Testbench
ມີສອງຕັນຕາມລໍາດັບໃນ Verilog, ເບື້ອງຕົ້ນແລະສະເຫມີ. ມັນແມ່ນຢູ່ໃນຕັນເຫຼົ່ານີ້ທີ່ພວກເຮົານໍາໃຊ້ການກະຕຸ້ນ.
ຕັນເບື້ອງຕົ້ນ
ຕັນເບື້ອງຕົ້ນທີ່ຖືກປະຕິບັດພຽງແຕ່ຄັ້ງດຽວແລະສິ້ນສຸດລົງເມື່ອເສັ້ນສຸດທ້າຍຂອງບລັອກຖືກປະຕິບັດ. ການກະຕຸ້ນແມ່ນຂຽນເຂົ້າໄປໃນຕັນເບື້ອງຕົ້ນ. (ເບິ່ງເສັ້ນ 54-72 ໃນຮູບ 5)
syntax:
..
ເລີ່ມຕົ້ນ
$dumpfile();
$dumpvars();
..(ເຂົ້າກະຕຸ້ນ)
ສິ້ນສຸດ
ຕັນເບື້ອງຕົ້ນເລີ່ມຕົ້ນການປະຕິບັດຂອງມັນໃນຕອນເລີ່ມຕົ້ນຂອງການຈໍາລອງໃນເວລາ t = 0. ເລີ່ມຕົ້ນດ້ວຍເສັ້ນທໍາອິດລະຫວ່າງຈຸດເລີ່ມຕົ້ນແລະສິ້ນສຸດ, ແຕ່ລະເສັ້ນປະຕິບັດຈາກເທິງຫາລຸ່ມຈົນກ່ວາຄວາມລ່າຊ້າແມ່ນບັນລຸໄດ້. ເມື່ອເຖິງຄວາມລ່າຊ້າ, ການປະຕິບັດຂອງຕັນນີ້ລໍຖ້າຈົນກ່ວາເວລາຊັກຊ້າ (10 ຫນ່ວຍເວລາ) ໄດ້ຜ່ານໄປແລະຫຼັງຈາກນັ້ນເລືອກເອົາການປະຕິບັດອີກເທື່ອຫນຶ່ງ.
ຜູ້ໃຊ້ສາມາດກໍານົດ stimuli ໂດຍໃຊ້ loops (ສໍາລັບ, ໃນຂະນະທີ່, if-else) ເຊັ່ນດຽວກັນພາຍໃນຕັນເບື້ອງຕົ້ນນີ້ແທນທີ່ຈະເຂົ້າໄປໃນການປະສົມທັງຫມົດດ້ວຍຕົນເອງ.
Example:
ການເລີ່ມຕົ້ນ
A = 0; b = 0; // ເລີ່ມການປະຕິບັດ
#10 a = 0; b = 1; // ການປະຕິບັດແມ່ນຢູ່ທີ່ t = 10-unit time
#10 a = 1; b = 0; // ການປະຕິບັດແມ່ນຢູ່ທີ່ t = 20-unit time
ສິ້ນສຸດ
ຖິ້ມຂີ້ເຫຍື້ອ Files
ສິ່ງອື່ນທີ່ຕ້ອງຢູ່ໃນໃຈແມ່ນການປະກາດຂອງ $ຖິ້ມfiles ແລະ $dumpvars ພາຍໃນທ່ອນໄມ້ເບື້ອງຕົ້ນ (ເບິ່ງເສັ້ນ 55- 56 ໃນຮູບ 5). ໄດ້ $ຖິ້ມfile ຖືກນໍາໃຊ້ເພື່ອ dump ການປ່ຽນແປງໃນມູນຄ່າຂອງ nets ແລະລົງທະບຽນໃນ a file ທີ່ມີຊື່ວ່າເປັນການໂຕ້ຖຽງຂອງມັນ.
ຕົວຢ່າງample:
$ຖິ້ມfile(“alu_tb.vcd”);
ຈະຖິ້ມການປ່ຽນແປງໃນ a file ຊື່ alu_tb.vcd. ການປ່ຽນແປງໄດ້ຖືກບັນທຶກໄວ້ໃນ a file ເອີ້ນວ່າ VCD file ທີ່ຢືນສໍາລັບການ dump ການປ່ຽນແປງມູນຄ່າ. ແຜ່ນວີຊີດີ (ການຖິ້ມການປ່ຽນແປງມູນຄ່າ) ເກັບຂໍ້ມູນທັງໝົດກ່ຽວກັບການປ່ຽນແປງມູນຄ່າ. ພວກເຮົາບໍ່ສາມາດມີຫຼາຍກວ່າຫນຶ່ງ $dumpfile ຖະແຫຼງການໃນການຈໍາລອງ Verilog.
ໄດ້ $dumpvars ຖືກນໍາໃຊ້ເພື່ອກໍານົດວ່າຕົວແປໃດທີ່ຈະຖືກຖິ້ມ (ໃນ file ກ່າວໂດຍ $dumpfile). ວິທີທີ່ງ່າຍທີ່ສຸດທີ່ຈະໃຊ້ມັນແມ່ນໂດຍບໍ່ມີການໂຕ້ຖຽງໃດໆ. syntax ທົ່ວໄປຂອງ $dumpvars ແມ່ນ
$dumpvars ( <, >);
ໂດຍພື້ນຖານແລ້ວພວກເຮົາສາມາດລະບຸວ່າໂມດູນໃດ, ແລະຕົວແປໃດໃນໂມດູນຈະຖືກຖິ້ມ. ວິທີທີ່ງ່າຍທີ່ສຸດທີ່ຈະໃຊ້ນີ້ແມ່ນການກໍານົດລະດັບເປັນ 0 ແລະຊື່ໂມດູນເປັນໂມດູນເທິງ (ໂດຍປົກກະຕິແມ່ນໂມດູນ testbench ເທິງ).
$dumpvars(0, alu_tb);
ເມື່ອລະດັບຖືກຕັ້ງເປັນ 0, ແລະພຽງແຕ່ລະບຸຊື່ໂມດູນ, ມັນຈະຖິ້ມທຸກຕົວແປຂອງໂມດູນນັ້ນແລະຕົວແປທັງຫມົດໃນທຸກໂມດູນລະດັບຕ່ໍາທີ່ທັນທີໂດຍໂມດູນເທິງນີ້. ຖ້າໂມດູນໃດ ໜຶ່ງ ທີ່ບໍ່ທັນສະ ໄໝ ໂດຍໂມດູນເທິງນີ້, ຕົວແປຂອງມັນຈະບໍ່ຖືກປົກຄຸມ. ສິ່ງຫນຶ່ງຫຼາຍ, ການປະກາດຂອງ $ຖິ້ມfile ຕ້ອງມາກ່ອນ $dumpvars ຫຼືວຽກງານລະບົບອື່ນໆທີ່ລະບຸການ dump. ການຖິ້ມຂີ້ເຫຍື້ອເຫຼົ່ານີ້ files ຕ້ອງໄດ້ຮັບການປະກາດກ່ອນການກະຕຸ້ນການປ້ອນຂໍ້ມູນອື່ນ, ບໍ່ມີຄຸນຄ່າຈະຖືກບັນທຶກໄວ້ໃນ dump ເຫຼົ່ານີ້. files.
ບລັອກສະເໝີ
ກົງກັນຂ້າມກັບຄໍາຖະແຫຼງການເບື້ອງຕົ້ນ, ຕັນສະເຫມີປະຕິບັດຊ້ໍາກັນ, ເຖິງແມ່ນວ່າການປະຕິບັດເລີ່ມຕົ້ນໃນເວລາ t = 0. ສໍາລັບ ex.ampດັ່ງນັ້ນ, ສັນຍານໂມງແມ່ນມີຄວາມຈໍາເປັນສໍາລັບການດໍາເນີນງານຂອງວົງຈອນຕາມລໍາດັບເຊັ່ນ Flip-flops. ມັນຈໍາເປັນຕ້ອງໄດ້ສະຫນອງຢ່າງຕໍ່ເນື່ອງ. ດັ່ງນັ້ນ, ພວກເຮົາສາມາດຂຽນລະຫັດສໍາລັບການເຮັດວຽກຂອງໂມງໃນ testbench ເປັນ (ເບິ່ງເສັ້ນ 52 ໃນຮູບ 5):
ສະເໝີ
#10 clk = ~clk;
ໂມດູນສຸດທ້າຍ
ຄໍາຖະແຫຼງທີ່ຂ້າງເທິງໄດ້ຮັບການປະຕິບັດຫຼັງຈາກ 10 ns ເລີ່ມຈາກ t = 0. ມູນຄ່າຂອງ clk ຈະໄດ້ຮັບການ inverted ຫຼັງຈາກ 10 ns ຈາກຄ່າທີ່ຜ່ານມາ. ດັ່ງນັ້ນ, ການສ້າງສັນຍານໂມງຂອງ 20 ns pulse width. ດັ່ງນັ້ນ, ຄໍາຖະແຫຼງນີ້ສ້າງສັນຍານຂອງຄວາມຖີ່ 50 MHz. ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະສັງເກດວ່າ, ການເລີ່ມຕົ້ນຂອງສັນຍານແມ່ນເຮັດກ່ອນທີ່ຈະຕັນສະເຫມີ. ຖ້າພວກເຮົາບໍ່ເຮັດພາກສ່ວນເບື້ອງຕົ້ນ, ສັນຍານ clk ຈະເປັນ x ຈາກ t – 0, ແລະຫຼັງຈາກ 10 ns, ມັນຈະຖືກປ່ຽນກັບ x ອື່ນ.
ການກວດສອບຕົນເອງ Testbench
A testbench ການກວດສອບຕົນເອງປະກອບມີຄໍາຖະແຫຼງການເພື່ອກວດກາເບິ່ງສະຖານະການໃນປັດຈຸບັນ.
- $ຈໍສະແດງຜົນ ວຽກງານຂອງລະບົບສ່ວນໃຫຍ່ແມ່ນໃຊ້ເພື່ອສະແດງຂໍ້ຄວາມ debug ເພື່ອຕິດຕາມການໄຫຼເຂົ້າຂອງການຈໍາລອງ
ເລີ່ມຕົ້ນ
A = 0 ; b = 0 ; c = 0; #10; // ນຳໃຊ້ການປ້ອນຂໍ້ມູນ, ລໍຖ້າ
ຖ້າ (y ! == 1) ເລີ່ມຕົ້ນ
$display(“000 ລົ້ມເຫລວ”); // ກວດສອບ
c = 1; #10 ; // ນຳໃຊ້ການປ້ອນຂໍ້ມູນ, ລໍຖ້າ
ສິ້ນສຸດ
ອື່ນຖ້າ (y ! == 0) ເລີ່ມຕົ້ນ
$display(“001 ລົ້ມເຫລວ”) // check
b = 1; c = 0; #10 ; ສິ້ນສຸດ
ອື່ນຖ້າ(y!==0)
$display (“010 ລົ້ມເຫລວ”); // ກວດສອບ
ສິ້ນສຸດ
ໂມດູນສຸດທ້າຍ
$ຈໍສະແດງຜົນ ຖືກນໍາໃຊ້ເພື່ອສະແດງຄ່າຂອງຕົວແປ, ສະຕຣິງ, ຫຼືການສະແດງອອກ. ຈາກຂ້າງເທິງ example, ເມື່ອໃດກໍ່ຕາມຂອງ loop if-else ມີຄວາມພໍໃຈ, ຫຼັງຈາກນັ້ນບັນທຶກ simulator ຈະສະແດງ $ ຂອງຕົນຕາມລໍາດັບຈໍສະແດງຜົນ ຖະແຫຼງການ. ມີແຖວໃໝ່ຕາມຄ່າເລີ່ມຕົ້ນໃນຕອນທ້າຍຂອງສາຍ.
$ຈໍສະແດງຜົນ (“ເວລາ = %t , A = %b, B = %b, C = % b”, $ເວລາ, A,B,C);
ຕົວອັກສອນທີ່ໄດ້ກ່າວມາໃນວົງຢືມຈະໄດ້ຮັບການພິມອອກເປັນ. ຕົວອັກສອນພ້ອມກັບ % ໝາຍເຖິງຮູບແບບສະຕຣິງ. ພວກເຮົາໃຊ້ %b ເພື່ອສະແດງຂໍ້ມູນຖານສອງ. ພວກເຮົາສາມາດໃຊ້ %d, %h, %o ເພື່ອສະແດງຕົວເລກທົດສະນິຍົມ, ເລກຖານສິບຫົກ, ແລະເລກແປດ, ຕາມລໍາດັບ. %g ແມ່ນໃຊ້ເພື່ອສະແດງຕົວເລກທີ່ແທ້ຈິງ. ສິ່ງເຫຼົ່ານີ້ຈະຖືກແທນທີ່ດ້ວຍຄ່ານອກວົງຢືມໃນຄໍາສັ່ງທີ່ໄດ້ກ່າວມາ. ຕົວຢ່າງample, ຄໍາຖະແຫຼງຂ້າງເທິງຈະຖືກສະແດງຢູ່ໃນບັນທຶກການຈໍາລອງເປັນ: ເວລາ = 20, A = 0, B = 1, C = 0.
ຕາຕະລາງ 1. ຮູບແບບຕາຕະລາງ Verilog
ການໂຕ້ຖຽງ | ລາຍລະອຽດ |
%h, %H | ສະແດງຢູ່ໃນຮູບແບບເລກຖານສິບຫົກ |
%d, %D | ສະແດງຢູ່ໃນຮູບແບບທົດສະນິຍົມ |
%b, %B | ສະແດງຢູ່ໃນຮູບແບບຖານສອງ |
%m, %M | ສະແດງຊື່ຕາມລຳດັບ |
%s, %S | ສະແດງເປັນສະຕຣິງ |
%t, %T | ສະແດງໃນຮູບແບບເວລາ |
%f, %F | ສະແດງ 'ຈິງ' ໃນຮູບແບບທົດສະນິຍົມ |
%e, %E | ສະແດງ 'ຈິງ' ໃນຮູບແບບເລກກຳລັງ |
$ຈໍສະແດງຜົນ ສ່ວນໃຫຍ່ພິມຂໍ້ມູນຫຼືຕົວແປຍ້ອນວ່າມັນຢູ່ໃນທັນທີຂອງເວລານັ້ນເຊັ່ນ printf ໃນ C. ພວກເຮົາຕ້ອງກ່າວເຖິງ $ຈໍສະແດງຜົນ ສໍາລັບຂໍ້ຄວາມໃດກໍ່ຕາມທີ່ພວກເຮົາຕ້ອງ view ໃນບັນທຶກການຈໍາລອງ.
- $ເວລາ
$ເວລາ ແມ່ນວຽກງານຂອງລະບົບທີ່ຈະກັບຄືນເວລາປະຈຸບັນຂອງການຈໍາລອງ.
- $ຕິດຕາມກວດກາ
$ຕິດຕາມກວດກາ ຈະຕິດຕາມກວດກາຂໍ້ມູນຫຼືຕົວແປທີ່ມັນຖືກຂຽນແລະທຸກຄັ້ງທີ່ມີການປ່ຽນແປງຕົວແປ, ມັນຈະພິມ
ມູນຄ່າການປ່ຽນແປງ. ມັນບັນລຸຜົນກະທົບທີ່ຄ້າຍຄືກັນຂອງການໂທຫາ $display ຫຼັງຈາກທຸກໆຄັ້ງທີ່ມີການໂຕ້ຖຽງຂອງມັນ
ອັບເດດ. $ຕິດຕາມກວດກາ ແມ່ນຄ້າຍຄືວຽກງານທີ່ spawned ເພື່ອດໍາເນີນການໃນພື້ນຖານຂອງກະທູ້ຕົ້ນຕໍທີ່ຕິດຕາມກວດກາແລະ
ສະແດງການປ່ຽນແປງມູນຄ່າຂອງຕົວແປ argument ຂອງມັນ. $ຕິດຕາມກວດກາ ມີ syntax ດຽວກັນກັບ $ຈໍສະແດງຜົນ.
$ຕິດຕາມກວດກາ(“ເວລາ = %t, A = %b, B = %b, C = % b”, $ເວລາ, A,B,C);
ຈາກຮູບທີ 7 ທ່ານສາມາດສັງເກດເຫັນວ່າເສັ້ນໃຫມ່ຂອງລະຫັດໄດ້ຖືກເພີ່ມເຂົ້າໃນການປະເມີນຕົນເອງຂອງ testbench. ການຈັດວາງຂອງ $ຈໍສະແດງຜົນ ແລະ $ຕິດຕາມກວດກາ ຖະແຫຼງການໃນພາກສ່ວນຕ່າງໆຂອງ testbench ຈະເຮັດໃຫ້ຜົນໄດ້ຮັບທີ່ແຕກຕ່າງກັນ (ເບິ່ງຮູບ 8). $ເວລາ ທີ່ໄດ້ກ່າວມາໃນຄໍາຖະແຫຼງເຫຼົ່ານີ້ພິມເວລາທີ່ມູນຄ່າກໍາລັງຖືກພິມອອກ. ໃນເວລາດຽວກັນຫນ່ວຍງານເວົ້າວ່າ 170000, ພວກເຮົາສາມາດເຫັນໄດ້ວ່າມີຄວາມແຕກຕ່າງໃນມູນຄ່າສໍາລັບ A ແລະ B ເນື່ອງຈາກ $ຈໍສະແດງຜົນ ແລະ $ຕິດຕາມກວດກາ ຖະແຫຼງການ.
ຊອບແວ GTKWave
GTKWave ເປັນຄື້ນ GTK+ ທີ່ມີຄຸນສົມບັດຄົບຖ້ວນ viewer ສໍາລັບ Unix, Win32, ແລະ Mac OSX ທີ່ອ່ານ LXT, LXT2, VZT, FST, ແລະ GHW files ເຊັ່ນດຽວກັນກັບ VCD / EVCD ມາດຕະຖານ files ແລະອະນຸຍາດໃຫ້ຂອງເຂົາເຈົ້າ viewing. ຢ່າງເປັນທາງການຂອງຕົນ webເວັບໄຊຢູ່ທີ່ http://gtkwave.sourceforge.net/ . GTKWave ແມ່ນແນະນໍາ viewer ໂດຍ Icarus Verilog ເຄື່ອງມືຈໍາລອງ.
ເມື່ອຜູ້ໃຊ້ຖືກສ້າງຂື້ນຢ່າງສໍາເລັດຜົນ testbench ເພື່ອທົດສອບການເຮັດວຽກຂອງການອອກແບບ, ຜູ້ໃຊ້ສາມາດໃຊ້ຊອບແວ GTKWave ເພື່ອທົດສອບການເຮັດວຽກຂອງການອອກແບບ. view ຮູບແບບຄື້ນ.
ເພື່ອເປີດຊອບແວ GTKWave ກັບ view ຮູບແບບຄື້ນ, ຜູ້ໃຊ້ຕ້ອງການໃຫ້ຄລິກໃສ່ Simulate Testbench ປຸ່ມຢູ່ດ້ານເທິງຂອງແຖບເຄື່ອງມືຫຼືຈາກເມນູຕົ້ນຕໍ Tools → Simulation → Simulate Testbench. ຖ້າບໍ່ມີຂໍ້ຜິດພາດ syntax ຫຼັງຈາກນັ້ນຂຶ້ນຢູ່ກັບການອອກແບບ, GTKWave ຄວນຈະຖືກເປີດຕົວໂດຍອັດຕະໂນມັດຫຼືຜົນໄດ້ຮັບຂອງການກະຕຸ້ນໃນ testbench ຈະຖືກສະແດງຢູ່ໃນສ່ວນ Logger ຂອງປ່ອງຢ້ຽມ.
ຊອບແວ GTKWave ເປີດການຖິ້ມຮູບແບບ .vcdfile ອັດຕະໂນມັດ. ປ່ອງຢ້ຽມ GTKWave ບໍ່ສະແດງຮູບແບບຄື້ນເມື່ອມັນເປີດ. ນີ້ເຮັດໃຫ້ຜູ້ໃຊ້ໂອກາດທີ່ຈະເລືອກເອົາສັນຍານທີ່ມັນຕ້ອງການ view ແລະສັງເກດ. ເພື່ອເລືອກສັນຍານ, ຜູ້ໃຊ້ຕ້ອງການສະແດງ, ຜູ້ໃຊ້ຕ້ອງການຄລິກໃສ່ຊື່ຂອງໂມດູນ / ຕົວຢ່າງຂອງພວກເຂົາຢູ່ເບື້ອງຊ້າຍຂອງປ່ອງຢ້ຽມພາຍໃຕ້ແຖບ SST. ໂດຍການຄລິກທີ່ + ຂອງທຸກໆຕົວຢ່າງ, ທ່ານສາມາດເບິ່ງສັນຍານທີ່ກ່ຽວຂ້ອງກັນກັບຕົວຢ່າງນັ້ນໃນສ່ວນລຸ່ມ. ຫຼັງຈາກນັ້ນ, ທ່ານສາມາດ drag ແລະລົງສັນຍານທີ່ຕ້ອງການຫຼື double ຄລິກໃຫ້ເຂົາເຈົ້າໄດ້ຮັບການສະແດງຢູ່ໃນປ່ອງຢ້ຽມສັນຍານ. ນອກນັ້ນທ່ານຍັງສາມາດເລືອກທັງຫມົດ (CTRL + A) ແລະໃສ່ພວກມັນໃສ່ປ່ອງຢ້ຽມສັນຍານ (ເບິ່ງຮູບ 9).
ດຽວນີ້ສັນຍານຖືກເພີ່ມໃສ່ໜ້າຕ່າງສັນຍານ ແຕ່ມັນຍັງບໍ່ທັນຖືກຈຳລອງເທື່ອ. ຫຼັງຈາກທີ່ເພີ່ມສັນຍານທີ່ຕ້ອງການກັບປ່ອງຢ້ຽມສັນຍານ, ໃຫ້ຄລິກໃສ່ ເພື່ອໃຫ້ເຫມາະສົມກັບສັນຍານກັບຄວາມກວ້າງໃນປະຈຸບັນຂອງປ່ອງຢ້ຽມແລະຫຼັງຈາກນັ້ນໂຫຼດສັນຍານຈາກການໂຫຼດໃຫມ່
ສັນຍາລັກທີ່ມີຢູ່ໃນແຖບເຄື່ອງມື. ໃນປັດຈຸບັນທ່ານສາມາດເບິ່ງສັນຍານທີ່ມີຄ່າຕາມລໍາດັບຂອງເຂົາເຈົ້າ.
ຄ່າສັນຍານ
ໂດຍຄ່າເລີ່ມຕົ້ນ, ຄ່າຂອງສັນຍານຢູ່ໃນຮູບແບບເລກຖານສິບຫົກ ແລະຄື້ນທັງໝົດມີສີຂຽວ (ຖ້າແລ່ນຖືກຕ້ອງ).
ຜູ້ໃຊ້ສາມາດປ່ຽນຄຸນສົມບັດຂອງສັນຍານເຫຼົ່ານີ້ໂດຍການຄລິກຂວາໃສ່ສັນຍານ ແລະເລືອກຮູບແບບຂໍ້ມູນ ຫຼືຮູບແບບສີ. ຜູ້ໃຊ້ຍັງສາມາດໃສ່ສັນຍານຫວ່າງເປົ່າເພື່ອເຮັດໃຫ້ພາກສ່ວນລະຫວ່າງກຸ່ມຂອງສັນຍານ. ເມື່ອທ່ານມີຜົນ optical ທີ່ຕ້ອງການ, ທ່ານສາມາດບັນທຶກການຕັ້ງຄ່າຂອງທ່ານໂດຍການໄປ File → ຂຽນບັນທຶກ File.
ແຖບເຄື່ອງມື GTKWave
ແຖບເຄື່ອງມື (ເບິ່ງຮູບ 10) ອະນຸຍາດໃຫ້ຜູ້ໃຊ້ປະຕິບັດຫນ້າທີ່ພື້ນຖານສໍາລັບສັນຍານ. ໃຫ້ພວກເຮົາປຶກສາຫາລືແຕ່ລະທາງເລືອກໃນແຖບເຄື່ອງມືຈາກຊ້າຍຫາຂວາ.
- ຕົວເລືອກເມນູ: ພາຍໃຕ້ທາງເລືອກນີ້ພວກເຮົາສາມາດເຮັດໄດ້ view ທັງຫມົດລັກສະນະຕ່າງໆຂອງຊອບແວທີ່ສາມາດຖືກນໍາໃຊ້ເພື່ອຫຼິ້ນປະມານກັບຊອບແວໄດ້. ລາຍລະອຽດພາຍໃຕ້ຕົວເລືອກເມນູນີ້ແມ່ນກວມເອົາພາຍໃຕ້ພາກທີ 8 ຂອງຄູ່ມືຜູ້ໃຊ້ນີ້.
- ຕັດຕາມຮອຍ: ມັນຖືກນໍາໃຊ້ເພື່ອລົບ / ຕັດສັນຍານທີ່ເລືອກຈາກປ່ອງຢ້ຽມສັນຍານ
- ສຳເນົາການຕິດຕາມ: ມັນຖືກນໍາໃຊ້ເພື່ອຄັດລອກສັນຍານທີ່ເລືອກຈາກປ່ອງຢ້ຽມສັນຍານ
- ວາງຮ່ອງຮອຍ: ຮ່ອງຮອຍທີ່ຄັດລອກ / ຕັດສາມາດຖືກວາງໄວ້ໃນບ່ອນອື່ນໃນປ່ອງຢ້ຽມສັນຍານ
- ຊູມພໍດີ: ມັນຖືກນໍາໃຊ້ເພື່ອໃຫ້ເຫມາະສົມກັບສັນຍານຕາມຂະຫນາດຂອງປ່ອງຢ້ຽມທີ່ຜູ້ໃຊ້ເລືອກທີ່ຈະສະແດງ
- ຊູມເຂົ້າ: ມັນຖືກນໍາໃຊ້ເພື່ອຊູມຢູ່ໃນປ່ອງຢ້ຽມສັນຍານ
- ຊູມອອກ: ມັນຖືກນໍາໃຊ້ເພື່ອຊູມອອກປ່ອງຢ້ຽມສັນຍານ
- ຊູມຍົກເລີກ: ມັນຖືກນໍາໃຊ້ເພື່ອຍົກເລີກການຊູມເຂົ້າ / ອອກຢູ່ໃນປ່ອງຢ້ຽມສັນຍານ
- ຊູມເພື່ອເລີ່ມຕົ້ນ: ນີ້ຈະຊູມໜ້າຈໍສັນຍານ, ສະແດງເວລາເລີ່ມຕົ້ນຂອງສັນຍານ.
- ຊູມຈົນຈົບ: ນີ້ຈະຊູມໜ້າຈໍສັນຍານສະແດງເວລາສິ້ນສຸດຂອງສັນຍານ
- ຊອກຫາຂອບກ່ອນໜ້າ: ອັນນີ້ປ່ຽນເຄື່ອງໝາຍໄປທາງຊ້າຍທີ່ຊີ້ບອກຂອບກ່ອນໜ້າ
- ຊອກຫາຂອບຕໍ່ໄປ: ອັນນີ້ປ່ຽນເຄື່ອງໝາຍໄປທາງຂວາຊີ້ບອກຂອບຕໍ່ໄປ
- ເລື່ອນພັນທະບັດຕ່ໍາ/ເທິງ: ການນໍາໃຊ້ນີ້ພວກເຮົາສາມາດກໍານົດໄລຍະເວລາທີ່ຜູ້ໃຊ້ຕ້ອງການສະແດງ. ຕົວຢ່າງample, ພວກເຮົາສາມາດກໍານົດເວລາ 0 sec ຫາ 500 ns, ມັນຈະສະແດງສັນຍານພາຍໃຕ້ໄລຍະເວລານັ້ນເທົ່ານັ້ນ.
- ໂຫຼດໃໝ່: ການໂຫຼດຄືນໃໝ່ຖືກກົດທຸກຄັ້ງທີ່ມີການປ່ຽນແປງຕໍ່ກັບສັນຍານທີ່ສະແດງ. ມັນຈະໂຫຼດໃຫມ່ແລະສະແດງສັນຍານຕາມຕົວກໍານົດການໃຫມ່. ຕົວຢ່າງample, ຫຼັງຈາກການປ່ຽນແປງໄລຍະເວລາຂອງສັນຍານ, ພວກເຮົາຈໍາເປັນຕ້ອງໂຫຼດສັນຍານໃຫມ່ເພື່ອສະແດງສັນຍານໃນກອບເວລາທີ່ກໍານົດໄວ້ໃຫມ່.
ຕົວເລືອກເມນູ
ຈາກມຸມຊ້າຍເທິງຂອງຊອບແວ GTKWave, ຜູ້ໃຊ້ສາມາດເຂົ້າເຖິງຕົວເລືອກເມນູໂດຍການຄລິກໃສ່ສາມເສັ້ນຕັ້ງ (ເບິ່ງຮູບ 11). ຜູ້ໃຊ້ສາມາດຊອກຫາຕົວເລືອກຕໍ່ໄປນີ້ພາຍໃຕ້ຕົວເລືອກເມນູ:
File
ໄດ້ File ເມນູຍ່ອຍປະກອບມີລາຍການຕ່າງໆທີ່ກ່ຽວຂ້ອງກັບການເຂົ້າເຖິງ files, ການນໍາເຂົ້າ-ສົ່ງອອກ VCD files, ການພິມ, ແລະການອ່ານ / ຂຽນ files ແລະອອກ.
ແກ້ໄຂ
ເມນູຍ່ອຍ Edit ຖືກນໍາໃຊ້ເພື່ອປະຕິບັດຫນ້າທີ່ເປັນປະໂຫຍດຕ່າງໆເຊັ່ນ: ການປ່ຽນແປງການສະແດງຂໍ້ມູນຂອງຄ່າໃນປ່ອງຍ່ອຍຂອງຄື້ນ. ການນໍາໃຊ້ທາງເລືອກພາຍໃຕ້ເມນູຍ່ອຍແກ້ໄຂ, ຜູ້ໃຊ້ສາມາດປ່ຽນຮູບແບບຂໍ້ມູນຂອງສັນຍານ, ຈັດລຽງໃຫມ່, ປ່ຽນພວກມັນ, ຕັດມັນ, ເນັ້ນມັນ, ສັນຍານກຸ່ມ, ຄໍາເຫັນກ່ຽວກັບສັນຍານ, ປ່ຽນສີຂອງສັນຍານ, ແລະອື່ນໆ.
ຄົ້ນຫາ
ເມນູຍ່ອຍຄົ້ນຫາຖືກນໍາໃຊ້ເພື່ອດໍາເນີນການຄົ້ນຫາຊື່ສຸດທິແລະຄ່າ. ມັນຊ່ວຍປະຕິບັດຫນ້າທີ່ໃນລະດັບລໍາດັບຊັ້ນທີ່ແຕກຕ່າງກັນຂອງສັນຍານແລະຕົວຢ່າງໃນ VCD file.
ເວລາ
ເມນູຍ່ອຍເວລາມີ superset ຂອງຟັງຊັນທີ່ປະຕິບັດໂດຍ Navigations ແລະປຸ່ມ Status Panel.
ມັນເຮັດໃຫ້ງ່າຍດາຍ, ທີ່ກ່ຽວຂ້ອງກັບເວລາ, ຫນ້າທີ່ເຊັ່ນການຊູມ, ການເຄື່ອນຍ້າຍໄປຈຸດທີ່ໃຊ້ເວລາສະເພາະໃດຫນຶ່ງ, ການປ່ຽນແປງສັນຍານໃນທິດທາງສະເພາະໃດຫນຶ່ງ, ແລະອື່ນໆ.
ເຄື່ອງໝາຍ
ເມນູຍ່ອຍເຄື່ອງໝາຍຖືກໃຊ້ເພື່ອປະຕິບັດການຫມູນໃຊ້ຕ່າງໆໃນເຄື່ອງໝາຍເຊັ່ນດຽວກັນກັບການຄວບຄຸມການເລື່ອນອອກນອກໜ້າຈໍ.
ມັນເຮັດໃຫ້ການທໍາງານຂອງການເພີ່ມເຄື່ອງຫມາຍຈໍານວນຫລາຍຢູ່ໃນປ່ອງຢ້ຽມສັນຍານ. ອະນຸຍາດເຄື່ອງໝາຍຊື່ສູງສຸດ 26 ຊື່ ແລະເວລາສຳລັບທຸກຄົນຕ້ອງແຕກຕ່າງກັນ.
a. ເພື່ອເພີ່ມ Markers ໃນປ່ອງຢ້ຽມສັນຍານ
ຄລິກຊ້າຍໃສ່ຈຸດທີ່ຕ້ອງການທີ່ທ່ານຕ້ອງການວາງ Marker ແລະກົດ ALT + N. ນີ້ຈະວາງເຄື່ອງຫມາຍທີ່ມີຊື່ (A, B, C, ແລະອື່ນໆ) ຢູ່ໃນຈຸດທີ່ຕ້ອງການ. ຜູ້ໃຊ້ສາມາດສືບຕໍ່ເຮັດສິ່ງນີ້ສໍາລັບ 26 ສະຖານທີ່ເວລາທີ່ແຕກຕ່າງກັນ.
ເພື່ອປຽບທຽບຄ່າເວລາຢູ່ທຸກບ່ອນຂອງເຄື່ອງໝາຍ, ເມນູ → ເຄື່ອງໝາຍ → ສະແດງຂໍ້ມູນການປ່ຽນແປງເຄື່ອງໝາຍ.
ນີ້ຈະເປີດປ່ອງຢ້ຽມທີ່ມີມູນຄ່າເວລາໃນແຕ່ລະເຄື່ອງຫມາຍ. ຜູ້ໃຊ້ສາມາດບັນທຶກຄ່າເວລາຂອງແຕ່ລະເຄື່ອງໝາຍທີ່ວາງໄວ້ ແລະ ຫັກອອກເພື່ອຄິດໄລ່ຄວາມແຕກຕ່າງຂອງເວລາລະຫວ່າງ 2 ເຄື່ອງໝາຍ.
b. ເພື່ອເອົາ Marker ໃນປ່ອງຢ້ຽມສັນຍານ
ຜູ້ໃຊ້ສາມາດເຂົ້າໄປທີ່ Menu → Markers → Collect Named Marker. ນີ້ຈະເອົາເຄື່ອງຫມາຍຊື່ສຸດທ້າຍທີ່ວາງໄວ້ໃນປ່ອງຢ້ຽມສັນຍານ. ຜູ້ໃຊ້ສາມາດເອົາເຄື່ອງຫມາຍທີ່ມີຊື່ທັງຫມົດໂດຍການໄປທີ່ເມນູ → ເຄື່ອງຫມາຍ → ເກັບກໍາຂໍ້ມູນຊື່ທັງຫມົດ (ຮູບ 12).
ໃນຮູບທີ 13, ພວກເຮົາສາມາດເຫັນໄດ້ວ່າສີສັນຍານໄດ້ຖືກປ່ຽນແປງແນວໃດ. ທ່ານສາມາດສັງເກດເຫັນສັນຍານເປົ່າຫວ່າງເພີ່ມເຂົ້າໄປໃນປ່ອງຢ້ຽມສັນຍານເຊັ່ນດຽວກັນກັບຄໍາເຫັນ – Blank Signal.
ນອກຈາກນີ້ຍັງສັງເກດເຫັນການມີ 6 ເຄື່ອງຫມາຍທີ່ມີຊື່ (A – E) ແລະ compurgation ຂອງມູນຄ່າທີ່ໃຊ້ເວລາລະຫວ່າງເຄື່ອງຫມາຍເຫຼົ່ານີ້ຢູ່ໃນ ps.
View
ໄດ້ View ເມນູຍ່ອຍຖືກນໍາໃຊ້ເພື່ອຄວບຄຸມຄຸນລັກສະນະຕ່າງໆທີ່ກ່ຽວຂ້ອງກັບການສະແດງກາຟິກຂອງລາຍການສະຖານະພາບເຊັ່ນດຽວກັນກັບຄ່າໃນປ່ອງຢ້ຽມຍ່ອຍຂອງສັນຍານ. ຈາກເມນູນີ້, ທ່ານສາມາດປ່ຽນປ່ອງຢ້ຽມສັນຍານເປັນສີດໍາ & ສີຂາວຫຼືສີເຊັ່ນດຽວກັນ. ໄດ້ View ເມນູຍ່ອຍຍັງຊ່ວຍໃຫ້ທ່ານສາມາດປ່ຽນເວລາ Dimension ຈາກວິນາທີ (ວິນາທີ) ຫາ ficoseconds (fs). ຜູ້ໃຊ້ສາມາດຊອກຫາທາງເລືອກນີ້ View → ຂະຫນາດຕາມເວລາ → fs.
ຊ່ວຍເຫຼືອ
ເມນູຍ່ອຍຊ່ວຍເຫຼືອປະກອບມີທາງເລືອກໃນການເປີດໃຊ້ການຊ່ວຍເຫຼືອອອນໄລນ໌ເຊັ່ນດຽວກັນກັບການສະແດງຂໍ້ມູນສະບັບຂອງໂປຣແກຣມ.
ສະຫຼຸບ
ເອກະສານນີ້ຖືກສ້າງຂື້ນເພື່ອຊ່ວຍຜູ້ໃຊ້ໃນການຈໍາລອງການອອກແບບຢ່າງສໍາເລັດຜົນແລະການກວດສອບການເຮັດວຽກໂດຍການແກ້ໄຂການຮ່າງ testbench ທີ່ຈໍາເປັນແລະນໍາໃຊ້ Icarus Verilog ພ້ອມກັບ GTKWave ເພື່ອສະແດງຮູບຄື້ນແລະສັງເກດຜົນໄດ້ຮັບ.
ປະຫວັດການແກ້ໄຂ
ການທົບທວນ | ວັນທີ | ລາຍລະອຽດ |
1.00 | ວັນທີ 20 ພຶດສະພາ 2024 | ການປ່ອຍຕົວໃນເບື້ອງຕົ້ນ. |
R19US0011EU0100 Rev.1.0
ວັນທີ 20 ພຶດສະພາ 2024
© 2024 Renesas Electronics
ເອກະສານ / ຊັບພະຍາກອນ
![]() |
ການຈຳລອງຊອບແວ RENESAS ForgeFPGA [pdf] ຄູ່ມືຜູ້ໃຊ້ REN_r19us0011eu0100, ການຈຳລອງຊອບແວ ForgeFPGA, ຊອບແວ ForgeFPGA, ForgeFPGA, ການຈຳລອງ ForgeFPGA, ການຈຳລອງຊອບແວ, ການຈຳລອງ, ຊອບແວ |