{"action":"created","comment":{"url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/comments/203347628","pull_request_review_id":138216361,"id":203347628,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMzM0NzYyOA==","diff_hunk":"@@ -1,52 +1,90 @@\n # 第二章\n \n+<<<<<<< HEAD\n+# 有限脉冲响应(FIR)滤波器 \n+=======\n # 有限脉冲响应(FIR)滤波器\n+>>>>>>> pr/1\n \n ## 2.1 概述\n \n ​\t有限脉冲响应(FIR)滤波器在数字信号处理(DSP)领域中很常用——它们可能是这个领域应用最广泛的运算。因为它们可以采用高度优化的体系结构，所以它们非常适合于硬件实现。它有一个关键特性即对连续信号元素进行线性变换 。这个特性可以很好的映射成一种数据结构（例如，FIFOs或者抽头延时线），这些数据结构可以在硬件中高效实现。一般来说，流处理很适合在FPGA中映射实现，例如，在本书中介绍的大多数例子都包含某种形式的流处理。\n \n+<<<<<<< HEAD\n+​\t 滤波器的两个基本应用是信号重建和信号分离。信号分离更常用到:将输入信号分离到不同部分。通常，我们认为它们是频率范围不同的信号，例如，我们可能设计低通滤波器，用来去除不需要的高频信号。或者，我们为了解调某特定信号，设计一个带通滤波器来筛选该特定信号频率，例如，在频移键控解调过程中隔离频率。信号重建是指滤除可能混入有用信号的噪声和其他失真，例如，通过无线信道传输数据，信号重建包括平滑信号和移除直流分量。\n+\n+​\t数字FIR滤波器经常处理由采样连续信号产生的离散信号。最熟悉的是在时间上抽样，即，在离散信号下进行处理。这些处理都是在固定采样间隔的条件下进行的。例如，我们用模数转换器以固定时间间隔采样天线的电压。或者，也可以通过采样光电二极管电流来测量光的强度。或者，在空间中采样。例如，我们可以采样一个由光电二极管组成的图像传感器不同位置的值，来创建一个数字图像。在文档[ [41](#41) ]中可以找到对信号和采样更深入的描述。\n+=======\n ​\t 滤波器的两个基本应用是信号重建和信号分离。信号分离更常用到:将输入信号分离到不同部分。通常，我们认为它们是频率范围不同的信号，例如，我们可能设计低通滤波器，用来去除不感兴趣的高频信号。或者，我们为了解调某特定信号，设计一个带通滤波器来筛选该特定信号频率，例如，在频移键控解调过程中隔离频率。信号重建是指滤除可能混入有用信号的噪声和其他失真，例如，通过无线信道传输数据，信号重建包括平滑信号和移除直流分量。\n \n ​\t数字FIR滤波器经常处理由采样连续信号产生的离散信号。最熟悉的是在时间上抽样，即，在离散信号下进行处理。这些处理都是在固定采样间隔的条件下进行的。例如，我们用模数转换器以固定时间间隔采样天线的电压。或者，也可以通过采样光电二极管电流来测量光的强度。或者，在空间中采样。例如，我们可以采样一个由光电二极管组成的图像传感器不同位置的值，来创建一个数字图像。在文档[[41](./BIBLIOGRAPHY.md#41)]中可以找到对信号和采样更深入的描述。\n+>>>>>>> pr/1\n \n ​\t采样数据格式取决于应用场景。数字通信领域通常使用复数(in-phase和quadrature或I/Q值)来表示一个采样数据。在本章后续，我们将设计一个复数FIR滤波器来处理这样的数据。在图像处理领域，我们经常把每个像素看作一个样本。一个像素可以有多个字段，例如红色、绿色和蓝色(RGB)颜色通道。我们希望根据应用以不同的方式对这些通道进行滤波。\n \n ​\t本章目的是提供一个从选用算法到应用高级语言综合进行算法硬件实现的基本流程。这个流程的第一步是对算法本身有深刻的理解。这使我们做代码重构和设计优化更加容易。下一节介绍FIR滤波器的理论和计算。本章的其余部分介绍对FIR滤波器进行各种基于HLS的优化。这是为了让读者对这些优化方式的有全面的认识。在后续章节中，每种优化方式都将进行详细介绍。\n \n ## 2.2 背景\n \n+<<<<<<< HEAD\n+​\t对滤波器输入脉冲信号得到的输出信号为该滤波器的 *脉冲响应* 。线性时不变滤波器的脉冲响应可以表征滤波器的所有特性。顾名思义，FIR滤波器（严格的线性时不变系统）的脉冲响应是有限的======。在已知滤波器脉冲响应的前提下，我们可以通过*卷积*的方法算出该滤波器任意输入的输出响应。这个运算过程结合滤波器脉冲响应（又可称为系数或阶)和输入信号用来计算输出信号。滤波器的输出也可以通过其他方式进行计算(例如，通过频域计算)，在本章中，我们关注时域计算。\n+\n+​\t N-阶FIR滤波器的系数h[]与输入信号x[]的卷积可由差分方程表示：\n+\n+$$\\begin{aligned}  y[i]=\\sum_{j=0}^{N-1}h[j]\\cdot x[i-j]\\end{aligned} \\quad(2.1)$$                                                                                 \n+=======\n ​\t对滤波器输入脉冲信号得到的输出信号为该滤波器的 *脉冲响应* 。线性时不变滤波器的脉冲响应包含关于滤波器的完整信息。顾名思义，FIR滤波器（严格的线性时不变系统）的脉冲响应是有限的。在已知滤波器脉冲响应的前提下，我们可以通过*卷积*的方法算出该滤波器任意输入的输出响应。这个运算过程结合滤波器脉冲响应（又可称为系数或阶)和输入信号用来计算输出信号。滤波器的输出也可以通过其他方式进行计算(例如，通过频域计算)，在本章中，我们关注时域计算。\n \n ​\t N-阶FIR滤波器的系数h[]与输入信号x[]的卷积可由差分方程表示：\n \n $$y[i]=\\sum_{j=0}^{N-1}h[j]\\cdot x[i-j]$$                                                                                   (2.1)\n+>>>>>>> pr/1\n \n 注意，要计算一个N-阶滤波器的输出值，需要N个乘法和N-1个加法。\n \n ​\t *滑动均值滤波器* 是低通FIR滤波器的一种简单形式，其所有系数都是相同的且和为1。例如3点滑动滤波器，其系数h =[1/3, 1/3, 1/3]。同时由于它卷积核的形状特点，它也被称为矩形滤波器。或者你可以想象一个滑动均值滤波器，它将输入信号的几个相邻样本相加并求平均值。在上面卷积方程中，用1/N代替h[j]并对公式重新排布整理，达到对N个元素求平均值相似的效果:\n \n+<<<<<<< HEAD\n+ $$\\begin{aligned} y[i]=\\frac{1}{N}\\sum_{j=0}^{N-1}x[i-j]\\end{aligned} \\quad(2.2)$$       \t\t\t\t\t\t\t\t\t\t\n+\n+​\t每个输出信号可以按照上面公式计算，上面公式总共使用N−1次加法和一次乘数为1 / N的乘法。很多时候最后的乘法也可以被其它运算操作重新组合并合并。因此滑动均值滤波器比常规FIR滤波器更简单。例如，当N = 3时，我们这样运算来计算y[12]:\n+\n+$\\begin{aligned} y[12]=\\frac{1}{3}\\cdot (x[12]+x[11]+x[10])\\end{aligned} \\quad(2.3)$\t\t\t\t\t\t\t\t\n+=======\n  $$y[i]=\\frac{1}{N}\\sum_{j=0}^{N-1}x[i-j]$$       \t\t\t\t\t\t\t\t\t\t(2.2)\n \n ​\t每个输出信号可以按照上面公式计算，上面公式总共使用N−1次加法和一次乘数为1 / N的乘法。很多时候最后的乘法也可以被其它运算操作重新组合并合并。因此滑动均值滤波器比常规FIR滤波器更简单。例如，当N = 3时，我们这样运算来计算y[12]:\n \n $y[12]=\\frac{1}{3}\\cdot (x[12]+x[11]+x[10])$\t\t\t\t\t\t\t\t\t(2.3)\n+>>>>>>> pr/1\n \n ​\t这个过滤器是因果系统，这意味着输出数据与当前输入值及以前的数据有关。系统的因果特性是可以改变的，例如以当前样本为数据中心时刻的处理，即y[12] = 13·(x[11] + x[12] + x[13])。虽然从根本上来说因果特性是系统分析的一个重要属性，但是对于硬件实现来说它没有那么重要，一个有限非因果滤波器可以通过数据缓冲或者重排列来实现转因果系统的转换。\n \n ​\t滑动均值滤波器可以用来平滑信号，例如去除随机(大部分是高频)噪声。随着N的阶数越高，我们会平均更多的样本，相应的我们必须进行更多的计算。对于滑动均值滤波器，N值的增大等效于减小输出信号带宽。根本上讲，它就像一个低通滤波器(虽然不是非常理想)。直觉上，这样解释是有意义的。当我们对越来越多的样本进行平均时，我们消除了输入信号中更高的频率分量。也就是说，“平滑”等同于降低高频分量。滑动滤波器是最优的减少白噪声同时保持最陡峭阶跃响应的滤波器，即高给定边缘锐度的情况下把噪声压到最低。\n \n+<<<<<<< HEAD\n+​\t注意通常来说，滤波器系数可以用来精确地创建许多不同类型的滤波器:低通滤波器, 高通滤波器，带通滤波器等等。一般来说，设计滤波器时，阶数越大提供的自由度越多，设计滤波器的性能越好。有大量的文献致力于为特定应用需求设计滤波器系数。在实现滤波器时，这些系数数值基本上是无关的，我们可以忽略系数本身是如何求得。但是，正如我们看到的滑动均值滤波器，滤波器的结构和特定系数对实现该滤波器需要执行的操作数产生很大影响。例如，对称滤波器有多个相同系数，我们可以将系数分组来减少乘法次数。在其他情况下，可以将固定滤波系数转换为移位和加法运算[ [34](#34) ]。在这种情况下，滤波器系数可以极大改变滤波器实现性能和所消耗资源[ [52](#52) ]。但是我们要暂时忽略这一点，重点关注设计具有固定系数的滤波器结构特点，而不是单纯利用固定系数滤波器运算。  \n+\n+## 2.3 FIR结构基础 \n+=======\n ​\t注意通常来说，滤波器系数可以用来精确地创建许多不同类型的滤波器:低通滤波器, 高通滤波器，带通滤波器等等。一般来说，设计滤波器时，阶数越大提供的自由度越多，设计滤波器的性能越好。有大量的文献致力于为特定应用需求设计滤波器系数。在实现滤波器时，这些系数数值基本上是无关的，我们可以忽略系数本身是如何求得。但是，正如我们看到的滑动均值滤波器，滤波器的结构和特定系数对实现该滤波器需要执行的操作数产生很大影响。例如，对称滤波器有多个相同系数，我们可以将系数分组来减少乘法次数。在其他情况下，可以将固定滤波系数转换为移位和加法运算[[34](./BIBLIOGRAPHY.md#34)]。在这种情况下，滤波器系数可以极大改变滤波器实现性能和所消耗资源[[52](./BIBLIOGRAPHY.md#52)]。但是我们要暂时忽略这一点，重点关注设计具有固定系数的滤波器结构特点，而不是单纯利用固定系数滤波器运算。  \n \n ## 2.3 FIR结构基础\n+>>>>>>> pr/1","path":"02-Finite-Impulse-Response-Filters.md","position":73,"original_position":73,"commit_id":"406cda1c90d53bcfe3477f0eea249ca4e0406826","original_commit_id":"406cda1c90d53bcfe3477f0eea249ca4e0406826","user":{"login":"sonnyhcl","id":10840522,"node_id":"MDQ6VXNlcjEwODQwNTIy","avatar_url":"https://avatars3.githubusercontent.com/u/10840522?v=4","gravatar_id":"","url":"https://api.github.com/users/sonnyhcl","html_url":"https://github.com/sonnyhcl","followers_url":"https://api.github.com/users/sonnyhcl/followers","following_url":"https://api.github.com/users/sonnyhcl/following{/other_user}","gists_url":"https://api.github.com/users/sonnyhcl/gists{/gist_id}","starred_url":"https://api.github.com/users/sonnyhcl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sonnyhcl/subscriptions","organizations_url":"https://api.github.com/users/sonnyhcl/orgs","repos_url":"https://api.github.com/users/sonnyhcl/repos","events_url":"https://api.github.com/users/sonnyhcl/events{/privacy}","received_events_url":"https://api.github.com/users/sonnyhcl/received_events","type":"User","site_admin":false},"body":"待解决冲突","created_at":"2018-07-18T11:48:23Z","updated_at":"2018-07-18T11:48:23Z","html_url":"https://github.com/xupsh/pp4fpgas-cn/pull/35#discussion_r203347628","pull_request_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/35","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/comments/203347628"},"html":{"href":"https://github.com/xupsh/pp4fpgas-cn/pull/35#discussion_r203347628"},"pull_request":{"href":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/35"}}},"pull_request":{"url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/35","id":201983932,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAxOTgzOTMy","html_url":"https://github.com/xupsh/pp4fpgas-cn/pull/35","diff_url":"https://github.com/xupsh/pp4fpgas-cn/pull/35.diff","patch_url":"https://github.com/xupsh/pp4fpgas-cn/pull/35.patch","issue_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/issues/35","number":35,"state":"open","locked":false,"title":"更新第三章","user":{"login":"onlypinocchio","id":7600875,"node_id":"MDQ6VXNlcjc2MDA4NzU=","avatar_url":"https://avatars0.githubusercontent.com/u/7600875?v=4","gravatar_id":"","url":"https://api.github.com/users/onlypinocchio","html_url":"https://github.com/onlypinocchio","followers_url":"https://api.github.com/users/onlypinocchio/followers","following_url":"https://api.github.com/users/onlypinocchio/following{/other_user}","gists_url":"https://api.github.com/users/onlypinocchio/gists{/gist_id}","starred_url":"https://api.github.com/users/onlypinocchio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/onlypinocchio/subscriptions","organizations_url":"https://api.github.com/users/onlypinocchio/orgs","repos_url":"https://api.github.com/users/onlypinocchio/repos","events_url":"https://api.github.com/users/onlypinocchio/events{/privacy}","received_events_url":"https://api.github.com/users/onlypinocchio/received_events","type":"User","site_admin":false},"body":"初版","created_at":"2018-07-17T15:36:58Z","updated_at":"2018-07-18T11:48:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ee8ee249568322c251e7fd4904d8fd1ddf5bc32a","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/35/commits","review_comments_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/35/comments","review_comment_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/comments{/number}","comments_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/issues/35/comments","statuses_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/statuses/406cda1c90d53bcfe3477f0eea249ca4e0406826","head":{"label":"onlypinocchio:master","ref":"master","sha":"406cda1c90d53bcfe3477f0eea249ca4e0406826","user":{"login":"onlypinocchio","id":7600875,"node_id":"MDQ6VXNlcjc2MDA4NzU=","avatar_url":"https://avatars0.githubusercontent.com/u/7600875?v=4","gravatar_id":"","url":"https://api.github.com/users/onlypinocchio","html_url":"https://github.com/onlypinocchio","followers_url":"https://api.github.com/users/onlypinocchio/followers","following_url":"https://api.github.com/users/onlypinocchio/following{/other_user}","gists_url":"https://api.github.com/users/onlypinocchio/gists{/gist_id}","starred_url":"https://api.github.com/users/onlypinocchio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/onlypinocchio/subscriptions","organizations_url":"https://api.github.com/users/onlypinocchio/orgs","repos_url":"https://api.github.com/users/onlypinocchio/repos","events_url":"https://api.github.com/users/onlypinocchio/events{/privacy}","received_events_url":"https://api.github.com/users/onlypinocchio/received_events","type":"User","site_admin":false},"repo":{"id":138050334,"node_id":"MDEwOlJlcG9zaXRvcnkxMzgwNTAzMzQ=","name":"pp4fpgas-cn","full_name":"onlypinocchio/pp4fpgas-cn","owner":{"login":"onlypinocchio","id":7600875,"node_id":"MDQ6VXNlcjc2MDA4NzU=","avatar_url":"https://avatars0.githubusercontent.com/u/7600875?v=4","gravatar_id":"","url":"https://api.github.com/users/onlypinocchio","html_url":"https://github.com/onlypinocchio","followers_url":"https://api.github.com/users/onlypinocchio/followers","following_url":"https://api.github.com/users/onlypinocchio/following{/other_user}","gists_url":"https://api.github.com/users/onlypinocchio/gists{/gist_id}","starred_url":"https://api.github.com/users/onlypinocchio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/onlypinocchio/subscriptions","organizations_url":"https://api.github.com/users/onlypinocchio/orgs","repos_url":"https://api.github.com/users/onlypinocchio/repos","events_url":"https://api.github.com/users/onlypinocchio/events{/privacy}","received_events_url":"https://api.github.com/users/onlypinocchio/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/onlypinocchio/pp4fpgas-cn","description":"中文版 Parallel Programming for FPGAs","fork":true,"url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn","forks_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/forks","keys_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/teams","hooks_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/hooks","issue_events_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/issues/events{/number}","events_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/events","assignees_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/assignees{/user}","branches_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/branches{/branch}","tags_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/tags","blobs_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/git/refs{/sha}","trees_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/statuses/{sha}","languages_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/languages","stargazers_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/stargazers","contributors_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/contributors","subscribers_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/subscribers","subscription_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/subscription","commits_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/commits{/sha}","git_commits_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/git/commits{/sha}","comments_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/comments{/number}","issue_comment_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/issues/comments{/number}","contents_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/contents/{+path}","compare_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/merges","archive_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/downloads","issues_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/issues{/number}","pulls_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/pulls{/number}","milestones_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/milestones{/number}","notifications_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/labels{/name}","releases_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/releases{/id}","deployments_url":"https://api.github.com/repos/onlypinocchio/pp4fpgas-cn/deployments","created_at":"2018-06-20T15:17:15Z","updated_at":"2018-07-17T16:42:06Z","pushed_at":"2018-07-17T16:42:03Z","git_url":"git://github.com/onlypinocchio/pp4fpgas-cn.git","ssh_url":"git@github.com:onlypinocchio/pp4fpgas-cn.git","clone_url":"https://github.com/onlypinocchio/pp4fpgas-cn.git","svn_url":"https://github.com/onlypinocchio/pp4fpgas-cn","homepage":"","size":8870,"stargazers_count":0,"watchers_count":0,"language":"CSS","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"xupsh:master","ref":"master","sha":"7b400c0ff0df2592ec84c039b0f7d7a1e8cd625c","user":{"login":"xupsh","id":6723694,"node_id":"MDQ6VXNlcjY3MjM2OTQ=","avatar_url":"https://avatars2.githubusercontent.com/u/6723694?v=4","gravatar_id":"","url":"https://api.github.com/users/xupsh","html_url":"https://github.com/xupsh","followers_url":"https://api.github.com/users/xupsh/followers","following_url":"https://api.github.com/users/xupsh/following{/other_user}","gists_url":"https://api.github.com/users/xupsh/gists{/gist_id}","starred_url":"https://api.github.com/users/xupsh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xupsh/subscriptions","organizations_url":"https://api.github.com/users/xupsh/orgs","repos_url":"https://api.github.com/users/xupsh/repos","events_url":"https://api.github.com/users/xupsh/events{/privacy}","received_events_url":"https://api.github.com/users/xupsh/received_events","type":"User","site_admin":false},"repo":{"id":134149668,"node_id":"MDEwOlJlcG9zaXRvcnkxMzQxNDk2Njg=","name":"pp4fpgas-cn","full_name":"xupsh/pp4fpgas-cn","owner":{"login":"xupsh","id":6723694,"node_id":"MDQ6VXNlcjY3MjM2OTQ=","avatar_url":"https://avatars2.githubusercontent.com/u/6723694?v=4","gravatar_id":"","url":"https://api.github.com/users/xupsh","html_url":"https://github.com/xupsh","followers_url":"https://api.github.com/users/xupsh/followers","following_url":"https://api.github.com/users/xupsh/following{/other_user}","gists_url":"https://api.github.com/users/xupsh/gists{/gist_id}","starred_url":"https://api.github.com/users/xupsh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xupsh/subscriptions","organizations_url":"https://api.github.com/users/xupsh/orgs","repos_url":"https://api.github.com/users/xupsh/repos","events_url":"https://api.github.com/users/xupsh/events{/privacy}","received_events_url":"https://api.github.com/users/xupsh/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/xupsh/pp4fpgas-cn","description":"中文版 Parallel Programming for FPGAs","fork":false,"url":"https://api.github.com/repos/xupsh/pp4fpgas-cn","forks_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/forks","keys_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/teams","hooks_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/hooks","issue_events_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/issues/events{/number}","events_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/events","assignees_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/assignees{/user}","branches_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/branches{/branch}","tags_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/tags","blobs_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/git/refs{/sha}","trees_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/statuses/{sha}","languages_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/languages","stargazers_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/stargazers","contributors_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/contributors","subscribers_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/subscribers","subscription_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/subscription","commits_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/commits{/sha}","git_commits_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/git/commits{/sha}","comments_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/comments{/number}","issue_comment_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/issues/comments{/number}","contents_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/contents/{+path}","compare_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/merges","archive_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/downloads","issues_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/issues{/number}","pulls_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls{/number}","milestones_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/milestones{/number}","notifications_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/labels{/name}","releases_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/releases{/id}","deployments_url":"https://api.github.com/repos/xupsh/pp4fpgas-cn/deployments","created_at":"2018-05-20T12:43:56Z","updated_at":"2018-07-18T07:39:24Z","pushed_at":"2018-07-18T07:34:25Z","git_url":"git://github.com/xupsh/pp4fpgas-cn.git","ssh_url":"git@github.com:xupsh/pp4fpgas-cn.git","clone_url":"https://github.com/xupsh/pp4fpgas-cn.git","svn_url":"https://github.com/xupsh/pp4fpgas-cn","homepage":"","size":10173,"stargazers_count":10,"watchers_count":10,"language":"CSS","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":9,"mirror_url":null,"archived":false,"open_issues_count":3,"license":null,"forks":9,"open_issues":3,"watchers":10,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/35"},"html":{"href":"https://github.com/xupsh/pp4fpgas-cn/pull/35"},"issue":{"href":"https://api.github.com/repos/xupsh/pp4fpgas-cn/issues/35"},"comments":{"href":"https://api.github.com/repos/xupsh/pp4fpgas-cn/issues/35/comments"},"review_comments":{"href":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/35/comments"},"review_comment":{"href":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/xupsh/pp4fpgas-cn/pulls/35/commits"},"statuses":{"href":"https://api.github.com/repos/xupsh/pp4fpgas-cn/statuses/406cda1c90d53bcfe3477f0eea249ca4e0406826"}},"author_association":"NONE"}}
{"actor":{"display_login":"sonnyhcl"}}