verilog - 为什么我的双向端口只给我的输出,但输入是 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
解决方案
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
否则它将处于浮动状态。浮动只有在注意到需要感知价值时才可以。在大多数双向设计中,下拉或上拉连接到总线。
推荐阅读
- mongodb - 如何仅对单个字段进行 MongoDB 不区分大小写的搜索?
- .net - 发送带有旧库 (Microsoft.ServiceBus.Messaging) 读取的新库 (Microsoft.Azure.ServiceBus) 的消息,其 BodyType - String
- caching - 指定清漆后端而不缓存
- python - 如何应用自定义函数来并行配对数组的明智元素?
- java - 添加凭据以访问 REST 控制器
- php - Codeigniter 中的无 Gocard 实现
- android - 为什么我在 FirebaseMessagingService 中的 onMessageReceived 不运行
- bash - 为什么 $computer_choice 不是随机的?
- postgresql - postgres:更改用户不更新密码
- node.js - 使用格式对日期字段进行排序不起作用