这里以Quartus免费版举例
1. 项目建立:
- 打开Quartus,从【File=>NewProjectWizard】新建一个项目。
- 给项目设立文件夹,命名,并且选择Simulation为‘ModelSim—Altera’,‘Verilog’
- Finish结束(因为我没有打算烧板子,其他就不选)
2. 编写Verilog设计文件:
1.从【File=>New】新建一个文件,选择【Design Files=>Verilog HDL File】新建v文件。
2. 开始编写Verilog。(代码引用来自: link)
module dff(clk,clr,rst,d,q);//clr清0,rst复位
input clk,clr,rst,d;
output q;
reg q;
always@(posedge clk or posedge clr)
begin
if(clr==1'b1)q<=1'b0;
else if(rst==1'b1)q<=1'b1;
else q<=d;
end
endmodule
- 保存,文件名请与model保持一致。点击上方蓝色三角形进行编译。
3. 1 使用Simulation Waveform Editor仿真:
1.在Quartus中,从【File=>New】新建一个文件,选择【Verification/DebuggingFilse=>UniversityProgramVMF】新建vmf文件。
2. 如图
3.
-
通过上方按钮拉一些波形
-
从【Simulation=>SimulationSetting】处,修改ModelSimScript框,把里面的‘ -novopt’这段删掉。完成点SAVE。
-
点击【Simulation=>RunFunctionalSimulation】,查看结果。
3. 2 使用Modelsim(Testbench) 仿真:
1.在Quartus中,打开【Assignments=>settings】框,查看这几个选项是否如图所示。
2.如图所示,生成testbench模板文件。
3. 在Quartus中,打开【File=>open】框,从项目文件里的【\simulation\modelsim】中找到vt文件,打开。
4. 编写vt文件。
`timescale 1 ps/ 1 ps
module DFF1_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg clk;
reg clr;
reg d;
reg rst;
// wires
wire q;
// assign statements (if any)
DFF1 i1 (
// port map - connection between master ports and signals/registers
.clk(clk),
.clr(clr),
.d(d),
.q(q),
.rst(rst)
);
initial
begin
clk=1'b0;
forever #10 clk=~clk;
end
initial
begin
clr=1'b0;
rst=1'b0; d=1'b0;
#10 rst=1'b1;clr=1'b0;d=1'b0;
#10 rst=1'b1;clr=1'b1;d=1'b1;
#10 rst=1'b0;clr=1'b0;d=1'b1;
#20 d=1'b0;
#20 d=1'b1;
end
always
// optional sensitivity list
// @(event1 or event2 or .... eventn)
begin
// code executes for every event on sensitivity list
// insert code here --> begin
@eachvec;
// --> end
end
endmodule
6.在Quartus中,打开【Assignments=>settings】框,如图点击testbench按钮。之后点NEW。
7.如图修改
8.在Quartus中,【Tool=>RunSimulationTool=>RTLSimulation】,打开弹出的Modelsim窗口。查看波形。