verilog中inout的定义问题

来源:互联网 发布:交通事故数据 编辑:程序博客网 时间:2024/05/21 15:43

最近在调试一个东西,用到了双向IO口,inout。在我的记忆中,inout得用wire型定义,网上很多人也说要定义为wire 型。但由于设计中的任务,我有意把 inout定义为 reg型。Quartus II 编译没问题,只不过modelsim仿真不行,编译通不过。但问题所在是,下到板子中时,板子能跑通。后来我常规的把 inout 定义为 wire型,Quartus 和modelsim 仿真肯定能通过,上板也能调通。

       二种方法所消耗的逻辑单元和 Fmax 都一样,所以我就产生了一个疑问。

疑问:

是不是inout可以定义为reg??如果有大神看到此文章,希望能给点见解,我入门没多久,那里有错误,希望能指正,

谢谢!!!

以下部分代码:

//--------------------------------------------------------------------------------------------

wire 型:

wire               emd;

       always @(*) begin

       if(dir == 1'b1) begin

              if(my_slave == 1'b1) begin

                     r_r_emd= r_emd;         // my_slave 为1时,返回本级数据给CPU

              end else begin

                     r_r_emd = datadw;        // my_slave 为0, 返回下一级数据     /*  datadw 为双向IO口下一级数据  */

              end

       end else begin

              r_r_emd = 1'b1;

       end

end

assign             dir = link;

assign            emd = (dir == 1'b1) ? r_r_emd : 1'bz;

 

//------------------------------------------------------------------------------------------

reg 型:

reg                 emd;

always @(*) begin

       if(dir== 1'b1) begin

              if(my_slave== 1'b1) begin

                     emd= r_emd;               // my_slave 为1时,返回本级数据给CPU

              endelse begin

                     emd= datadw;                     // my_slave为0, 返回下一级数据   /*  datadw 为双向IO口下一级数据  */

              end

       endelse begin

              emd= 1'bz;

       end

end 

1 0