verilog - 双向输入端口上单端口 RAM 错误的行为模型
问题描述
考虑我们有一个单端口 2^n*m 位 RAM。其描述如下。它有一个地址端口、启用端口、一个 rw(读写)端口和一个双向数据端口,您可以通过它读取和写入数据。我的问题是到目前为止我无法使用我的代码通过此端口进行写入:
module dual_port_ram # ( parameter n=4,m=4) (rw,addr,data,enable,clk);
input rw,enable,clk;
inout reg [m-1:0]data;
input [n-1:0] addr;
reg [m-1:0] ram [(2^n)-1:0];
always @ (posedge clk) begin
if(enable) begin
if(rw)
ram[addr]=data;// wrtite
else
data=ram[addr];// read
end
end
endmodule
这是错误:
# SLP: Fatal Error: design.sv (3): Inout port 'data' of 'dual_port_ram' must be a net.
解决方案
inout
端口很棘手。通常,您需要创建一个单独的reg
信号来分配给它,例如data_reg
:
module dual_port_ram # ( parameter n=4,m=4) (rw,addr,data,enable,clk);
input rw,enable,clk;
inout [m-1:0] data;
input [n-1:0] addr;
reg [m-1:0] ram [(2^n)-1:0];
reg [m-1:0] data_reg;
assign data = (enable & !rw) ? data_reg : {m{1'bz}};
always @ (posedge clk) begin
if(enable) begin
if(rw)
ram[addr]=data;// write
else
data_reg=ram[addr];// read
end
end
endmodule
推荐阅读
- flutter - 如何将音频的 StreamedResponse 保存到 Flutter 中的文件?
- javascript - $scope 变量不加载值
- azure-devops - Azure DevOps PR 管道中的 SonarCloud 分析任务失败
- visual-studio - 解决方案中所有 Visual Studio 项目的相同配置项
- angular - 如何以角度反应形式从 html 中删除特定的动态元素
- java - 设置域名spring boot href
- python - SpeechBrain:带有 csv 的 dataio_prepare 函数
- reactjs - JavaScript中return语句中的解构变量
- css - 如何设置段落样式
- rest - 如何将分页与获取 REST 集合的下一个/上一个元素结合起来