PL点亮LED灯

PL点亮LED灯

LED硬件

开发板在PL端给了一个LED灯,电压给低的时候才导通,才亮。然后需要看原理图确定具体是用的PL的哪个管脚以便进行控制。
在这里插入图片描述

Vivado 工程创建

  1. 打开
  2. 创建新工程
  3. 选择工程名和工程目录(不能有中文路径,也不能太长)
  4. 选择RTL工程和verilog
  5. 选器件

编写Verilog HDL文件

右边的add sources进行文件的添加和创建。

IBUFDS原语用于将差分输入信号转化成标准单端信号,且可加入可选延迟。在IBUFDS原语中,输入信号为I、IB,一个为主,一个为从,二者相位相反。
IBUFDS的逻辑真值表所列,其中“-*”表示输出维持上一次的输出值,保持不变。
`timescale 1ns / 1ps 
module led( 
	//Differential system clock 
	input sys_clk_p, 
	input sys_clk_n, 
	input rst_n, 
	output reg led 
	); 
	
	reg[31:0] timer_cnt; 
	wire sys_clk ;
// 由于输入时钟为 2 00MHz 的差分时钟,因此需要添加 IBUFDS 原语连接差分信号
IBUFDS IBUFDS_inst ( 
	.O(sys_clk), // Buffer output 
	.I(sys_clk_p), // Diff_p buffer input (connect directly to top-level port)   
	.IB(sys_clk_n) // Diff_n buffer input (connect directly to top-level port) 
	);

always@(posedge sys_clk) 
begin 
	if (!rst_n) 
	begin 
		led <= 1'b0 ; 
		timer_cnt <= 32'd0 ; 
	end 
	else if(timer_cnt >= 32'd199_999_999) //1 second counter, 200M-1=199999999 
	begin 
		led <= ~led; 
		timer_cnt <= 32'd0;
	end 
	else 
	begin 
		led <= led; 
		timer_cnt <= timer_cnt + 32'd1; 
	end 
end 
endmodule

用了一个计数器来控制输出值的高低,到达给定值就进行一次取反。

添加管脚约束

xdc 文件里主要是完成管脚的约束时钟的约束 ,以及组的约束。这里我们需要对led.v 程序中的输入输出端口分配到 FPGA 的真实管脚上。

  1. Open Elaborated Design
  2. OK
  3. Window --> I/O Ports
  4. 设置管脚的约束
  5. 保存会自动生成xdc文件

添加时序约束

点击“ Run Synthesis ”综合后,Constraint s Wizard。

生成BIT文件

Generate Bitstream

Vivado仿真

需要编写激励文件,创建仿真文件。

`timescale 1ns / 1ps 
// 
// Module Name: vtf_led_test 
// 
module vtf_led_test; 
// Inputs 
reg sys_clk_p; 
reg rst_n ; 
wire sys_clk_n; 
// Outputs 
wire led; 
// Instantiate the Unit Under Test (UUT) 
led uut ( 
    .sys_clk_p(sys_clk_p), 
    .sys_clk_n(sys_clk_n), 
    .rst_n(rst_n), 
    .led(led) 
); 
initial 
begin 
// Initialize Inputs 
sys_clk_p = 0; 
rst_n = 0; 
// Wait for global reset to finish 
#1000; 
rst_n = 1; 
end
//Create clock 
always #2.5 sys_clk_p = ~ sys_clk_p; 
assign sys_clk_n = ~sys_clk_p ; 
endmodule

然后可以选择左边的仿真设置仿真条件后进行仿真。

上板

在线加载即可

在线调试

ILA IP核

Vivado 有内嵌的逻辑分析仪,叫做 ILA ,可以用于在线观察内部信号的变化,对于调试有很大帮助。
设置IP核并实例化。

ila ila_inst(
    .clk(sys_clk),
    .probe0(timer_cnt),
    .probe1(led)
);

MARK DEBUG

在代码中添加综合属性,实现在线调试。

module led( 
	//Differential system clock 
	input sys_clk_p, 
	input sys_clk_n, 
	input rst_n, 
(*MARK_DEBUG="true"*)	output reg led 
	); 
	
(*MARK_DEBUG="true"*)	reg[31:0] timer_cnt; 

保存,综合,Set Up Debug。
在xdc 文件中即可看到添加的 ila 核约束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值