vivado中vio使用教程,vivado综合实现详细流程

首页 > 实用技巧 > 作者:YD1662024-01-30 02:08:49

图8 VIO读数据

3、操作示例

这里给出一个寄存器读写的例子,在这里不用tcl脚本,直接用图形界面,使用更加方便。

(1)给地址为1的寄存器写入数据32'hffff_ffff,即配置vio_out_1[63:0]为64'h0000_0001_FFFF_FFFF,如图9所示。

vivado中vio使用教程,vivado综合实现详细流程(9)

图9 VIO 写入数据

(2) 将读地址设置为1,观察读数据变化,如图10所示。

vivado中vio使用教程,vivado综合实现详细流程(10)

图10 VIO读数据

观察图10可以发现,配置读地址vio_rd_addr为32'h0000_0001后,读数据vio_rd_data[31:0]由图9中的32'h0000_0000变为图10中的32'hffff_ffff,与写入的数据相同,寄存器读写操作成功。

三、源代码

1、VIO源码

// **************************************************************

// COPYRIGHT(c)2018, Xidian University

// All rights reserved.

//

// IP LIB INDEX : VIO

// IP Name : VIO

// File name :

// Module name :

// Full name :

//

// Author : Liu-Huan

// Email : assasin9997@163.com

// Data :

// Version : V 1.0

//

// Abstract :

// Called by :

//

// Modification history

// -----------------------------------------------------------------

// *****************************************************************

// *******************

// TIMESCALE

// *******************

`timescale 1ns/1ps

//*******************

//DEFINE MODULE PORT

//*******************

module VIO_CPU_PORT (

input clk

) ;

//*********************

//INNER SIGNAL DECLARATION

//*********************

//REGS

reg [31:0] mod_reg_0 = 32'b0 ;

reg [31:0] mod_reg_1 = 32'b0 ;

reg [31:0] mod_reg_2 = 32'b0 ;

reg [31:0] mod_reg_3 = 32'b0 ;

reg [31:0] mod_reg_4 = 32'b0 ;

reg [31:0] mod_reg_5 = 32'b0 ;

reg [31:0] mod_reg_6 = 32'b0 ;

reg [31:0] mod_reg_7 = 32'b0 ;

reg [31:0] mod_reg_8 = 32'b0 ;

reg [31:0] mod_reg_9 = 32'b0 ;

reg [31:0] mod_reg_10 = 32'b0 ;

reg [31:0] mod_reg_11 = 32'b0 ;

reg [31:0] mod_reg_12 = 32'b0 ;

reg [31:0] mod_reg_13 = 32'b0 ;

reg [31:0] mod_reg_14 = 32'b0 ;

reg [31:0] mod_reg_15 = 32'b0 ;

reg [31:0] mod_reg_16 = 32'b0 ;

reg [31:0] mod_reg_17 = 32'b0 ;

reg [31:0] mod_reg_18 = 32'b0 ;

reg [31:0] mod_reg_19 = 32'b0 ;

reg [31:0] mod_reg_20 = 32'b0 ;

reg [31:0] mod_reg_21 = 32'b0 ;

reg [31:0] mod_reg_22 = 32'b0 ;

reg [31:0] mod_reg_23 = 32'b0 ;

reg [31:0] mod_reg_24 = 32'b0 ;

reg [31:0] mod_reg_25 = 32'b0 ;

reg [31:0] mod_reg_26 = 32'b0 ;

reg [31:0] mod_reg_27 = 32'b0 ;

reg [31:0] mod_reg_28 = 32'b0 ;

reg [31:0] mod_reg_29 = 32'b0 ;

reg [31:0] mod_reg_30 = 32'b0 ;

reg [31:0] mod_reg_31 = 32'b0 ;

reg [63:0] vio_out_1_ff = 63'b0 ;

reg [31:0] vio_rd_data = 32'b0 ;

//WIRES

wire [63:0] vio_out_1 ;

wire [31:0] vio_out_2 ;

wire [31:0] vio_rd_addr ;

wire [31:0] vio_wr_addr ;

wire [31:0] vio_wr_data ;

reg wr_en ;

//*********************

//MAIN CORE

//*********************

vio_0 your_instance_name (

.clk(clk), // input wire clk

.probe_in0(vio_rd_data), // input wire [31 : 0] probe_in0

.probe_out0(vio_out_1), // output wire [63 : 0] probe_out0

.probe_out1(vio_out_2) // output wire [31 : 0] probe_out1

);

assign vio_rd_addr = vio_out_2;

assign vio_wr_addr = vio_out_1[63:32];

assign vio_wr_data = vio_out_1[31:0] ;

always @(posedge clk )

begin

vio_out_1_ff <= vio_out_1 ;

end

always @(posedge clk )

begin

if ( vio_out_1_ff != vio_out_1 )

wr_en <= 1'b1 ;

else

wr_en <= 1'b0 ;

end

always @(posedge clk )

begin

if ( wr_en == 1'b1 ) begin

case ( vio_wr_addr )

32'd0 : mod_reg_0 <= vio_wr_data ;

32'd1 : mod_reg_1 <= vio_wr_data ;

32'd2 : mod_reg_2 <= vio_wr_data ;

32'd3 : mod_reg_3 <= vio_wr_data ;

32'd4 : mod_reg_4 <= vio_wr_data ;

32'd5 : mod_reg_5 <= vio_wr_data ;

32'd6 : mod_reg_6 <= vio_wr_data ;

32'd7 : mod_reg_7 <= vio_wr_data ;

32'd8 : mod_reg_8 <= vio_wr_data ;

32'd9 : mod_reg_9 <= vio_wr_data ;

32'd10 : mod_reg_10 <= vio_wr_data ;

32'd11 : mod_reg_11 <= vio_wr_data ;

32'd12 : mod_reg_12 <= vio_wr_data ;

32'd13 : mod_reg_13 <= vio_wr_data ;

32'd14 : mod_reg_14 <= vio_wr_data ;

32'd15 : mod_reg_15 <= vio_wr_data ;

32'd16 : mod_reg_16 <= vio_wr_data ;

32'd17 : mod_reg_17 <= vio_wr_data ;

32'd18 : mod_reg_18 <= vio_wr_data ;

32'd19 : mod_reg_19 <= vio_wr_data ;

32'd20 : mod_reg_20 <= vio_wr_data ;

32'd21 : mod_reg_21 <= vio_wr_data ;

32'd22 : mod_reg_22 <= vio_wr_data ;

32'd23 : mod_reg_23 <= vio_wr_data ;

32'd24 : mod_reg_24 <= vio_wr_data ;

32'd25 : mod_reg_25 <= vio_wr_data ;

32'd26 : mod_reg_26 <= vio_wr_data ;

32'd27 : mod_reg_27 <= vio_wr_data ;

32'd28 : mod_reg_28 <= vio_wr_data ;

32'd29 : mod_reg_29 <= vio_wr_data ;

32'd30 : mod_reg_30 <= vio_wr_data ;

32'd31 : mod_reg_31 <= vio_wr_data ;

default :

begin

end

endcase

end

else

begin

end

end

always @(posedge clk)

begin

case ( vio_rd_addr )

32'd0 : vio_rd_data <= mod_reg_0 ;

32'd1 : vio_rd_data <= mod_reg_1 ;

32'd2 : vio_rd_data <= mod_reg_2 ;

32'd3 : vio_rd_data <= mod_reg_3 ;

32'd4 : vio_rd_data <= mod_reg_4 ;

32'd5 : vio_rd_data <= mod_reg_5 ;

32'd6 : vio_rd_data <= mod_reg_6 ;

32'd7 : vio_rd_data <= mod_reg_7 ;

32'd8 : vio_rd_data <= mod_reg_8 ;

32'd9 : vio_rd_data <= mod_reg_9 ;

32'd10 : vio_rd_data <= mod_reg_10 ;

32'd11 : vio_rd_data <= mod_reg_11 ;

32'd12 : vio_rd_data <= mod_reg_12 ;

32'd13 : vio_rd_data <= mod_reg_13 ;

32'd14 : vio_rd_data <= mod_reg_14 ;

32'd15 : vio_rd_data <= mod_reg_15 ;

32'd16 : vio_rd_data <= mod_reg_16 ;

32'd17 : vio_rd_data <= mod_reg_17 ;

32'd18 : vio_rd_data <= mod_reg_18 ;

32'd19 : vio_rd_data <= mod_reg_19 ;

32'd20 : vio_rd_data <= mod_reg_20 ;

32'd21 : vio_rd_data <= mod_reg_21 ;

32'd22 : vio_rd_data <= mod_reg_22 ;

32'd23 : vio_rd_data <= mod_reg_23 ;

32'd24 : vio_rd_data <= mod_reg_24 ;

32'd25 : vio_rd_data <= mod_reg_25 ;

32'd26 : vio_rd_data <= mod_reg_26 ;

32'd27 : vio_rd_data <= mod_reg_27 ;

32'd28 : vio_rd_data <= mod_reg_28 ;

32'd29 : vio_rd_data <= mod_reg_29 ;

32'd30 : vio_rd_data <= mod_reg_30 ;

32'd31 : vio_rd_data <= mod_reg_31 ;

default :

begin

vio_rd_data <= vio_rd_data ;

end

endcase

end

endmodule

2、约束文件源码

set_property PACKAGE_PIN Y9 [get_ports clk]

set_property IOSTANDARD LVCMOS33 [get_ports clk]

vivado中vio使用教程,vivado综合实现详细流程(11)

上述源码及约束文件适用于Xilinx的Zedboard开发板,已上板验证。另外,上面仅是原理性的简单演示,可以把寄存器应用于自己设计中的各个内部关键模块中,调试的过程中,实时的从VIO接口获取数据,或者动态的配置FPGA内部的寄存器,使其按照寄存器约定的功能运行。虽没有CPU,却等效有了CPU,可大大提高FPGA调试的效率。VIO占用资源情况与chipscope类似。

在PC上通过TCL或者其它语言捕获数据的功能在后续的文章中会陆续的公布,欢迎留言讨论。

上一页123末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.