Verilog เป็นภาษาคำอธิบายฮาร์ดแวร์ (HDL) ที่ใช้ในการออกแบบ, จำลอง, และตรวจสอบระบบอิเล็กทรอนิกส์ดิจิทัล โดยเฉพาะวงจรรวม (ICs) ถูกคิดค้นขึ้นในปี 1980 Verilog ช่วยให้นักวิศวกรสามารถอธิบายพฤติกรรมและโครงสร้างของระบบอิเล็กทรอนิกส์ในระดับนามธรรมที่แตกต่างกัน ตั้งแต่ระดับอัลกอริธึมสูงไปจนถึงระดับเกต บทบาทหลักของมันคือการอำนวยความสะดวกในการจำลองและสังเคราะห์วงจรดิจิทัล ทำให้การออกแบบและตรวจสอบส่วนประกอบฮาร์ดแวร์ที่ซับซ้อน เช่น CPU, FPGA (Field-Programmable Gate Arrays) และ ASIC (Application-Specific Integrated Circuits) เป็นไปอย่างมีประสิทธิภาพ
Verilog เริ่มต้นในปี 1984 เป็นภาษาที่พัฒนาโดย Gateway Design Automation โดยมีวัตถุประสงค์เริ่มต้นเพื่อให้เครื่องมือในการสร้างแบบจำลองสำหรับระบบดิจิทัล ในปี 1990 ได้ถูกซื้อโดย Cadence Design Systems ซึ่งช่วยให้การนำภาษานี้ไปใช้ในอุตสาหกรรมอิเล็กทรอนิกส์แพร่หลายมากขึ้น
ในปี 1995 Verilog ได้รับการมาตรฐานเป็น IEEE 1364 ทำให้มันกลายเป็นมาตรฐาน HDL อย่างเป็นทางการ การมาตรฐานนี้มีส่วนสำคัญต่อความนิยมของ Verilog ทำให้สามารถแข่งขันกับ HDL อื่น ๆ โดยเฉพาะ VHDL ซึ่งได้รับความนิยมในปี 1980 ผ่านการใช้งานในด้านการทหารและการบินอวกาศ
ในปีถัดมา Verilog ได้พัฒนาเพื่อรวมโครงสร้างสำหรับวิธีการออกแบบสมัยใหม่ เช่น SystemVerilog ซึ่งเป็นการขยายที่รวมฟีเจอร์จากทั้ง Verilog และแนวทางการเขียนโปรแกรมเชิงวัตถุ ปัจจุบัน SystemVerilog เป็นเครื่องมือทั้งสำหรับการตรวจสอบและการออกแบบ ซึ่งช่วยเพิ่มขีดความสามารถของ Verilog
จนถึงปัจจุบัน Verilog และการขยายของมันยังคงเป็นภาษาพื้นฐานในอุตสาหกรรมการออกแบบอิเล็กทรอนิกส์ (EDA) โดยมีระบบนิเวศที่แข็งแกร่งของเครื่องมือที่จัดเตรียมโดยบริษัทใหญ่ ๆ เช่น Synopsys, Mentor Graphics และ Cadence
บล็อกพื้นฐานใน Verilog คือโมดูล โมดูลประกอบด้วยอินพุต, เอาต์พุต และลอจิกภายใน
module my_adder(input a, input b, output sum);
assign sum = a + b;
endmodule
Verilog รองรับบล็อกเชิงกระบวนการ เช่น always
และ initial
ซึ่งอนุญาตให้มีลอจิกเชิงลำดับและการเริ่มต้น
always @(posedge clk) begin
q <= d; // เมื่อเกิดขอบขาขึ้นของ clk ให้กำหนด d ให้กับ q
end
การกำหนดค่าต่อเนื่องสามารถทำได้โดยใช้คำสั่ง assign
ซึ่งทำให้แน่ใจว่าเอาต์พุตสะท้อนการเปลี่ยนแปลงในอินพุตทันที
wire out;
assign out = a & b; // เกต AND
Verilog อนุญาตให้มีการสร้างแบบจำลองโดยตรงโดยใช้พรีมิติฟในตัว เช่น AND, OR, และ NOT
and my_and(out, a, b); // สร้างเกต AND
Testbenches ถูกใช้ใน Verilog เพื่อจำลองและตรวจสอบฟังก์ชันการทำงานของการออกแบบ
module tb_my_adder;
reg a, b;
wire sum;
my_adder dut (.a(a), .b(b), .sum(sum)); // สร้างการออกแบบ
initial begin
a = 0; b = 0; #10; // กำหนดอินพุตและรอ
a = 1; #10;
b = 1; #10;
end
endmodule
Verilog รองรับคำสั่งเงื่อนไข เช่น if
, case
สำหรับการตัดสินใจในบล็อกเชิงกระบวนการ
if (sel) begin
out = a;
end else begin
out = b;
end
ลูปสามารถใช้ใน Verilog สำหรับการกำหนดค่าและการดำเนินการซ้ำ
for (i = 0; i < 8; i = i + 1) begin
// ดำเนินการ
end
Verilog อนุญาตให้มีโมดูลที่มีพารามิเตอร์ ทำให้การออกแบบสามารถนำกลับมาใช้ใหม่ได้ด้วยการกำหนดค่าที่แตกต่างกัน
module my_multiplier #(parameter WIDTH = 8)(input [WIDTH-1:0] a, input [WIDTH-1:0] b, output [2*WIDTH-1:0] product);
assign product = a * b;
endmodule
Verilog ให้ความสามารถในการกำหนดงานและฟังก์ชันสำหรับการออกแบบโค้ดแบบโมดูล
function [7:0] add(input [7:0] a, input [7:0] b);
add = a + b;
endfunction
การกำหนดค่าแบบไม่บล็อกโดยใช้ตัวดำเนินการ <=
ช่วยให้การสร้างแบบจำลองการออกแบบซิงโครนัสทำได้ดีขึ้น
always @(posedge clk) begin
q <= d; // กำหนดให้ดำเนินการในภายหลัง
end
การพัฒนา Verilog ได้รับการสนับสนุนผ่านเครื่องมือและ IDE ที่หลากหลาย ซอฟต์แวร์ที่ใช้กันทั่วไป ได้แก่ ModelSim, Synopsys VCS, และ Cadence Incisive ซึ่งให้ความสามารถในการจำลอง, สังเคราะห์, และดีบัก
ในการสร้างโปรเจกต์ Verilog คุณมักจะเขียนโค้ด Verilog ของคุณในไฟล์ .v
จากนั้นคุณสามารถเรียกใช้เครื่องมือจำลองหรือสังเคราะห์จากบรรทัดคำสั่งหรือภายใน IDE ตัวอย่างคำสั่งการคอมไพล์อาจมีลักษณะดังนี้:
vcs my_design.v -o my_sim
หลังจากการคอมไพล์ คุณสามารถรันการจำลองด้วย:
./my_sim
Verilog ถูกใช้เป็นหลักในการออกแบบและตรวจสอบวงจรดิจิทัล รวมถึง:
ความสามารถในการสร้างแบบจำลองฮาร์ดแวร์ในระดับนามธรรมที่แตกต่างกันทำให้มันมีความหลากหลายสำหรับการใช้งานมากมายในอุตสาหกรรมอิเล็กทรอนิกส์
Verilog มักถูกเปรียบเทียบกับภาษาฮาร์ดแวร์ HDL อื่น ๆ เช่น VHDL แม้ว่าทั้งสองจะมีวัตถุประสงค์ที่คล้ายกัน แต่ Verilog มักถูกมองว่าง่ายต่อการเรียนรู้เนื่องจากไวยากรณ์ที่เรียบง่ายซึ่งคล้ายกับภาษาการเขียนโปรแกรม C VHDL จะถูกเลือกใช้สำหรับการออกแบบที่มีรายละเอียดมากขึ้นซึ่งต้องการการตรวจสอบประเภทที่เข้มงวดและมักถูกใช้ในงานของรัฐบาลและการบินอวกาศ
เมื่อเปรียบเทียบกับภาษาการเขียนโปรแกรมซอฟต์แวร์ เช่น C และ Java Verilog จะมุ่งเน้นไปที่โครงสร้างฮาร์ดแวร์และกระบวนการพร้อมกัน ในขณะที่ภาษาซอฟต์แวร์จะจัดการกับลอจิกเชิงลำดับและเชิงกระบวนการ Python สามารถใช้สำหรับการทดสอบระดับสูงและการประมวลผลข้อมูลการจำลอง แต่ไม่ให้วิธีการโดยตรงสำหรับการอธิบายฮาร์ดแวร์
สำหรับผู้ที่ต้องการแปลการออกแบบ Verilog ไปยังรูปแบบ HDL อื่น ๆ มีเครื่องมือเช่น Calyx และซอฟต์แวร์โอเพนซอร์สอื่น ๆ ที่มีอยู่เพื่ออำนวยความสะดวกในกระบวนการนี้ อย่างไรก็ตาม ลักษณะเฉพาะของ Verilog อาจทำให้การแปลโดยตรงเป็นเรื่องท้าทายเนื่องจากความแตกต่างในนามธรรมและเจตนาของแต่ละภาษา
เครื่องมือเช่น Verilator หรือ Yosys ได้รับการพัฒนาเพื่อช่วยในการแปลงโค้ด Verilog เป็นรูปแบบต่าง ๆ หรือเพิ่มประสิทธิภาพ และพวกเขามีความสามารถในการสังเคราะห์และจำลอง เครื่องมือเหล่านี้มีประโยชน์โดยเฉพาะในการรวมการออกแบบ Verilog เข้ากับสภาพแวดล้อมที่มุ่งเน้นการไหล