搜索
bottom↓
回复: 41

寻FPGA绝对高手,有偿寻求帮助

[复制链接]

出0入0汤圆

发表于 2012-11-20 09:49:07 | 显示全部楼层 |阅读模式
最近搞一个设计,其中用到了FPGA,遇到棘手问题,寻资深FPGA高手。技术要求和报酬,请留联系方式,随后我会主动联系后详谈。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-11-20 09:52:02 | 显示全部楼层
什么问题?

出0入0汤圆

 楼主| 发表于 2012-11-20 09:57:50 | 显示全部楼层
简单的讲主要是代码的稳定性问题,上SignelTap 问题就怎么都不出现了,抓不到问题出在什么地方

出0入4汤圆

发表于 2012-11-20 10:11:01 | 显示全部楼层
很正常的,时序问题!

出0入0汤圆

发表于 2012-11-20 10:28:26 | 显示全部楼层
还没解决?

出0入0汤圆

 楼主| 发表于 2012-11-20 10:42:55 | 显示全部楼层
wildone 发表于 2012-11-20 10:28
还没解决?

是啊,有愿意出手的没,时序问题?但怎么解决呢?

出0入0汤圆

发表于 2012-11-20 11:51:38 | 显示全部楼层
我预言,楼主的问题不会有人接手

出0入0汤圆

发表于 2012-11-20 12:24:09 | 显示全部楼层
这种问题关键是定位
首先时序要保证收敛吧
然后关注内部跨时钟域问题是否做好
还有就是输入输出时钟与数据对齐有没有做好约束

出0入0汤圆

 楼主| 发表于 2012-11-20 13:25:42 | 显示全部楼层
Cliff 发表于 2012-11-20 11:51
我预言,楼主的问题不会有人接手

说说你的理由,我觉得代码其实也没多复杂,高手重写一遍也要不了几天,我当初写好到调试还加一起也没一个星期。不是什么烂摊子,可以接受被人推翻我的设计重新做。

出0入0汤圆

发表于 2012-11-20 13:49:06 | 显示全部楼层
lz最好详细描述下问题,还有出错的地方

出0入0汤圆

发表于 2012-11-20 13:58:17 | 显示全部楼层
同意7楼的预言!

出0入0汤圆

发表于 2012-11-20 14:06:40 | 显示全部楼层
高手不一定能解决问题呀
你说一下问题 说清楚问题  
能解决的肯定告诉你

出0入0汤圆

 楼主| 发表于 2012-11-20 15:06:21 | 显示全部楼层
以下内容是我之前发的一个帖子:

我写了一段Fpga代码在飓风3的片子上跑,运行有点不稳定,但每次我用Signle tap 去抓问题数据的时候,又怎么都不会出问题。我基本断定是布局布线对时序有影响,但不知怎么去解决,是代码写的不好,还是别的什么没设置好?从quartusii的时序分析报告来看,系统可以运行的最大频率有200多M,我实际用的时钟是60M的,为什么还会有问题啊?苦恼中。。。

出0入0汤圆

发表于 2012-11-20 15:21:42 | 显示全部楼层
Junker 发表于 2012-11-20 15:06
以下内容是我之前发的一个帖子:

我写了一段Fpga代码在飓风3的片子上跑,运行有点不稳定,但每次我用Signl ...

这么低的频率应该不是时序的问题,可能是竞争冒险之类的问题吧,LZ可以把代码发上来,坛里热心人不少,不一定非要有偿找

出0入0汤圆

 楼主| 发表于 2012-11-20 17:23:34 | 显示全部楼层
毕竟还是商业产品的代码,下面是我摘了一段,也是出问题的一段,请各位看看,是否可以看出什么问题:
always@(posedge clk)
begin
        if(!nrst)
                begin
                mk_cnt_reg<=0;
                runed_steps_per_mk<=0;
                mk_sense_rise_temp<=0;
                mk_sense_fal_temp<=0;
                end
        else
                begin       
                if(mk_sense_rise) mk_sense_rise_temp<=1'b1;
                if(mk_sense_fal) mk_sense_fal_temp<=1'b1;
       
           //---------------------------------------------------------------------------------------          
                if ( (cs==0) && (add[6:0]==7'h18) && (add[9:7]==base_add) &&(wr==0) )
                        mk_cnt_reg[7:0]<=data_in;
                       
                else if ( (cs==0) && (add[6:0]==7'h19) && (add[9:7]==base_add) &&(wr==0) )
                    mk_cnt_reg[15:8]<=data_in;         
               
                else if(runed_steps==0)
                        runed_steps_per_mk<=0;
               
                else if(not_init_run_flag)//
                   begin
                   if(contrl_reg[3])//
                        begin
                        if(mk_sense_rise_temp&&(runed_steps_per_mk>MK_FILTER_STEP))
                                begin
                                runed_steps_per_mk<=0;//问题就出在在这一句有时候没有执行,下同                                        
                                        mk_sense_rise_temp<=1'b0;
                               
                                if(mk_cnt_reg==mk_top_vlu_reg)//达到峰值
                                        mk_cnt_reg<=1;
                                else
                                        mk_cnt_reg<=mk_cnt_reg+1;//问题就出在在这一句有时候没有执行,下同                                                                                     end
                        else
                                begin
                                        if(puls_out_fal)
                                                runed_steps_per_mk<=runed_steps_per_mk+1;
                                end
                        end
                   else
                        begin
                        if(mk_sense_fal_temp&&(runed_steps_per_mk>MK_FILTER_STEP))//
                                begin
                                runed_steps_per_mk<=0;//
                                mk_sense_fal_temp<=1'b0;
                       
                                if(mk_cnt_reg==mk_top_vlu_reg)//达到峰值
                                        mk_cnt_reg<=1;
                                else
                                        mk_cnt_reg<=mk_cnt_reg+1;

                                end
                        else
                                begin
                                if(puls_out_fal)
                                                runed_steps_per_mk<=runed_steps_per_mk+1;
                                end
                        end
                end
        end
end

出0入0汤圆

发表于 2012-11-20 19:36:50 | 显示全部楼层
我也碰到过  是用chipscop捕FPGA时序  添加chipscop模块之后就正常了
当时代码也很简单   
应该就是代码的问题  换一种方法写就OK了
我用的是spartan6

出0入0汤圆

 楼主| 发表于 2012-11-20 20:02:23 | 显示全部楼层
wangshaosh123 发表于 2012-11-20 19:36
我也碰到过  是用chipscop捕FPGA时序  添加chipscop模块之后就正常了
当时代码也很简单   
应该就是代码的 ...

怎么换一种写法啊?谁知道那一种写法好呢

出0入0汤圆

发表于 2012-11-20 20:33:57 | 显示全部楼层
if(mk_sense_rise) mk_sense_rise_temp<=1'b1;
  if(mk_sense_fal) mk_sense_fal_temp<=1'b1;
                                    
  mk_sense_rise_temp<=1'b0;
具体原因我不知道,但是你这几句代码,我总觉得挺纠结的。你说要是条件都满足了,会出现啥状况。。。。。比如某一个时钟这货本身是1,然后第一个if满足,后边赋0的也满足。这咋弄呢。你看看RTL网表给综合成什么样了,或者看一下map后的网表。。。

出0入0汤圆

 楼主| 发表于 2012-11-20 21:34:55 | 显示全部楼层
xlwxdl1 发表于 2012-11-20 20:33
if(mk_sense_rise) mk_sense_rise_temp

最后的那个赋0值的语句优先

出0入0汤圆

发表于 2012-11-21 10:04:27 | 显示全部楼层
本帖最后由 wangshaosh123 于 2012-11-22 09:14 编辑

不要一个if套一个if  

if
else if
else if试试

应该就是楼上说的那样      你条件重复了上面的条件满足了   就不往下面执行了
至于为什么有时候没暴露出来,这应该是ISE软件综合出来的结果都是随机的    所以改了一个地方,另外一个地方可能就不一样了  这个是ISE比较蛋疼的地方

所以你在分析每个条件的时候  一定要条理清晰  不能有任何重复发生

出0入0汤圆

发表于 2012-11-21 10:04:27 | 显示全部楼层
把 else if(not_init_run_flag) 去掉else试试

出0入0汤圆

发表于 2012-11-21 14:34:13 | 显示全部楼层
Junker 发表于 2012-11-20 13:25
说说你的理由,我觉得代码其实也没多复杂,高手重写一遍也要不了几天,我当初写好到调试还加一起也没一个 ...

要说理由的话,那就是,你还不懂FPGA吧,而且也没表现出想搞懂(而不是仅解决眼前问题)的意愿。
在本论坛,外行人有偿寻求帮助的,往往就是这个下场啦。
至于原因么,这个也不好深入了。总之,包括但绝不限于对项目难度的估计不足,导致期望支出与能解决问题人的期望收入相差悬殊。

出0入0汤圆

发表于 2012-11-21 16:00:14 | 显示全部楼层
按照FPGA设计流程把功能仿真,时序仿真做了 就找见问题了

出0入0汤圆

 楼主| 发表于 2012-11-21 17:31:09 | 显示全部楼层
本帖最后由 Junker 于 2012-11-21 17:33 编辑
Cliff 发表于 2012-11-21 14:34
要说理由的话,那就是,你还不懂FPGA吧,而且也没表现出想搞懂(而不是仅解决眼前问题)的意愿。
在本论 ...


你要是能对这个问题本身说点技术方面的好建议是最好不过了,不然你就是吝啬你那点”高深“的技术了

出0入0汤圆

发表于 2012-11-21 18:47:12 | 显示全部楼层
Junker 发表于 2012-11-20 17:23
毕竟还是商业产品的代码,下面是我摘了一段,也是出问题的一段,请各位看看,是否可以看出什么问题:
alway ...

至少也要描述一下功能吧,从时序上看太乱了吧,出问题那段到底在什么情况下该运行?

出0入0汤圆

发表于 2012-11-21 18:48:54 | 显示全部楼层
我觉得你还是先按照功能把状态转移图画出来,像这种还是用状态机工具做吧

出0入0汤圆

发表于 2012-11-21 19:21:05 | 显示全部楼层
贸然接受别人的东西,会死得很难看。我现在就死得很难看。

出0入0汤圆

发表于 2012-11-21 23:35:49 | 显示全部楼层
一个always只对一个寄存器赋值
保证问题解决

出0入0汤圆

 楼主| 发表于 2012-11-23 20:08:40 | 显示全部楼层
本帖最后由 Junker 于 2012-11-23 20:17 编辑
Cliff 发表于 2012-11-23 12:31
吝啬?你也好意思说吝啬?
到底是谁在那边叫“毕竟是商业代码”而不把问题描述清楚的?
反过来说人家吝啬 ...


1、只有你觉得自己是高手,搞技术还是要朴实点好,别那么装x,我说话算客气的了。
2、代码是公司的,怎么可能全发,搞研发的谁没有签保密协议的。在论坛要是找到愿意接手的人,签了合约,自然给全部代码。

出0入0汤圆

发表于 2012-12-3 15:08:26 | 显示全部楼层
                                begin
                                runed_steps_per_mk<=0;//问题就出在在这一句有时候没有执行,下同                                       
                                        mk_sense_rise_temp<=1'b0;
                                
                                if(mk_cnt_reg==mk_top_vlu_reg)//达到峰值
                                        mk_cnt_reg<=1;
                                else
                                        mk_cnt_reg<=mk_cnt_reg+1;//问题就出在在这一句有时候没有执行,下同     
丢了个end

出0入0汤圆

发表于 2012-12-3 15:33:36 | 显示全部楼层
大家还是静下来心来,好好交流为好。
To Junker:
    Cliff也算是热心的了,又没问你要报酬,虽然没有给你的代码明显的建议,不过还是建议你虚心的听听别人的意见,或许不慌不忙的交流能有意外的收获。
To Cliff:
    大哥,人家也是左思右想才想到阿莫这里求助,您就明显地给人家点提醒或建议,毕竟大家都是来打工的,可以像别的网友一样,给点实际的帮助。
   

出0入0汤圆

发表于 2012-12-3 15:46:00 | 显示全部楼层
这种风格的代码太程序语言化,在挑战综合器的能力。建议修改为状态机或者拆成综合器容易理解的代码段分段描述。

这种描述方式,往往综合后仿真就完蛋了,综合器综合理解到的行为和coding的人想的有差异。

出0入0汤圆

发表于 2012-12-3 19:23:45 | 显示全部楼层
楼主先把问题描述清楚,最好把自己做的一些工作和出现的现象描述清楚

出0入442汤圆

发表于 2012-12-3 20:57:52 | 显示全部楼层
这点代码足够反映LZ的风格了。太乱的if()else()倒不是最关键,有if没有else也不是太关键,但是&&,||之类的符号就大错特错了。虽然有时候也能综合出来,但是我相信多数情况下是综合不出正确结果的。但是奇怪的是加入SignalTap就正常,去就不正常,只有一个可能:代码不规范,有if没有else。LZ先好好查查代码,补上所有else,否则,用ISE=自杀。ISE很杯具,一旦没有else就会给你综合出一个Latch,而且这个Latch是不可控的。或者LZ改用Synplicity,这个工具能够比较智能地理解LZ的意图。根据经验,代码经过良好优化,用Synplicity可以达到更好的性能,但是如果代码比较烂,用这个工具反而会更慢。?SignalTap是XILINX的吧。那就对了。ISE的XST确实有BUG,但是一般情况下,代码风格无误的情况下,正确性是可以保证的。

出0入0汤圆

 楼主| 发表于 2012-12-11 10:44:49 | 显示全部楼层
谢谢大家的回复!不瞒大家说,我是软件工程师兼项目主管,项目组里搞FPGA的小弟是新手,写出的代码运行起来非常不稳定(比我写的还不稳定)。想再招个牛B的,可来面试的水平视乎都差不多(专门搞FPGA三年以上的没有遇到)。后来迫于赶项目进度,我就试着全部重新写了(以前大学的时候还是写过的,那时候用的是VHDL,工作后一直做软件),没想到写出这么个东西来,大家见笑了。

出0入0汤圆

发表于 2012-12-11 11:26:45 | 显示全部楼层
Junker 发表于 2012-12-11 10:44
谢谢大家的回复!不瞒大家说,我是软件工程师兼项目主管,项目组里搞FPGA的小弟是新手,写出的代码运行起来 ...

我觉得在这种情况下还是嵌入一个软核比较合适

出0入0汤圆

 楼主| 发表于 2012-12-11 13:25:06 | 显示全部楼层
mymainmail 发表于 2012-12-11 11:26
我觉得在这种情况下还是嵌入一个软核比较合适

主要是看中了FPGA的并行性。如果用软核,EP3C10的片子,可以同时放4个内核吗,还有,内核的速度可以达到多少?

出0入0汤圆

发表于 2012-12-11 14:14:29 | 显示全部楼层
Junker 发表于 2012-12-11 13:25
主要是看中了FPGA的并行性。如果用软核,EP3C10的片子,可以同时放4个内核吗,还有,内核的速 ...

   begin
                                runed_steps_per_mk<=0;//问题就出在在这一句有时候没有执行,下同                                       
                                        mk_sense_rise_temp<=1'b0;
                                
                                if(mk_cnt_reg==mk_top_vlu_reg)//达到峰值
                                        mk_cnt_reg<=1;
                                else
                                        mk_cnt_reg<=mk_cnt_reg+1;//问题就出在在这一句有时候没有执行,下同     
丢了个end

LZ你把这个end 补全 在看看,我觉得就是这个原因 这个if的有效区域认定出错了

出0入0汤圆

 楼主| 发表于 2012-12-11 14:30:00 | 显示全部楼层
yanzhe128 发表于 2012-12-11 14:14
begin
                                runed_steps_per_mk

多谢这位兄弟。刚才看了下代码,这个地方的End是没有掉了,是我发帖子的时候编辑出了问题。这个代码实现的功能是没有问题的,只是运行一天,总是会偶尔出一点错误,没有规律,运行不是绝对的稳定。问题就在这。有时候,一整天表现又很好。

出0入0汤圆

发表于 2012-12-11 16:34:37 | 显示全部楼层
Junker 发表于 2012-12-11 14:30
多谢这位兄弟。刚才看了下代码,这个地方的End是没有掉了,是我发帖子的时候编辑出了问题。这个代码实现 ...

时序导致的问题是无法用科学的角度去解释的

出0入0汤圆

发表于 2012-12-11 17:21:10 | 显示全部楼层
可以用时序分析 工具 分析下 组合逻辑部分的电路  延时是不是可靠
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 07:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表