Verilog 非法引用my inout数据类型中的网络数据
我是verilog的新手,我正在用verilog编写代码,用于创建能够读写数据的内存块。它有以下代码 我试过用一些类似问题的答案写下所有的东西,但仍然有一个错误Verilog 非法引用my inout数据类型中的网络数据,verilog,hdl,Verilog,Hdl,我是verilog的新手,我正在用verilog编写代码,用于创建能够读写数据的内存块。它有以下代码 我试过用一些类似问题的答案写下所有的东西,但仍然有一个错误 module memory( wr_n , rst_n ,data ,clk ,add , en); input wire wr_n; input wire rst_n; input wire clk; input wire en; parameter size = 255; para
module memory( wr_n , rst_n ,data ,clk ,add , en);
input wire wr_n;
input wire rst_n;
input wire clk;
input wire en;
parameter size = 255;
parameter n = 7;
inout wire [n:0] data;
input wire [n:0] add;
reg [n:0] mem [size:0];
integer i;
always @( posedge clk , negedge rst_n)
begin
if(!rst_n)
begin
for( i=0; i<=size; i=i+1 )
begin
mem[i] <= 8'hff;
end
end
else
begin
if(en)
begin
if(!wr_n) //read
data <= mem[add];
else //write
mem[add] <= data;
end
else
data = 8'h z;
end
end
endmodule
模块存储器(wr_n,rst_n,data,clk,add,en);
输入线wr_n;
输入线rst\u n;
输入线时钟;
输入线en;
参数大小=255;
参数n=7;
输入输出线[n:0]数据;
输入线[n:0]添加;
注册[n:0]成员[size:0];
整数i;
始终@(posedge clk,negedge rst_n)
开始
如果(!rst_n)
开始
对于(i=0;i有一种更好的使用inout端口的方法,它应该与逻辑隔离,以避免读写时发生冲突,请记住,无论何时使用inout端口,都要确保满足中提到的要点
其中一种解决方案是声明一个临时变量,用于读写和
通过使用连续赋值语句,将值分配给双向端口
下面的代码片段将让您更清楚地了解如何避免错误
reg [n:0] temp; // declare a variable and try to read and write with this variable
if(!wr_n) //read
temp <= mem[add];
else //write
mem[add] <= temp;
assign data = (wr_n==0)? temp : {n{1'bz}};
reg[n:0]temp;//声明一个变量并尝试使用该变量进行读写
如果(!wr_n)//读取
temp输入输出端口'data'的类型为wire
。因此,它不能用于的左侧。我尝试了它。但仍然得到“数据可能不是网络”在你上面建议的assign语句中。是的,我要如何传递我想用temp写入内存的数据值,因为我正在从测试台输入该值。你能检查一下我现在可以编译它吗!。谢谢。但是当我尝试为数据总线分配任何值时,我的测试台仍然会出错在初始语句下写入操作..错误再次为“非法引用网络数据”。是的,我已经声明它为net。如果它只是一种方法,说明如何使用它来避免您在问题中提到的错误,那么没有必要所有函数都基于此方法正常工作,从您的代码中我看到了很多缺陷,如果可能的话,为什么您不能在我提供的链接中共享tb,我已经知道了在
assign data = (wr_n == 0)? mem[add]:n{1'bz};
assign testbench_inout_signal = (wr_n == 0)? value_to_be_written :n{1'bz};