原创 MicroBlaze下高阻IO口的实现

2010-7-9 11:28 2532 3 3 分类: FPGA/CPLD

         前段时间手头一个项目中遇到的问题。硬件设计的时候将SDRAM同时挂在了两个FPGA上面,但实际工作的时候需要将其中一个FPGA连接SDRAM的管脚设计为高阻,避免影响另一片FPGA正常访问SDRAM。为了说清楚问题,将需要正常访问SDRAM的FPGA叫FPGA0,另一片FPGA叫FPGA1.


         1、FPGA1中使用纯逻辑来实现


          这个比较简单,将所有与SDRAM连接的接口如下设置即可:


          assign mpmc_0_SDRAM_CAS_n_pin    = (1'b1) ?  1'hz : 1'h1;


          即可保证该接口恒为高阻态。


         2、FPGA1中使用了MicroBlaze


          这需要设计一个简单的IP Core来实现管教高阻。首先需要通过EDK来生成一个PLB的core,系统会自动生成plb_tri.vhd和user_logic.vhd两个文件。再自己定义一个module来实现三态端口,起个名字叫tri_state.v吧。因为对verilog比较熟悉,所以这个模块用verilog来实现的。当然在uer_logic.vhd中对该模块的例化还得用VHDL来写。其实很简单,不过就是因为MicroBlaze的原因,实现过程和纯逻辑的实现不一样而已,不能直接通过assign语句来实现。必须定义三个信号来定义一个接口:


          input  [12:0]           mpmc_0_SDRAM_Addr_I    ;
          output [12:0]           mpmc_0_SDRAM_Addr_O    ;
          output                  mpmc_0_SDRAM_Addr_T    ;


          大家看明白了吧,信号结尾必须用_I, _O, _T,这样MicroBlaze会自动将该Pin脚设置为三态端口。剩下的就好办了,直接将


           mpmc_0_SDRAM_Addr_T     <= 1'b1; (至于为什么设为1,就需要熟悉IO接口的结构了,Xilinx提供的资料有,大家自己查)


           就可以保证该端口输入时候表现为高阻状态了,问题解决。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条