почему ПЗУ, созданное из распределенного блока памяти в Vivado, не может работать? - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь использовать генератор распределенной памяти, представленный vivado, для хранения некоторых данных. Но симуляция из ПЗУ всегда 'xxx'.

Вот мой IP-параметр: Я назвал его temp. Конфигурация памяти: Глубина = 160, ширина = 12, ПЗУ.

Конфигурация порта: параметры ввода: зарегистрирован

Вот мой тестовый стенд:

`timescale 1ns/1ps
module tb();
reg clk;
reg [6:0] a;
wire [11:0] out;

initial
begin
    clk <= 0;
    a <= 7'b0000000;
end
always #5 clk <= ~clk;
always #20 a <= a + 1;

temp u (.a(a), .clk(clk), .spo(out));
defparam u.inst.C_READ_MIF = "temp.mif";//initial ROM

endmodule

DEPTH = 160;
WIDTH = 12;
ADDRESS_RADIX = BIN;
DATA_RADIX = BIN;
CONTENT
BEGIN
0:100000000010;
1:100000000100;
10:000000000011;
11:100000000001;
100:100000001011;
101:000000000001;
110:000000000001;
111:000000000000;
1000:000000000000;
1001:100000000100;
1010:100000001000;
1011:100000000100;
1100:100000000001;
1101:100000000001;
1110:100000000000;
1111:000000000110;
10000:100000000011;
10001:100000000101;
10010:000000000000;
10011:100000000100;
10100:100000000011;
10101:000000000001;
10110:100000000000;
10111:000000000001;
11000:100000000100;
11001:000000000100;
11010:000000000000;
11011:000000000101;
11100:000000000101;
11101:000000000010;
11110:000000000011;
11111:100000000011;
100000:100000000010;
100001:000000000001;
100010:000000000001;
100011:000000000100;
100100:100000000000;
100101:000000000100;
100110:100000000000;
100111:100000000010;
101000:000000001000;
101001:000000000110;
101010:000000000000;
101011:100000000010;
101100:100000000101;
101101:100000000100;
101110:100000000011;
101111:100000001010;
110000:100000000000;
110001:100000000010;
110010:000000000111;
110011:100000000011;
110100:000000000001;
110101:100000000011;
110110:100000000100;
110111:000000000110;
111000:100000000000;
111001:100000000001;
111010:000000000100;
111011:000000000011;
111100:000000001010;
111101:100000001011;
111110:100000000000;
111111:000000000010;
1000000:000000000000;
1000001:000000000010;
1000010:000000000001;
1000011:000000000100;
1000100:100000000100;
1000101:100000000111;
1000110:000000000100;
1000111:100000000010;
1001000:000000000001;
1001001:100000000000;
1001010:000000000010;
1001011:100000000001;
1001100:100000001010;
1001101:000000000110;
1001110:100000000100;
1001111:000000000100;
1010000:100000000001;
1010001:000000000000;
1010010:000000000000;
1010011:000000000100;
1010100:000000000100;
1010101:100000000001;
1010110:100000000100;
1010111:000000000100;
1011000:100000000110;
1011001:000000000010;
1011010:000000000010;
1011011:000000000100;
1011100:000000001000;
1011101:100000000101;
1011110:100000000000;
1011111:000000000000;
1100000:000000000000;
1100001:100000000110;
1100010:100000000111;
1100011:100000000001;
1100100:100000000000;
1100101:100000000001;
1100110:100000001000;
1100111:000000000010;
1101000:000000000010;
1101001:000000000011;
1101010:100000000010;
1101011:000000000010;
1101100:100000000110;
1101101:100000000000;
1101110:000000000000;
1101111:000000000001;
1110000:000000000011;
1110001:100000000011;
1110010:100000000011;
1110011:100000000101;
1110100:000000001011;
1110101:100000000000;
1110110:100000000001;
1110111:000000000001;
1111000:000000000001;
1111001:100000000000;
1111010:100000000001;
1111011:000000001000;
1111100:000000000000;
1111101:100000000001;
1111110:100000000110;
1111111:100000000100;
10000000:000000000101;
10000001:000000000100;
10000010:000000000101;
10000011:100000000011;
10000100:100000000101;
10000101:000000000001;
10000110:000000000101;
10000111:000000000001;
10001000:000000000001;
10001001:000000000111;
10001010:100000000000;
10001011:100000000100;
10001100:100000001000;
10001101:000000000010;
10001110:100000000010;
10001111:100000000000;
10010000:000000000101;
10010001:000000000011;
10010010:100000000001;
10010011:000000000110;
10010100:000000000110;
10010101:100000000010;
10010110:100000000000;
10010111:000000000000;
10011000:100000000000;
10011001:100000000100;
10011010:000000000100;
10011011:000000000111;
10011100:000000000001;
10011101:100000000010;
10011110:100000000110;
10011111:100000000100;
END

Вот мой результат моделирования

Я не знаю, почему остается «000». А как мне использовать блок ПЗУ?

1 Ответ

2 голосов
/ 01 ноября 2019

Скорее всего, ваша инициализация не удалась. Проверьте наличие сообщения об ошибке в файле журнала симуляции, например «Не удается открыть ...».

Причина, по которой я подозреваю, заключается в том, что расположение файлов Xilinx в Vivado очень и очень противное. Они относятся к каталогу симуляции, который может быть 4 или 5 каталогов глубоко внутри директории проекта Vivado. Мало того, глубина недавно изменилась, когда я перешел на более новую версию, и мне пришлось адаптировать каждый путь на каждом старом стенде! (Спасибо, Xilinx !!)

Это пример симуляции, когда мне пришлось передать имя файла в моей тестовой среде (tb):

  .file_path         ("../../../../../test_data/"),
  .file_name         ("testpattern_00.bin"), 

Структура каталогов, которую я использую:

---+--tb
   |  |
   |  +-- test_bench.sv
   |  
   +--test_data
   |  |
   |  +-- testpattern_00.bin
   |  
   +--vivado_directory
      |
      +--vivado_project.xpr
...