在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4696|回复: 10

FPGA并行的研究与困惑!!

[复制链接]
发表于 2007-5-15 15:22:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
问一 个弱弱的问题,
对FPGA并行的理解,是不是就是每个功能模块,在同一个时刻都在执行自己的功能?
可是从输入到 输出不是在一条线上吗?
模块之间不是有联系的嘛,比如!,就像交通灯!我要一个倒计时模块倒计时,到0时就让另一个模块的输出改变状态!
状态的改变条件是由倒计时模块产生的,到0时我就得重新赋值,可是由不能在两个模块给同一变量赋值,这样我就得把所有的程序放在一个模块里,才能对其重新赋值!难到不同模块的相同变量我要起两个名才行!
说的很乱,因为我不知道FPGA并行是什么意思,在我看来除了时钟的产生(分频)是自己干自己的,其他的模块都是有联系的,一个模块状态的改变要看上一模块结果才行啊!

1:FPGA并行是什么意思
2:不能给不同模块的同一变量赋值也让我很郁闷!
3:组合逻辑判断和时序逻辑的状态改变是同时进行的吗,比如说状态机的三段是同时变的吗
4:没有输入变量的MOORE状态机状态的变化条件是不是其他逻辑模块产生的
不会的很多,问题说的可能不太明白,各位帮帮忙举个例子帮我理解一下并行执行是什么意思,各模块之间的关系!,(组合模块和时序模块的联系!
5:对与并行的理解,就是把一个FPGA分成几大块,每一块相当于一个小FPGA,不知道这样想行不行
6:组合逻辑的状态的输出,只有敏感变量发生变化是才变化,这么理解对吧,他的敏感变量是在时序逻辑中改变的,
他们之间只有逻辑变量的联系,没有时间上的绝对关系(同步,异步),不知道我这样理解对不对?


我想这些问题我搞不明白,只能用一个模块(always)编下去了!

强烈感谢大家的回复先!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!一定要帮我啊!
发表于 2007-5-16 09:10:18 | 显示全部楼层

一家之言!!!!!

你的并行是否指fpga要实现的功能模块使用并行算法?

我最近在看viterbi 算法方面的资料,里面有并行、串行、串并合用几种情况的!

觉得的你可以从某个模块来理解并行!

***********************************************
一家之言!!!!!
***********************************************
头像被屏蔽
发表于 2007-5-16 16:17:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2007-5-16 20:55:42 | 显示全部楼层
楼主对数字逻辑理解有问题,建议重头在学一遍,写逻辑和写软件是不一样的,在写代码之前就要清楚自己要生成什么样的电路,在写代码的时候要想到自己的代码会生成什么电路,一定要有时序的概念。
 楼主| 发表于 2007-5-16 23:15:50 | 显示全部楼层
也许我对逻辑理解是有些问题!也许是我没说明白!
我的理解:
比如说状态机:

1:
always @(CS or in)
case(CS)
S0: if(in)  NS=S1;
     else   NS=S0;

组合逻辑跟时序没有关系,它不断的对输入信号(in)进行判断,只要输入信号发生变化就改变NS,反之NS=CS保持原状态,也就是说这个逻辑就相当与一逻辑选择开关

always   @(posedge clk  )

case(NS)
S0ut<=2'b00;

如果这样说的没错,可不可以理解为在第一个上升沿对当前输入进行判断,决定下一状态,同时输出上一状态NS,也就是说在输出的同时进行判断!算是同步吧!

不知道我理解的对不对,愿大家指导!
2:
我想要问的是:

如果我改变状态的条件不是有输入决定的,而是由逻辑的运算结果决定的,可不可以去代替输入(IN)进行判断?
比如:
always  @(posedge clk)
begin
       count<=count+1;
if(count==10)
      in<=1;
      count<=0;
else
      in<=0;

end

3:
我想解决的:

就是我想把一个大模块,分成小模块,想用状态机解决,可是试了好多次,结果不正确,有时候就是不同步,当然加上RESET也不行!中间变量的传递我也试了,可还是不行!
所以我 对FPGA的工作流程产生的不小的疑问!希望大家能解决我的疑惑!
发表于 2007-5-18 23:45:56 | 显示全部楼层
你可以把一个大模块分成小模块,每一个小模块用状态机,大模块用状态机,大模块的状态机在适当的时候产生信号激活小模块状态机,这就是所谓major FSM和minor FSM。
发表于 2007-5-19 11:44:30 | 显示全部楼层
LZ的理解有问题
编C,C++,JAVA和用Verilog描述硬件电路有本质上的区别.
编C就是按照逻辑一层一层编下来,前后顺序要求高,因为是一步一步往下compile
描述一个硬件电路,首先要知道有几个模块,每个模块的出入端口,每个模块内部用到的寄存器,信号等
然后在用Verilog描述出来
不能两次赋值是肯定的,因为在电路里,那就是一条线,在每个具体的时间这条线的高低电平是个确定的值(不考虑竞争冒险等状态)
在时钟的触发沿这条线的数据是会刷新,
并发的思想我觉得是: 因为整个电路模块的各个动作是在时钟的触发沿才有效的,所以各个线的信号仅仅只是按照时钟和自身的逻辑工作而不考虑别的线的数据值.所以很多信号可以同时被触发,工作
强调一点:在开始编之前一定要清楚整个电路的样子,各个模块之间的接口,这个非常重要!
LZ可以仔细学一学Verilog或者VHDL,看看数字电路设计方向的书,自己做做几个项目.这样成长的会很快
PS:我是菜鸟,说的不对大家指正~
发表于 2007-5-22 05:38:45 | 显示全部楼层
lz的帖子看得我头晕◎◎
发表于 2007-5-24 20:30:30 | 显示全部楼层
建议楼主重新学习数字电子技术
发表于 2007-5-25 13:53:33 | 显示全部楼层
同意楼主仔细研究数字电路,分清硬件和软件的区别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-6 08:14 , Processed in 0.022075 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表