vivado 中的一个三态问题(封装IIC的axi总线IP)

 前几天一直在调自己写的AXI总线IIC IP核,本想着很简单的东西,硬是搞了好几天。主要是不太熟悉vivado的开发,具体就是三态的问题!!三态要放在最顶层的.v文件中,我的就是封装在IP里面,然后调试好久,打开综合后的文件才发现一直就是个OBUF,根本不是三态。建立了个新工程后调用了原装的AXI IIC后发现就是在最顶层中把信号接入IOBUF中,虽然不知道这样是什么原理,但想他这样写肯定有他的道理,不然没必要搞得这么复杂,还要在顶层中例化一个IOBUF。。。按他的样子,在IP中信号都是input 和ouput,只有在管脚时才inout。
 `timescale 1 ps / 1 ps


module top(
    input           sys_clk_clk_n,
    input           sys_clk_clk_p,
    // hdmi
    output          HDMI_R_CLK,
    output          HDMI_R_HSYNC,
    output          HDMI_R_VSYNC,
    output          HDMI_R_DE,
    output          HDMI_R_D0,
    output          HDMI_R_D1,
    output          HDMI_R_D2,
    output          HDMI_R_D3,
    output          HDMI_R_D4,
    output          HDMI_R_D5,
    output          HDMI_R_D6,
    output          HDMI_R_D7,
    output          HDMI_R_D8,
    output          HDMI_R_D9,
    output          HDMI_R_D10,
    output          HDMI_R_D11,
    output          HDMI_R_D12,
    output          HDMI_R_D13,
    output          HDMI_R_D14,
    output          HDMI_R_D15,
    // 7511
    inout           iic_sda,
    output          iic_scl,
    // 7611
    inout           iic_sda_1,
    output          iic_scl_1,
    // uart
    input           rs232_uart_rxd,
    output          rs232_uart_txd

    );


    // 调用block
    wire    [7:0]       hdmi_u;
    wire    [7:0]       hdmi_v;
    wire    [7:0]       hdmi_y;
    wire                clk_test;

    assign {HDMI_R_D7,HDMI_R_D6,HDMI_R_D5,HDMI_R_D4,
            HDMI_R_D3,HDMI_R_D2,HDMI_R_D1,HDMI_R_D0} = hdmi_y;

    assign {HDMI_R_D15,HDMI_R_D14,HDMI_R_D13,HDMI_R_D12,
            HDMI_R_D11,HDMI_R_D10,HDMI_R_D9,HDMI_R_D8} = hdmi_u;

    // 7511 IIC
    IOBUF IOBUF_inst0(
      .O(iic_sda_in),     // Buffer output
      .IO(iic_sda),     // Buffer inout port (connect directly to top-level port)
      .I(sda_r),        // Buffer input
      .T(~sda_dir)      // 3-state enable input, high=input, low=output
   );

   // 7611 IIC
    IOBUF IOBUF_inst1(
      .O(iic_sda_in_1),     // Buffer output
      .IO(iic_sda_1),     // Buffer inout port (connect directly to top-level port)
      .I(sda_r_1),        // Buffer input
      .T(~sda_dir_1)      // 3-state enable input, high=input, low=output
   );


   // 例化block
   system_wrapper system_wrapper_inst0
   (
    .clk_test               (   clk_test    ),
    .hdmi_clk               (   HDMI_R_CLK          ),
    .hdmi_de                (   HDMI_R_DE           ),
    .hdmi_hsy               (   HDMI_R_HSYNC        ),
    .hdmi_u                 (   hdmi_u              ),
    .hdmi_v                 (   hdmi_v              ),
    .hdmi_vsy               (   HDMI_R_VSYNC        ),
    .hdmi_y                 (   hdmi_y              ),

    .iic_scl                (   iic_scl       ),
    .iic_scl_1              (   iic_scl_1     ),
    .iic_sda_in             (   iic_sda_in    ),
    .iic_sda_in_1           (   iic_sda_in_1  ),
    .reset                  (   1'b0          ),
    .rs232_uart_rxd         (   rs232_uart_rxd),
    .rs232_uart_txd         (   rs232_uart_txd),
    .sda_dir                (   sda_dir       ),
    .sda_dir_1              (   sda_dir_1     ),
    .sda_r                  (   sda_r         ),
    .sda_r_1                (   sda_r_1       ),
    .sys_clk_clk_n          (   sys_clk_clk_n ),
    .sys_clk_clk_p          (   sys_clk_clk_p )
    );


endmodule   

顶层文件变成这样的了。。

另外在microblzae中还碰到一个stack overflowed的问题,这个要修改localmemory,默认是8KB,我把它修改成128KB,错误就没有了。注意配置这个128KB不是双击它配置的,而是在例化它后点击run block Automation出来的单独一页的配置界面中下拉选择(就一页配置界面)这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值