基于Vivado的C程序设计原理

来源:本站
导读:目前正在解读《基于Vivado的C程序设计原理》的相关信息,《基于Vivado的C程序设计原理》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《基于Vivado的C程序设计原理》的详细说明。
简介:最近利用Vivado进行了几个C程序的设计,取得一点小小心得,与大家分享。
众所周知,C程序一个重要内容就是main(),main()函数下面的程序都会被合成分析,在Vivado中被合成的程序称为顶级程序或者设计文件,任意在其中函数称为测试台,测试台用于确定被合成的顶级程序。

在Xilinx中,通过在测试台中对你在头文件包含的文件进行分别合成。测试台中一般包含了你在硬件中不能合成的程序,比如I/O对存储器的访问。

通过头文件就能定义测试台和设计文件,从而实现上传和共享。因此在Vivado设计中通常采用层设计。

下面我通过一个程序调用2个子程序说明:

hier_func为主程序,sumsub_func为加和减,shift_func为平移程序。以下的文件定义于头文件(hier_func.h),标记为:

• din_t

• dint_t

• dout_t

具体程序为:

#include hier_func.h

int sumsub_func(din_t *in1, din_t *in2, dint_t *outSum, dint_t *outSub)

{

*outSum = *in1 + *in2;

*outSub = *in1 - *in2;

}

int shift_func(dint_t *in1, dint_t *in2, dout_t *outA, dout_t *outB)

{

*outA = *in1 >> 1;

*outB = *in2 >> 2;

}

void hier_func(din_t A, din_t B, dout_t *C, dout_t *D)

{

dint_t apb, amb;

#include hier_func.h

int sumsub_func(din_t *in1, din_t *in2, dint_t *outSum, dint_t *outSub)

{

*outSum = *in1 + *in2;

*outSub = *in1 - *in2;

}

int shift_func(dint_t *in1, dint_t *in2, dout_t *outA, dout_t *outB)

{

*outA = *in1 >> 1;

*outB = *in2 >> 2;

}

void hier_func(din_t A, din_t B, dout_t *C, dout_t *D)

{

dint_t apb, amb;

sumsub_func(&A,&B,&apb,&amb);

shift_

顶级程序能够包含多级子程序,也可以只有一种顶级程序用于合成,为了合成多级程序,可以分组为单级顶级结构。

通过合成hier_func来说明这个问题:

1、将上例中的程序加入Vivado文件;

2、指定顶级程序为hier_func

那么在程序的头文件设计中就按如下的结构:

#ifndef _HIER_FUNC_H_

#define _HIER_FUNC_H_

#include <stdio.h>

#define NUM_TRANS 40

typedef int din_t;

typedef int dint_t;

typedef int dout_t;

void hier_func(din_t A, din_t B, dout_t *C, dout_t *D);

#endif

这个头文件包含了一些定义(如NUM_TRANS)在设计文件中并没有要求,这些定义可以用于包含相同头文件的测试台。

总体来说,C语言和Vivado可以完美结合,能产生不一般的化学反应。

提醒:《基于Vivado的C程序设计原理》最后刷新时间 2024-03-14 01:04:38,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《基于Vivado的C程序设计原理》该内容的真实性请自行鉴别。