矩阵相乘的例子

参考博客:http://blog.csdn.net/kkk584520/article/details/18812321

MatrixMultiply.c

    typedef int data_type;#define N 5void MatrixMultiply(data_type AA[N*N],data_type bb[N],data_type cc[N]){int i,j;for(i = 0;i<N;i++){data_type sum = 0;for(j = 0;j<N;j++){sum += AA[i*N+j]*bb[j];}cc[i] = sum;}}

修改后:

#include <ap_cint.h>
typedef uint15 data_type;#define N 5void MatrixMultiply(data_type AA[N*N],data_type bb[N],data_type cc[N]){int i,j;MatrixMultiply_label2:for(i = 0;i<N;i++){data_type sum = 0;MatrixMultiply_label1:for(j = 0;j<N;j++){sum += AA[i*N+j]*bb[j];}cc[i] = sum;}}

测试文件:TestMatrixMultiply.c:

#include <stdio.h>
#include <ap_cint.h>
typedef uint15 data_type;
#define N 5
const data_type MatrixA[] = {#include "a.h"
};
const data_type Vector_b[] = {#include "b.h"
};
const data_type MatlabResult_c[] = {#include "c.h"
};
data_type HLS_Result_c[N] = {0};
void CheckResult(data_type * matlab_result,data_type * your_result);int main(void)
{int i;printf("Checking Results:\r\n");MatrixMultiply(MatrixA,Vector_b,HLS_Result_c);CheckResult(MatlabResult_c,HLS_Result_c);return 0;
}
void CheckResult(data_type * matlab_result,data_type * your_result)
{int i;for(i = 0;i<N;i++){printf("Idx %d: Error = %d \r\n",i,matlab_result[i]-your_result[i]);}
}

a.h

{82},  {10},  {16},  {15},  {66},
{91},  {28},  {98},  {43},  {4},
{13},  {55},  {96},  {92},  {85},
{92},  {96},  {49},  {80},  {94},
{64},  {97},  {81},  {96},  {68}

b.h

{76},
{75},
{40},
{66},
{18}

c.h

{9800},
{15846},
{16555},
{23124},
{22939}

ip核顶层:

   module test_multiply_v1_0 #(// Users to add parameters here// User parameters ends// Do not modify the parameters beyond this line// Parameters of Axi Slave Bus Interface S00_AXISparameter integer C_S00_AXIS_TDATA_WIDTH = 32,// Parameters of Axi Master Bus Interface M00_AXISparameter integer C_M00_AXIS_TDATA_WIDTH    = 32,parameter integer C_M00_AXIS_START_COUNT  = 32)(// Users to add ports here// User ports ends// Do not modify the ports beyond this line// Ports of Axi Slave Bus Interface S00_AXISinput wire  s00_axis_aclk,input wire  s00_axis_aresetn,output wire  s00_axis_tready,input wire [C_S00_AXIS_TDATA_WIDTH-1 : 0] s00_axis_tdata,input wire [(C_S00_AXIS_TDATA_WIDTH/8)-1 : 0] s00_axis_tstrb,input wire  s00_axis_tlast,input wire  s00_axis_tvalid,// Ports of Axi Master Bus Interface M00_AXISinput wire  m00_axis_aclk,input wire  m00_axis_aresetn,output wire  m00_axis_tvalid,output wire [C_M00_AXIS_TDATA_WIDTH-1 : 0] m00_axis_tdata,output wire [(C_M00_AXIS_TDATA_WIDTH/8)-1 : 0] m00_axis_tstrb,output wire  m00_axis_tlast,input wire  m00_axis_tready);
// Instantiation of Axi Bus Interface S00_AXIS// Add user logic heremy_stream_ip my_stream_ip_v1_0_S01_AXIS_inst (.ACLK(s00_axis_aclk),.ARESETN(s00_axis_aresetn),.S_AXIS_TREADY(s00_axis_tready),.S_AXIS_TDATA(s00_axis_tdata),.S_AXIS_TLAST(s00_axis_tlast),.S_AXIS_TVALID(s00_axis_tvalid),.M_AXIS_TVALID(m00_axis_tvalid),.M_AXIS_TDATA(m00_axis_tdata),.M_AXIS_TLAST(m00_axis_tlast),.M_AXIS_TREADY(m00_axis_tready));  // User logic endsendmodule

ip核:(未完成)

`timescale 1ns / 1ps
module my_stream_ip ( ACLK, ARESETN, S_AXIS_TREADY, S_AXIS_TDATA, S_AXIS_TLAST, S_AXIS_TVALID, M_AXIS_TVALID, M_AXIS_TDATA, M_AXIS_TLAST, M_AXIS_TREADY, ); input                                    ACLK;
input                                    ARESETN;
output                                   S_AXIS_TREADY;
input      [31 :0]                      S_AXIS_TDATA;
input                                    S_AXIS_TLAST;
input                                    S_AXIS_TVALID;
output                                   M_AXIS_TVALID;
output     [31 :0]                      M_AXIS_TDATA;
output                                   M_AXIS_TLAST;
input                                    M_AXIS_TREADY; localparam NUMBER_OF_INPUT_WORDS  = 30; localparam NUMBER_OF_OUTPUT_WORDS = 30; localparam Idle  =3'b100; localparam Read_Inputs = 3'b010; localparam Write_Outputs  = 3'b001; localparam Wait_Calculate = 3'b000;//my add//send...reg start2;reg reset2;//get...wire done2;wire idle2;wire ready2;//data  reg [31:0] AA [0:29];reg [31:0] bb [0:4];wire [31:0] cc [0:4];wire cc_val [0:4];reg [31:0] AA_index;reg [31:0] bb_index;reg [31:0] cc_index;reg [2:0] state; reg [31:0] sum; reg [NUMBER_OF_INPUT_WORDS -1:0] nr_of_reads; reg [NUMBER_OF_OUTPUT_WORDS - 1:0] nr_of_writes; assign S_AXIS_TREADY  =(state == Read_Inputs); assign M_AXIS_TVALID = (state == Write_Outputs); assign M_AXIS_TDATA = sum; assign M_AXIS_TLAST = (nr_of_writes == 1); always @(posedge ACLK) begin  // process The_SW_accelerator if(!ARESETN)              // Synchronous reset (active low) begin state        <= Idle; nr_of_reads <= 0; nr_of_writes <=0; sum          <= 0; AA_index <= 0;bb_index <= 0;reset2 <= 1;start2 <= 0;end else case (state) Idle: if (S_AXIS_TVALID== 1) begin state       <= Read_Inputs; nr_of_reads <= NUMBER_OF_INPUT_WORDS - 1; sum         <= 0; end Read_Inputs: if(S_AXIS_TVALID == 1) begin if(nr_of_reads >= 5)beginAA[AA_index] <= S_AXIS_TDATA;AA_index <= AA_index + 1;endelsebeginbb[bb_index] <= S_AXIS_TDATA;bb_index <= bb_index + 1;endif (nr_of_reads == 0) begin state        <= Write_Outputs; reset2 <= 0;start2 <= 1;nr_of_writes <= NUMBER_OF_OUTPUT_WORDS - 1; end else nr_of_reads <= nr_of_reads - 1; end Wait_Calculate:if(done2 == 0)beginsum <= cc[0];state <= Write_Outputs;endWrite_Outputs: if(M_AXIS_TREADY == 1) begin if (nr_of_writes == 0) state <= Idle; else sum <= done2;nr_of_writes <= nr_of_writes - 1; end endcase end MatrixMultiply U1 (.ap_clk(S_AXI_ACLK),.ap_rst(reset2),.ap_start(start2),.ap_done(done2),.ap_idle(idle2),.ap_ready(ready2),.AA_0(AA[0]),.AA_1(AA[1]),.AA_2(AA[2]),.AA_3(AA[3]),.AA_4(AA[4]),.AA_5(AA[5]),.AA_6(AA[6]),.AA_7(AA[7]),.AA_8(AA[8]),.AA_9(AA[9]),.AA_10(AA[10]),.AA_11(AA[11]),.AA_12(AA[12]),.AA_13(AA[13]),.AA_14(AA[14]),.AA_15(AA[15]),.AA_16(AA[16]),.AA_17(AA[17]),.AA_18(AA[18]),.AA_19(AA[19]),.AA_20(AA[20]),.AA_21(AA[21]),.AA_22(AA[22]),.AA_23(AA[23]),.AA_24(AA[24]),.bb_0(bb[0]),.bb_1(bb[1]),.bb_2(bb[2]),.bb_3(bb[3]),.bb_4(bb[4]),.cc_0(cc[0]),.cc_0_ap_vld(cc_val[0]),.cc_1(cc[1]),.cc_1_ap_vld(cc_val[1]),.cc_2(cc[2]),.cc_2_ap_vld(cc_val[2]),.cc_3(cc[3]),.cc_3_ap_vld(cc_val[3]),.cc_4(cc[4]),.cc_4_ap_vld(cc_val[4]));
endmodule

ip核引用的为HLS从c语言生成的verylog代码。

转载于:https://www.cnblogs.com/shenerguang/p/3797144.html

Learn ZYNQ (7)相关推荐

  1. 【Kaggle Learn】Python 1-4

    [Kaggle Learn]Python https://www.kaggle.com/learn/python 一. Hello, Python A quick introduction to Py ...

  2. Xilinx Zynq FPGA Boards板

    Xilinx Zynq FPGA Boards板 Xilinx Zynq FPGA Boards 介绍 Styx是一个易于使用的Zynq开发模块,具有Xilinx的Zynq ZC7020 SoC和FT ...

  3. Blender赛车动画制作学习教程 Learn Race Car Animation with Blender

    使用Blender 2.93创建您自己的惊人汽车动画 你会学到什么 Blender的界面和导航 建模 UV制图 材料 动画 照明设备 渲染 合成 要求 下载并安装Blender.免费下载和免费用于任何 ...

  4. Blender3.0动画制作入门学习教程 Learn Animation with Blender (2021)

    要求 下载并安装Blender.免费下载和免费用于任何目的. 描述 加入我的动画课程. 在本课程中,我将从头开始讲述在Blender中创建动画场景的过程. 从第一步到最终渲染.在这个课程中,我们将使用 ...

  5. Unity与C#创建一个3D平台游戏 Learn to Create a 3D Platformer Game with Unity C#

    游戏开发变得容易了.使用Unity学习C#并创建您自己的3D平台! 你会学到什么 学习现代通用编程语言C#. 了解Unity中3D开发的功能 发展强大的可转移的解决问题的技能 了解游戏开发过程 了解面 ...

  6. 学会在Unity中创建一个Match-3益智游戏 Learn To Create a Match-3 Puzzle Game in Unity

    MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:48场讲座(6h 38m) |大小解压后:2.8 G ...

  7. Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity

    Unity中创建本地多人游戏完整案例视频教程 Learn To Create A Local Multiplayer Game In Unity MP4 |视频:h264,1280x720 |音频:A ...

  8. Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D C#: Learn To Code Making 3D Games

    Unity 3D游戏代码编程学习教程 Full Guide To Unity 3D & C#: Learn To Code Making 3D Games Full Guide To Unit ...

  9. 利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator

    一.前言 利用FPGA设计算法一直以来都是热点,同样也是难点.将复杂的数学公式 模型通过硬件系统来搭建,在低延时 高并行性等优势背后极大提高了设计难度和开发周期.Xilinx公司的sysGen(sys ...

  10. linux zynq ps dma,Zynq PS侧DMA驱动

    Linux中,驱动必然会有驱动对应的设备类型.在linux4.4版本中,其设备是以设备树的形式展现的. PS端设备树的devicetree表示如下 324 dmac_s: dmac@f8003000 ...

最新文章

  1. wps图表xy轴颠倒_还在嫌自己的图表丑?50+种可视化图表随你选
  2. 被英特尔“冷落”的Knights Mill 悄然发布了
  3. linux下内存测试mbw,【转帖】MBW内存测试
  4. J2EE dynamic web工程搭建 struts2
  5. python if else用法同一行_在Python的同一行中使用if else for和del吗?-问答-阿里云开发者社区-阿里云...
  6. 输入挂(bzoj 2901: 矩阵求和)
  7. ubuntu下的vim与ctags
  8. 在Python中从头开始模拟退火
  9. Echarts教程篇:概览
  10. “出色”IT项目经理的5大关键能力
  11. JAVA_OPTS设置详解
  12. 代写php代码作业,C++代写 CS 100 Project Two代做php实验作业
  13. Java如何解决模糊查询(数据库SQL语句,报表开发工具)
  14. Java自由虾旅行平台菜单功能
  15. EMAC和PHY层之间的关系以及在通信架构划分情况
  16. .NET Interop 互操作 COM+
  17. 近视眼用什么台灯比较好?防近视眼护眼台灯排名
  18. 查询IP信息接口罗列
  19. 鹰眸安全帽识别系统对施工现场管理水平的提升
  20. 中兴c300业务板_中兴OLT C300板卡添加

热门文章

  1. scala数组入门到熟悉
  2. bootstrap49-Bootstrap 分割的按钮下拉菜单
  3. [NOI导刊2010提高]黑匣子
  4. java-Apache Commons IO
  5. Swift - 炫酷放射弹出按钮菜单(改造自AwesomeMenu)
  6. Lua5.1中的API函数
  7. Qt5学习笔记之bin文件合成工具一:使用对话框选取本地文件并读取
  8. JDBC基础篇(MYSQL)——自定义JDBCUtil工具类
  9. 第一章 硬件介绍和环境配置
  10. 【oracle】oracle常用命令汇总