首页 > 解决方案 > 为什么我的双向端口只给我的输出,但输入是 8'hxx?

问题描述

我正在尝试为 RAM 的 dataBus 使用 inout 端口。我设计了具有不同输入端口的 RAM,用于 dataBUs_in 和输出 dataBus_out。后来将它们链接到顶部模块中的双向端口。模拟 inout 端口后,仅给出输出 datBus_out,对于 dataBus_in,它显示 8'hxx。我还尝试在我的 RAM 设计中使用两个 always 块,每个块用于写入和读取。

顶部模块代码:

ram_cpu ram_cpu_top(
    .clock(top_clock),
    .write(top_write),
    .writeBar(top_writeBar),
    .ramEnable(top_ramEnable),
    .dataBus_in(top_dataBus_in),
    .addressBus(top_addressBus),
    .dataBus_out(top_dataBus_out)
    );
    assign dataBus = (internal_control == 1'b0) ? top_dataBus_in : 8'hzz;
    assign top_dataBus_out = dataBus;

内存设计:

always @ (posedge clock)
begin //write
    if(ramEnable) begin
        if(write == 1'b1) begin
            
            ram[addressBus] <= dataBus_in;
        end 
  
        
    else if(write == 1'b0) begin
            dataBus_out <= ram[addressBus];     
             
        end 
        
    end 
end 

标签: verilog

解决方案


dataBus是通用的双向网络。top_dataBus_in应该由dataBus. dataBus应有条件地由top_dataBus_out

assign top_dataBus_in = dataBus;
assign dataBus = (internal_control == 1'b0) ? top_dataBus_out : 8'hzz;

注意:当internal_control为 1 时,应该驱动其他一些逻辑,dataBus否则它将处于浮动状态。浮动只有在注意到需要感知价值时才可以。在大多数双向设计中,下拉或上拉连接到总线。


推荐阅读