Vivado的使用—以流水灯为例

1. 打开vivado,打开已有工程或者新建工程。
当工程存在时选择Open Project打开.xpr文件。
当新建工程时,选择Create New Project(以下为新建工程及文件的操作步骤)。
在这里插入图片描述
2. Vivado工程的建立
(1)新建工程,对工程命名及选择保存路径。
Next,选择RTL Project。
Next,已有文件可以添加。
Next,选择器件型号。
Next,Finish。
在这里插入图片描述 在这里插入图片描述
(2)在Project Manager栏下为工程添加源文件。
点击Design Source,右键选择add source,选择add or create design sources。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加/新建.v文件(新建时对文件命名),选择OK,Finish。弹出模块名称后,点击OK,然后选择Yes。
(2)编写Verilog程序。
程序编写完成后保存,软件会自动检测语法错误,若有,会在工程及文件处出现红色波浪线,如下图所示,错误信息可在Message中查看。
在这里插入图片描述
(3)为工程添加仿真文件。
点击Design Source,右键选择add source(同上),选择add or create simulation sources,对文件命名,选择OK,Finish。
在这里插入图片描述
编写仿真测试程序后保存。
(4)Run Simulation进行波形仿真。
在左侧Simulation下选择Run Simulation,点击Run Behavioral Simulation(行为级仿真,也即功能仿真)。或者在主菜单下Flow→Run Simulation→Run Behavioral Simulation。
(5)点击左侧Run Synthesis进行综合。
(6)为工程添加管脚约束文件。
方法一:add sources→选择add or create constraints,文件保存名称为.xdc。
方法二:图形界面进行配置。左侧选择Open Implemented Design,在上方菜单栏中选择I/O pinning,然后在下方I/O port窗口展开引脚,编辑管脚信息。
配置完管脚信息后需要重新进行综合(Synthesis)与实现(Implement)。
(7)生成下载文件(.bit文件)。
选择左侧Program and Debug下的Generate Bitstream。
(8)选中设备,烧写文件。
选择左侧Program and Debug下的Open Hardware Manager,再打开Open Target(确保驱动已安装),下载.bit文件,右键设备,点击Program。

3.案例-流水灯程序代码及仿真结果
`timescale 1ns / 1ps
//
//流水灯,四个灯依次点亮
// Module Name: led_test
//

module led_test(
clk, //时钟
reset, //复位
led //输出状态灯
);
input clk;
input reset;
output [3:0] led;
reg [3:0] led;
reg [11:0] counter; //计数器
reg [2:0] state; //状态控制
//计数器
always @(posedge clk or negedge reset)
begin
if(!reset) begin
counter <= 12’d0;
end
else if ( counter == 12’d100) begin
counter <= 12’d0;
end
else begin
counter <= counter + 12’d1;
end
end
//状态跳转,通过计数器的计数值决定
always @(posedge clk or negedge reset)
begin
if(!reset) begin
state <= 3’d0;
end
else if( counter < 12’d20 )
state <= 3’d0;
else if( counter >= 12’d20 && counter < 12’d40 )
state <= 3’d1;
else if( counter >= 12’d40 && counter < 12’d60 )
state <= 3’d2;
else if( counter >= 12’d60 && counter < 12’d80 )
state <= 3’d3;
else if( counter >= 12’d80 && counter < 12’d100 )
state <= 3’d4;
end
//led状态控制
always @(posedge clk or negedge reset)
begin
if(!reset) begin
led <= 4’b1111;
end
else begin
case(state)
3’d0:led <= 4’b1110; //led低电平时点亮,默认状态为灭
3’d1:led <= 4’b1101; //以下为依次点亮各灯
3’d2:led <= 4’b1011;
3’d3:led <= 4’b0111;
3’d4:led <= 4’b1111;
default:led <= 4’b1111;
endcase
end
end

endmodule

顶层测试文件
`timescale 1ns / 1ps
module test_led;
reg clk;
reg reset;
wire [3:0] led;

initial begin
clk = 1’b0;
reset = 1’b0;
repeat(10) @(posedge clk);
reset = 1’b1;
repeat(1000) @(posedge clk);
$finish;
end
always #10 clk = ~clk;

led_test u0 (
.clk(clk),
.reset(reset),
.led(led)
);
endmodule
在这里插入图片描述

  • 7
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值