用于SRAM接口的Verilog双向总线
我们正试图在Terasic DE1 FPGA板上写入SRAM芯片,但我们在三态控制方面遇到了错误。错误如下:用于SRAM接口的Verilog双向总线,verilog,bidirectional,Verilog,Bidirectional,我们正试图在Terasic DE1 FPGA板上写入SRAM芯片,但我们在三态控制方面遇到了错误。错误如下: Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(32): object "SRAM_DATA" on left-hand side of assignment must have a variable data type Error (10137): Verilog HDL Pr
Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(32): object "SRAM_DATA" on left-hand side of assignment must have a variable data type
Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(33): object "SRAM_DATA" on left-hand side of assignment must have a variable data type
Error (10219): Verilog HDL Continuous Assignment error at inputOutputControl.v(52): object "SRAM_LB_N" on left-hand side of assignment must have a net type
Error (10219): Verilog HDL Continuous Assignment error at inputOutputControl.v(53): object "SRAM_UB_N" on left-hand side of assignment must have a net type
我们遇到问题的模块如下所示,有人能告诉我们如何使其工作吗
module ram_writer(
input CLK,
input RESET_N,
input V_PORCH_EN,
input LOGIC_WE_N,
input LOGIC_CE_N,
input [17:0] LOGIC_WRITE_ADDRESS,
input [15:0] LOGIC_WRITE_DATA,
input VGA_OE_N,
input VGA_CE_N,
input [17:0] VGA_READ_ADDRESS,
output [15:0] VGA_READ_DATA,
output reg SRAM_OE_N,
output reg SRAM_WE_N,
output reg SRAM_CE_N,
output reg SRAM_LB_N,
output reg SRAM_UB_N,
output reg [17:0] SRAM_ADDRESS,
inout wire [15:0] SRAM_DATA
);
reg [15:0] writeData;
always @(posedge CLK)
begin
writeData <= LOGIC_WRITE_DATA;
VGA_READ_DATA <= SRAM_DATA;
end
always @((posedge LOGIC_WE_N or writeData))
begin
if( LOGIC_WE_N == 1) SRAM_DATA = 16'bZ;
else SRAM_DATA = writeData;
end
always @(posedge CLK)
begin
if(V_PORCH_EN == 1) begin
SRAM_ADDRESS <= LOGIC_WRITE_ADDRESS;
SRAM_CE_N <= LOGIC_CE_N;
SRAM_WE_N <= LOGIC_WE_N;
SRAM_OE_N <= 1;
end
else begin
SRAM_ADDRESS <= VGA_READ_ADDRESS;
SRAM_CE_N <= VGA_CE_N;
SRAM_OE_N <= VGA_OE_N;
SRAM_WE_N <= 1;
end
end
assign SRAM_LB_N = 0;
assign SRAM_UB_N = 0;
endmodule
模块ram\u写入程序(
输入时钟,
输入复位,
输入V_门廊EN,
输入逻辑,
输入逻辑,
输入[17:0]逻辑写入地址,
输入[15:0]逻辑写入数据,
输入VGA_OE_N,
输入VGA\u CE\N,
输入[17:0]VGA\u读取地址,
输出[15:0]VGA_读取数据,
输出寄存器SRAM\u OE\N,
输出寄存器SRAM\u WE\N,
输出寄存器SRAM\u CE\N,
输出寄存器SRAM\u LB\N,
输出寄存器SRAM\u UB\N,
输出寄存器[17:0]SRAM_地址,
inout wire[15:0]SRAM_数据
);
reg[15:0]写入数据;
始终@(posedge CLK)
开始
writeData我认为:
Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(32): object "SRAM_DATA" on left-hand side of assignment must have a variable data type
Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(33): object "SRAM_DATA" on left-hand side of assignment must have a variable data type
指的是:
if( LOGIC_WE_N == 1) SRAM_DATA = 16'bZ;
else SRAM_DATA = writeData;
“wire”数据类型没有内存,因此必须使用连续赋值,而不是始终块来赋值
相反,在这里:
assign SRAM_LB_N = 0;
assign SRAM_UB_N = 0;
您不能通过连续分配来分配reg类型,它必须在always块中分配。我认为:
Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(32): object "SRAM_DATA" on left-hand side of assignment must have a variable data type
Error (10137): Verilog HDL Procedural Assignment error at inputOutputControl.v(33): object "SRAM_DATA" on left-hand side of assignment must have a variable data type
指的是:
if( LOGIC_WE_N == 1) SRAM_DATA = 16'bZ;
else SRAM_DATA = writeData;
“wire”数据类型没有内存,因此必须使用连续赋值,而不是始终块来赋值
相反,在这里:
assign SRAM_LB_N = 0;
assign SRAM_UB_N = 0;
您不能通过连续分配来分配reg类型,它必须在“始终”块中分配。感谢您的帮助,我们已将SRAM_LB_N和SRAM_UB_N更改为导线类型,但是我们仍然不确定如何修复SRAM_数据错误?inout端口可以是reg吗?尝试创建一个reg类型的SRAM\U DATA\U reg,通过always块进行分配,然后“分配SRAM\U DATA=SRAM\U DATA\U reg;”或者将其作为一种导线类型,只需执行以下操作:分配SRAM\u DATA=LOGIC\u WE\N?16'bZ:写入数据;感谢您的帮助,我们已将SRAM_LB_N和SRAM_UB_N更改为导线类型,但是我们仍然不确定如何修复SRAM_数据错误?inout端口可以是reg吗?尝试创建一个reg类型的SRAM\U DATA\U reg,通过always块进行分配,然后“分配SRAM\U DATA=SRAM\U DATA\U reg;”或者将其作为一种导线类型,只需执行以下操作:分配SRAM\u DATA=LOGIC\u WE\N?16'bZ:写入数据;