官方论坛
官方淘宝
官方博客
微信公众号
点击联系吴工 点击联系周老师
您的当前位置:主页-old > 教程中心 > 问题解答 >

FPGA设计基础交流【汇总贴】

发布时间:2023-04-13   作者:admin 浏览量:

【问题1】SPI多字节发送是多个字节连在一起发还是分成单字节来进行发送?
答:每款芯片的数据手册,都会有时序图的介绍,需要按照芯片数据手册的要求进行通信。每款芯片的要求都是不同的。所以,您需要查阅数据手册。

【问题2】如何避免竞争和冒险的情况?
答: 竞争和冒险是由于组合电路中计算的延迟不一致而导致的。它是天然的、不可克服的现象。虽然它不可克服,但在FPGA设计里,它根本就不是一个问题,

   因为FPGA都是在D触发器的时钟上升沿对电路进行采样,只要时钟上升沿前,电路计算结果已经确定,竞争和冒险已经没有了,那就不会有问题。

   那设计时,如何确认时钟上升沿前,计算结果已经确定了呢?
   这就靠时序报告了:时序报告会告诉任何两个D触发器之间,它们电路延时之和,从而确认在上升沿之前计算结果确定。
   总而言之,设计时不用考虑竞争和冒险;设计完看,看时序报告;没有问题,那就正常;如果时序报告有问题,就解决时序问题。


【问题3】计数器分频怎么个不稳定法?

答: 1. 时钟在FPGA里是非常重要的,所有的寄存器都是统一在时钟的节拍下工作。这个时钟就相当于一个军队的司令部,

     寄存器都听从司令部的命令下工作。

   2. 一个稳定的系统,时钟是越少越好。就相当于,一个军队,司令部越少越好。如果司令部越多,

     那么部队之间的协作必须要增加流程和成本。

   3. 计数器分频的时钟,无形中增加了时钟个数,另一方面,就相当于弄一个自己独立的王国,自然就不稳定。
   

【问题4】仿真是正确的,但为什么上板就不行?

答:首先要明确,仿真可以而上板不行,这是属于研发过程中,非常非常之正常的现象,可以说仿真通过后,上板一次性就成功的概率,小之又小。

原因是:仿真只是用电脑模拟运行的情况,它与真实情况可能有所差别。例如:

1. 输入激励是您想象出来的,事实上是不是这样输入?
2. 您的代码是否可以综合出电路?
3. 您的仿真是否测试完所有的情况?
以上都表示了仿真和实际是有差距的,所以不能认为“仿真正确了,上板就正确”。

【问题5】:管脚未分配的现象老师,我把CPLD的一个引脚接到了LED灯,但是程序中没有分配这个管脚,

第一个版本的程序上电后这个LED灯一直是亮的。第二个版本上电后LED一直是灭的。这两个版本的程序,都没有对这个管脚分配,是什么原因导致的呢?

答:管脚如果未分配,则管脚电平值可认为是不可控,也就是随机。


【问题6】FPGA资源不足问题当程所使用的资源,超出FPGA芯片资源时,如何处理?
答: 1. 按照错误提示,判断是哪种资源不足,如管脚数、RAM、寄存器等。
       2. 阅读资源QUARTUS、ISE和VIVADO的资源报告,查看是哪些模块占用了哪些资源。

       3. 分析该项目程序中各个模块的资源占用情况,分析代码,综合运用多种方法,以求减少资源的使用,

       如速度换资源;去除冗余的逻辑;降低设计精度;速度换资源等方法。注意,这些都需要花费大量时间,一点一点去抠资源。

       4. 如果资源依然不足,可以考虑换更高级的芯片;或者改变功能需求等。


【问题7】 就是lvds恢复出数据和时钟,对齐是需要手动调节时钟相位,还是写代码自动调节?serdes
答:我们做法是手动调节相位对齐。理论上,任何功能都可以使用代码来调节,只是有没有必要以及复杂度而已。


【问题8】FPGA生成的DDS数据如何导出到matlab中

1. 可以通过串口、千兆网等接口,传送到电脑上;
2. 可以采用在线调试工具,如SIGNALTAP、CHIPSCOPE、VIVADO等,捕捉到信号,然后保存的方式得到数据。


【问题9】通常情况下rtl代码module里面的输入信号,值是哪里来的呢?   

答:  1. 来源于其他模块的输出
        2. 来源于FPGA外部的管脚,例如按键、其他芯片的输出信号等


【问题10】
老师,怎么将信号实现准确的ns级别的延时呢,有什么好思路吗?

答:[color=rgba(17, 31, 44, 0.56)]正规的做法,就是采用寄存器打拍来延迟,精度为一个时钟周期


【问题11】问一下关于敏感信号的事情,任何信号都可以被当作敏感信号吗?

也就是always模块里面:always @(posedge din_vld or negedge rst_n)begin这样写可以吗?

答:语法上是可以的,但不符合FPGA和ASIC的设计规范。一般这个是写时钟和复位信号。不规范的话,会造成系统的不稳定


【问题12】if(counter<</span>8)请问这句代码是什么意思呢,按理来说/的优先级高于左移运算符呀?

答:不清楚它要表达的含义。串并转换的方法,可以参考至简设设计原理与应用书籍, 串口案例。
FPGA至简设计原理与应用】书籍连载13 第三篇FPGA至简设计项目实践 第四章 串口通信
http://old.mdy-edu.com/plus/view.php?aid=1335(出处: 明德扬论坛)


【问题13】xilinx,spartan6的jtag引脚,tck,tms,tdi,tdo需要做上拉处理吗

  

这个是ALTERA EP4C的JTAG电路,仅供参考


【问题14】用FPGA输出0->1或者1->0的信号,我现在想把上升沿或者下降沿的时间拉长到10ms左右,用FPGA的输出管脚可以实现吗?

答:FPGA直接输出的数字信号,上升沿和下降沿都是很快就完成变化的。如果要控制变慢,

      实就是输出固定电平的信号,那么这个需要外置DAC来实现。


【问题15】我们的TFT显示屏是工作在DE模式,是吧?
答:我们的案例默认使用的是DE模式,如果需要非DE模式,可以手动修改底板硬件实现。


【问题16】很多的数字电子元件的引脚都是要求有明确的电平(0/1),但是有个别的器件引脚链接时,

               可以处于悬空状态【但很多的教材上写的 引脚不能悬空,因为可能导致数字逻辑电路的状态不确定】,这一点如何理解呢~?

答:对于这种引脚,需要去看对应芯片的数据手册,一般里面都会有介绍说明的。


问题17】CPLD是没有IP核可以使用吗?

答:看要使用的ip核是什么类型,像RAM、FIFO等固有资源都是有IP核的


【问题18】实质的时钟周期与仿真时钟周期有差别,这个差别会累积起来吗?

:仿真的时候使用的是理想时钟,例如50M时钟,在实质的板上不可能完全等于50M的,一定有差别。
      这种差别的积累,可能会对“总时间”有影响,例如计算1秒时钟,那么就有可能有差别了。

      但这种差别的积累,不会产生时序的混乱:因为FPGA内,所有D触发器,都是在一个时钟周期内计算完的,

      只要满足时序要求,不关心实际频率是多少,总之上升沿来就计算一次。

      如不清楚,请仿真,尝试用不同周期的时钟来对同一个电路仿真。


【问题19】如果扇出很大,high fanout  到了4000多,要怎么优化?

答:扇出是指一个信号驱动了很多其他信号(即这个信号是其他很多信号的产生条件),FPGA对扇出数量有要求,不能扇出太多。

       如果扇出太多了,该怎么优化呢?现举例如下: 假设信号A,驱动了信号BCDEFG,即扇出数为6。

       优化思路是:让A用寄存器分别产生信号A1和A2,再用A1驱动信号BCD,用A2驱动信号EFG。这样扇出数减少为3。


【问题20】如果FPGA芯片没有时钟晶振,其他IO口是不是就不能输入数据呀。晶振影响输入数据不?

答:要看输入是否需要时钟。

      例如:使用串口的时候,在电路上就接收和发送两根线,没有用到时钟,所以晶振不影响。
      而摄像头输出图像的时候,需要先给摄像头一个时钟,再进行相关的配置,这时晶振就有影响。

【问题21】异步信号慢时钟域采集到快时钟域的方法有吗
答:1、使用FIFO进行跨时钟域处理
      2、慢时钟域的信号到快时钟域,是可以被采集到的,跨时钟域之后进行打拍,使其同步化即可

【问题22】工程中经常使用的sop表示第一个有效数据、eop表示最后一个有效数据、mty表示无效字节数等,这些都是那些单词的缩写?

答:习惯性引用了华为项目时的缩写,具体不清楚。


【问题23】lvds和lvds_25有什么区别?

答:主要区别在于内部buffer的供电电源情况,在电气方面,两者是等效的(参见数据手册规格)但是内部的I/O电路配置不同



   拓展阅读