最近在调试一个东西,用到了双向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