Здесь есть несколько вопросов. Я знаком с SystemVerilog и никогда не работал с обычным Verilog, поэтому ваш пробег может отличаться, но я собираюсь использовать в основном основные вещи, которые должны присутствовать и в Verilog.
Первое, что вы объявиливсе как целое число, и это то, что вы получаете в средстве просмотра формы волны (поскольку нет никаких операторов $display()
, я предполагаю, что именно здесь вы проверяете свои результаты).
Если вы используете запись с фиксированной точкой, котораяполностью на вас как на реализации (отслеживание того, где находится точка после умножения и деления и т. д.), так и на стороне визуализации. Вы можете преобразовать число с фиксированной запятой в представление с плавающей запятой, поддерживаемое средствами просмотра формы волны, объявив вещественную переменную в зависимости от вашего вектора с помощью my_real = $bitstoreal(my_vector) / 2**point_position
.
Вторая проблема, которая, возможно, больше, заключается в том, что выобъявляют несколько начальных блоков для того, что я предполагаю, должны быть последовательными операциями. Поскольку Verilog используется главным образом для описания аппаратных средств, предполагается, что отдельные блоки являются отдельными вещами, а отдельные вещи ничего не знают друг о друге, если вы как-то не говорите им.
В вашем конкретном случае у вас есть вещь, которая читает файли помещает содержимое в память, вещь, которая суммирует содержимое памяти, вещь, которая делит сумму на число, и вещь, которая вычисляет дисперсию, исходя из содержимого памяти и среднего значения, которое вы вычислили. Поскольку все они стремятся выполнить свою работу как можно быстрее, для симулятора совершенно законно вычислить среднее значение пустой памяти, затем заполнить ее и затем вычислить дисперсию относительно неправильного среднего значения или любого другого порядка на самом деле.
Чтобы исправить это, нужно поместить все в один начальный блок, чтобы порядок был гарантирован.
Как примечание, все это не будет работать вне симулятора. Ваши вычисления могут работать на аппаратном уровне, но для их интерпретации с помощью цепочки инструментов потребуется совершенно другой стиль кодирования.