Почему, по-видимому, нет задержки при чтении блочного ОЗУ

Я пытаюсь изучить Verilog, и мне было любопытно, почему блочная память моего FPGA, кажется, предоставляет данные, которые я запрашиваю, мгновенно. Я ожидал, что мне нужно будет подождать некоторое количество часов, прежде чем мои результаты будут доступны.

На ЦП традиционного компьютера единственные данные, доступные немедленно, - это то, что правильно хранится в регистре? Данные, хранящиеся в кеше или в оперативной памяти, должны быть извлечены в регистр, прежде чем с ними можно будет работать, верно? Являются ли эти объекты блочной оперативной памяти просто реализованными через регистры на чипе?

Спасибо

Откройте спецификации вашей оперативной памяти блока FPGA и посмотрите на временные диаграммы.
«На ЦП традиционного компьютера единственные данные, доступные немедленно, — это то, что правильно хранится в регистре?» Неправильно. Например, кэш-память L1 может предоставлять данные в конце одного тактового цикла.

Ответы (1)

Вы создали примитивный, сгенерированный IP-адрес или вывели его с помощью массива?

IP обычно имеет выбор для зарегистрированного вывода или нет.

Если примитивный или предполагаемый, вы решаете, регистрировать ли его (тактируемый процесс) или нет в своем RTL. Примитив обычно является асинхронным выходом, за исключением любых атрибутов, зависящих от поставщика, которые могут быть связаны с ним.

Как @EugeneSh. сказал: «Технический паспорт» расскажет вам все, что вам нужно знать.

Данные, хранящиеся в кеше или в оперативной памяти, должны быть извлечены в регистр, прежде чем с ними можно будет работать, верно?

Вам не нужно регистрировать сигнал, чтобы работать с ним... Зависит от ситуации. Для чтения памяти я бы, наверное, так и сделал.

Являются ли эти объекты блочной оперативной памяти просто реализованными через регистры на чипе?

Вы можете «втолкнуть» память в регистры во время синтеза, но, если у вас есть доступная ОЗУ, обычно вы будете использовать ОЗУ (и инструмент по умолчанию также реализует этот способ... особенно если вы использовали примитив). В техпаспорте будет указано, сколько у вас оперативной памяти и как она устроена. Обобщающий отчет расскажет вам, как это было реализовано.

Чтобы упростить жизнь, я бы просто вывел ОЗУ с помощью массива.

Я использую сгенерированный IP. Не могли бы вы уточнить, что вы подразумеваете под «зарегистрированным»? Означает ли предоставление ввода часов, что он «зарегистрирован» для этих часов?
Что касается сгенерированного IP-адреса, обычно есть вариант «зарегистрироваться» через графический интерфейс, который по существу обертывает ОЗУ и помещает регистр на выходе ... или это может быть ручное назначение атрибуту. Когда я говорю «зарегистрировать», я имею в виду непрозрачный триггер (D-FF), который использует часы для перемещения (регистрации) значения. т. е. с вашего вывода RAM на «сигнал с тактовым циклом позже», по-видимому, ваш выход или сигнал, с которым вы хотите работать.