目录
一、创建工程
1.左边创建(或打开)工程,右侧可以快速打开最近打开过的工程。
2.来到这一步,命名工程并设置工程的存放路径(这里以D触发器为例)
3.选择RTL点击next。会来到添加文件环节(一般不需要)直接点击next。
4.选择芯片型号(根据开发板选,这里随便选的),完成后点next会弹出信息概要,finish完成。
二、创建文件
完成上述步骤会进入当前界面:
1.工程管理器add sourse添加(创建)设计文件,创建文件后选择Verilog语言并命名。
2.定义端口(可选),若在这定义后,文件会自动生成端口定义的代码,比自己敲省时间更方便。
(端口没有说明类型即默认wire类型,可根据情况定义reg类型:“output reg q”)。
3.设计文件创建完成
三、编写代码
1.代码以D触发器为例:
module dff( //D触发器
input wire clk, //时钟信号
input wire d, //输入信号
output reg q, //输出信号
output reg q_n //输出信号取反
);
always@(posedge clk) begin
q <= d;
q_n <= !d;
end
endmodule
2.保存后编译(Run Synthesls),再修改报错直到通过。
图示两处都是编译。点击后来到右图点OK(工作cpu数量与电脑有关,配置越高可选数量越多)。编译的报错可在massage里面查看,尤其注意 error、crucial warning 。
四、仿真验证
1.编译成功后创建仿真文件并完成代码编写,参考“步骤二”中设计文件的创建:
( 需选择 “add or create simulate sourse” )
test bench 代码如下:
`timescale 1ns / 1ps //timescale 时间单位/精度
module dff_tb( ); //仿真一般无端口列表
reg clk_sim;
reg d_sim;
wire q_sim;
wire q_n_sim;
always #10 clk_sim = ~clk_sim; //每10个时间单位对clk进行翻转,即周期为20个单位
initial begin
clk_sim = 0;
d_sim = 0;
#20; //延时20个时间单位(20ns)
d_sim = 1;
#40;
d_sim = 0;
#100;
$stop; //停止仿真
end
dff dff( //模块例化: 原模块名----在顶层文件中命名为
.clk (clk_sim), //原模块端口名----要连接的端口名
.d (d_sim),
.q (q_sim),
.q_n (q_n_sim)
);
endmodule
2.保存后编译(Run Synthesls),再修改报错直到通过。
3.波形仿真 点击Run Simulation
(注意1:当有多个tb文件时,选中要仿真的tb文件 右键设为顶层再仿真)
(注意2:vivado仿真上限时间在tool-setting-simulation中设置,仿真波形不全看看是否不够)
波形如图,每当clk上升沿到来时q输出d的值,说明代码实现D触发器的功能无误。
五、配置管脚
1.Run implement(跑成功后会解锁Run simulation里最后两个禁用的仿真选项(一般用不到))
2.跑完后点击上图Open Implement Design文字,再到状态栏点击Window - I/O Ports
再分配引脚(分配过的Fixed栏会自动打勾),设置相关参数(通常I/O standar 为LVCOMS33)。
3.ctrl+s保存,并完成命名后OK会生成XDC约束文件,约束文件打开位置见图二
(注意:后续要修管脚,建议把xdc文件先remove,再修管脚重新保存更新)
六、生成Bitstream文件并烧录
1.生成bit流文件
2.如图示步骤点击,自动连接硬件(开发板)。
3.烧录,连接开发板后会在这里出现芯片型号(对应新建工程时选择的型号),右键型号后点击“Program Device”再点Program烧录。