FPGA使用技巧

摘要:
1IOB为了保证FPGA输入输出接口的时序,一般会要求将输入管脚首先打一拍再使用,输出接口也要打一拍再输出FPGA。因为,从FPGA的PAD到IOB里面的寄存器是有专用布线资源的,而到内部其他寄存器没有专用的布线资源。默认情况下,综合过程和MAP过程都是根据软件的分析自动判断是否要将I/O的寄存器放入IOBs中。如果需要强制指定,必须将PackI/ORegisteIntoIOBs的默认属性修改成需要的值。必须保证综合和MAP同时对该属性进行设定。

1 IOB

为了保证FPGA输入输出接口的时序,一般会要求将输入管脚首先打一拍再使用,输出接口也要打一拍再输出FPGA。将信号打一拍的方法是将信号通过一次寄存器,而且必须在IOB里面的寄存器中打一拍。因为,从FPGA的PAD到IOB里面的寄存器是有专用布线资源的,而到内部其他寄存器没有专用的布线资源。使用IOB里面的寄存器可以保证每次实现的结果都一样,使用内部其他寄存器就无法保证每次用的都是同一个寄存器且采用同样的布线。同时,为了使用输入输出延迟功能(Input / Output delay),也必须要求信号使用IOB里面的寄存器。
为了让I/O使用IOB里面的寄存器,需要设定综合与MAP(对应于Xilinx的ISE工具)的相关属性。默认情况下,综合过程和MAP过程都是根据软件的分析自动判断是否要将I/O的寄存器放入 IOBs中。如果需要强制指定,必须将PackI/O Registe Into IOBs的默认属性修改成需要的值。对于XST,可以将I/O Pack Registers Into IOB属性由默认的Auto 修改为Yes或No。对于Snyplify,可以在Verilog代码的模块声明中添加属性:/* synthesis syn_useioff = 1 */。具体应用如下module module_a(a,b,c) /* synthesis syn_useioff = 1 */ ; 。MAP过程PackI/O Registe Into IOBs属性可以设置成:Off,For Inputs Only,For Output Only,For Input and Output。需要特别注意的是,如果只在MAP过程中要求将I/O放入IOBs中,而在综合过程中没有强制要求,最终实现时I/O不一样会Pack Into IOBs。必须保证综合和MAP同时对该属性进行设定。

2 XST 综合错误报告修正 IBUFG

当输入时钟进入MMCME2_ADV时钟管理模块之前,用了IBUFG
    clkin1_buf : IBUFG
    port map
    (O => clkin1,
     I => CLK_100);
-- Clocking primitive
 --------------------------------------
 -- Instantiation of the MMCM primitive
 --  * Unused inputs are tied off
 --  * Unused outputs are labeled unused
 mmcm_adv_inst : MMCME2_ADV
 generic map
 (BANDWIDTH      => "OPTIMIZED",
  CLKOUT4_CASCADE   => FALSE,
  COMPENSATION     => "ZHOLD",
  STARTUP_WAIT     => FALSE,
  DIVCLK_DIVIDE    => 1,
  CLKFBOUT_MULT_F   => 10.000,
  CLKFBOUT_PHASE    => 0.000,
  CLKFBOUT_USE_FINE_PS => FALSE,
  CLKOUT0_DIVIDE_F   => 10.000,
  CLKOUT0_PHASE    => 0.000,
  CLKOUT0_DUTY_CYCLE  => 0.500,
  CLKOUT0_USE_FINE_PS => FALSE,
  CLKOUT1_DIVIDE    => 40,
  CLKOUT1_PHASE    => 0.000,
  CLKOUT1_DUTY_CYCLE  => 0.500,
  CLKOUT1_USE_FINE_PS => FALSE,
  CLKIN1_PERIOD    => 10.000,
  REF_JITTER1     => 0.010)
 port map
  -- Output clocks
 (CLKFBOUT      => clkfbout,
  CLKFBOUTB      => clkfboutb_unused,
  CLKOUT0       => clkout0,
  CLKOUT0B      => clkout0b_unused,
  CLKOUT1       => clkout1,
  CLKOUT1B      => clkout1b_unused,
  CLKOUT2       => clkout2_unused,
  CLKOUT2B      => clkout2b_unused,
  CLKOUT3       => clkout3_unused,
  CLKOUT3B      => clkout3b_unused,
  CLKOUT4       => clkout4_unused,
  CLKOUT5       => clkout5_unused,
  CLKOUT6       => clkout6_unused,
  -- Input clock control
  CLKFBIN       => clkfbout_buf,
  CLKIN1       => clkin1,
  CLKIN2       => '0',
  -- Tied to always select the primary input clock
  CLKINSEL      => '1',
  -- Ports for dynamic reconfiguration
  DADDR        => (others => '0'),
  DCLK        => '0',
  DEN         => '0',
  DI         => (others => '0'),
  DO         => do_unused,
  DRDY        => drdy_unused,
  DWE         => '0',
  -- Ports for dynamic phase shift
  PSCLK        => '0',
  PSEN        => '0',
  PSINCDEC      => '0',
  PSDONE       => psdone_unused,
  -- Other control and status signals
  LOCKED       => locked_unused,
  CLKINSTOPPED    => clkinstopped_unused,
  CLKFBSTOPPED    => clkfbstopped_unused,
  PWRDWN       => '0',
  RST         => '0');

 -- Output buffering
 -------------------------------------
 clkf_buf : BUFG
 port map
 (O => clkfbout_buf,
  I => clkfbout);

 clkout1_buf : BUFG
 port map
 (O  => CLK_50,
  I  => clkout0);

 clkout2_buf : BUFG
 port map
 (O  => CLK_25,
  I  => clkout1);

ERROR:Xst:2035 - Port <CLK> has illegal connections. This port is connected to an input buffer and other components.
FPGA使用技巧第1张

解决办法

选中synthesize,然后process->properties->Xilinx Specific Options,把add I/O buffer 的勾去掉。
FPGA使用技巧第2张

免责声明:文章转载自《FPGA使用技巧》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【JavaWeb学习】过滤器FilterWPF 打开文件 打开路径对话框下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FPGA入门1

FPGA入门知识介绍    近几年来,由于现场可编程门阵列(FPGA)的使用非常灵活,又可以无限次的编程,已受到越来越多的电子编程者的喜爱,很多朋友都想学习一些FPGA入门知识准备进行这个行业,现在关于FPGA入门知识的书籍、论坛、教程等种类繁多各式各样。下面笔者也通过搜寻一些关于FPGA入门知识的资料供大家学习和参考。 FPGA入门知识首先要...

基于FPGA的XPT2046触摸控制器设计

基于FPGA的XPT2046触摸控制器设计 小梅哥编写,未经许可,文章内容和所涉及代码不得用于其他商业销售的板卡 本实例所涉及代码均可通过向 xiaomeige_fpga@foxmail.com 发送邮件获取。 XPT2046是一款设计用于移动电话、个人数字助理、便携式一起、付款中断设备、触摸屏显示器等设备的4线制电阻触摸屏控制器。该芯片实质为一个多通道...

FPGA设计中的跨时钟域问题

转自:http://blog.163.com/sunhuifxd@126/blog/static/55859443201010131042581 跨时钟域问题 在一个FPGA设计中可能会用到多个时钟,每个时钟在FPGA内部形成一个时钟域,如果在一个时钟域中产生的信号需要在另一个时钟域中使用,那么需要特别小心! 到另一个时钟域的信号 假设一个在时钟域CLKA...

FPGA智能网卡综述(4): 开源DMA

https://zhuanlan.zhihu.com/p/359754525 Corundum 原版见FCCM2020 代码见:https://github.com/ucsdsysnet/corundum 这个专题主要对基于FPGA的智能网卡技术进行介绍,上篇介绍了NanoPU、PANIC、Tonic等,这次介绍“Corundum: An Open-Sou...

【转】说说Timing这回事

【转】说说Timing这回事 Intro 问:一个FPGA设计项目需要用哪些评判标准来检验? 功能正确; 时序收敛; 资源消耗少。 时序收敛,即Timing Closure,意思是使设计的各项时序指标能满足设计前所制定要求。因此,整个过程分为两部分: 制定时序要求 满足时序要求 Timing Constraints Classes 制定时...

浅谈FPGA资源评估

在使用FPGA过程中,通常需要对资源做出评估,下面简单谈谈如何评估FPGA的资源。 FF和LUT的数目: 这个在写出具体代码之前,初学者通常没法估算,但资深FPGA工程师会估算出一个数量级。通常的做法是系统架构划分好后可以复用的模块根据以前设计中的资源消耗数来估,新的模块写完代码后估。 RAM: 这块在实现架构定好后,基本能准确地估出来,各个模块需要用...