如何用verilog编写一个并行向量相加?

iloveyy1112 2016-12-09 05:24:58
初学FPGA编程,我想学习一下如何能写一个向量相加的程序,比如输入a[n], b[n]求c[n]=a[n]+b[n],并且

a[1] = b[1] + c[1]
a[2] = b[2] + c[2]
...
a[n] = b[n] + c[n]

是同时计算的,也就是并行计算出来的。

以前学过一些GPU上的并行编程,在GPU上可以并发n个线程,每个线程有一个ID,每个线程可以读取a和b的一个元素并相加赋值给a,想知道如果用verilog语言能不能类似实现GPU上的这种计算方法?如果不行,那类似与这种并行向量相加的算法要如何实现?谢谢!
...全文
2604 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengcheng3020 2017-08-29
  • 打赏
  • 举报
回复
你可以把a ,b 的值根据需要放在一个大位宽的寄存器里,然后在时钟下做用非阻塞赋值 always @ (posedge clk) c <= a + b 就ok了
wpgwen111 2017-03-26
  • 打赏
  • 举报
回复
a[1] <= b[1] + c[1] a[2] <= b[2] + c[2] ... a[n] <= b[n] + c[n]
fly 100% 2016-12-12
  • 打赏
  • 举报
回复
非阻塞就是并行计算的
uid123 2016-12-10
  • 打赏
  • 举报
回复
跟向量的表达式有关,比方说极坐标与直角坐标就不一样,假定你的向量是在直角坐标系中,你的一个向量表达肯定是点1—点2的方式,这个向量所代表的含义是只从点2到点1的长度,方向是从点2指向点1,平时所谓的向量a=(a1,a2,a3)(只是举例,用简单的向量就行了),这个实际是a点-o点(坐标原点)的长度,由o点指向a的向量。向量a点-b点实际上是a向量-b向量。在直角坐标系中就是对应维度相减,然后方向就是由减数指向被减数。比方说复数空间内,实数和实数相加减,虚数和虚数相加减。你举例中的元素a[n],中a是一个向量,这个N是指这个a有n个维度,还是维度是1,在这个维度上的长度是N?

2,425

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 其他硬件开发
社区管理员
  • 其他硬件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧