izumizawa / mc851

Projeto com objetivo de desenvolver um sistema computacional contendo, ao menos, um processador e seus componentes periféricos.
5 stars 0 forks source link

Síntese de blocos de memória na placa Tang Nano 9k não suporta leitura de múltiplos valores simultaneamente #25

Open paulopacitti opened 7 months ago

paulopacitti commented 7 months ago

A placa Tang Nano 9k possuí o chip GW1NR-9. Segundo seu manual, blocos de memória, como RAM, ROM e banco de registradores, são sintetizados no modelo Single Port mode ou Semi-Dual port mode. Seguem as definições:

From: http://cdn.gowinsemi.com.cn/DS117E.pdf

Single port mode: In the single port mode, BSRAM can write to or read from one port at one clock edge. During the write operation, the data can show up at the output of BSRAM. Normal-Write Mode and Write–through Mode can be supported. When the output register is bypassed, the new data will show at the same write clock rising edge.

Semi-Dual Port: supports read and write at the same time on different ports, but it is not possible to write and read to the same port at the same time. The system only supports write on Port A, read on Port B.

Assim, o acesso a dois endereços de memória simultaneamente não é possível de sintetizar na placa FPGA que temos. Assim, o código abaixo do register_file.v não consegue ser sintetizado corretamente na placa, visto que temos apenas uma porta de leitura:

 // Lógica de leitura
assign read_data1 = (read_reg1 != 0) ? registers[read_reg1] : 0;
assign read_data2 = (read_reg2 != 0) ? registers[read_reg2] : 0;

Deve ser conversado com o professor:

  1. comportamento da síntese: o Yosys é capaz de criar uma lógica em síntese que permita que tal código seja executável?
  2. Senão é possível, como contornar essa limitação?

Links: