Мы пытаемся записать на чип SRAM на плате Terasic DE1 FPGA, однако мы получаем ошибки, связанные с управлением с тремя состояниями. Ошибки заключаются в следующем:Двунаправленная шина Verilog для интерфейса 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 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
Спасибо за помощь, мы изменили типы SRAM_LB_N и SRAM_UB_N на типы проводов, однако мы все еще не уверены в том, как исправить ошибку SRAM_DATA? Может ли inout port быть рег? –
Попробуйте создать регрессивный тип SRAM_DATA_REG, который вы назначаете с помощью всегда блока, а затем назначьте SRAM_DATA = SRAM_DATA_REG; – Tim
Или Сохраните его как тип провода и просто выполните: Назначить SRAM_DATA = LOGIC_WE_N? 16'bZ: writeData; – Morgan