Efectivamente la pregunta está mal situada. Debería moverse al foro de Verilog.
Tenemos un interface como el de abajo, en el que una CPLD está conectada por un lado a todos los pines de una SRAM paralela, por el otro al bus del sistema y por último a un puerto SPI de un microcontrolador.
Código: Seleccionar todo
wire [7:0] RAM_Data;
PSRAMArduino uut (
.Enable_Arduino(Enable_Arduino),
.Arduino_Data_out_Bit(Arduino_Data_out_Bit),
.Arduino_Data_in_Bit(Arduino_Data_in_Bit),
.Arduino_Clk(Arduino_Clk),
.Arduino_download(Arduino_download),
.Arduino_upload(Arduino_upload),
.RAM_Addr(RAM_Addr),
.RAM_Data(RAM_Data),
.RAM_WR(RAM_WR),
.RAM_OE(RAM_OE),
.RAM_CS(RAM_CS),
.Computer_Addr(Computer_Addr),
.Computer_Data(Computer_Data),
.Computer_WR(Computer_WR),
.Computer_OE(Computer_OE),
.Computer_CS(Computer_CS),
.nReset(nReset)
);
El microcontrolador puede leer o escribir datos en la SRAM a través del puerto SPI pasando por la CPLD que los convierte a paralelo y que es la que conecta con la SRAM.
El problema viene cuando quiero simular los datos que vienen desde la SRAM hacia la CPLD. Si no hago nada, la entrada es 8'bzzzzzzzz, ya que la entrada es un inout con la siguiente definición:
Código: Seleccionar todo
assign RAM_Data = (Enable_Arduino==1'b0) && (Arduino_WR==1'b0)? Computer_Data:
8'bzzzzzzzz;
Si declaro RAM_Data como wire [7:0] me da un error al assignarla (como es lógico), pero si la declaro como reg [7:0] me da error cuando intento arrancar la simulación diciendo "non-net variable can't be connected to inout port RAM_Data".
Por lo que me veo obligado a utilizar wire y asignar con force.
¿No hay alternativa, o esta es la manera natural de hacerlo?
Código: Seleccionar todo
#10;
force RAM_Data = 8'b11101010;
#10;
Arduino_download = 1;
#10;
for (i=0;i<=15;i=i+1)
begin
Arduino_Clk = !Arduino_Clk;
#10;
end