您的位置:首页 > 其它

verilog中inout的定义问题

2014-01-20 20:27 344 查看
最近在调试一个东西,用到了双向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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: