Файлы читаемых данных

На рис. 3.91 показан блок initial с именем Apply data, который предназначен для чтения данных и применения их к шине im data, которая направляет их на шину databas.

Файлы читаемых данных

Рис. 3.91. Файлы читаемых данных

Шестнадцатеричные данные из внешних файлов data1.dat и data2.dat читаются в переменные mem 1 и mem2. В каждом цикле тестирования данные из переменных mem1 и mem2 передаются на шину im data. Данные из переменной mem2 отстают от данных из переменной тет 1 на 100 наносекунд. Таким образом, в операции умножения данные из переменной тет 1 интерпретируются как данные для операнда Л, а данные из переменной тет2 интерпретируются как данные для операнда В. После размещения этих данных на шине im data устанавливается значение 8’hZZ. Это освобождает шину databas, поэтому, когда готов результат умножения, шина databas может управляться умножителем.

Применение сигнала start

На рис. 3.92 показан блок initial, в котором имеет место инициализация переменных и выдается сигнал start. С помощью оператора repeat формируются три импульса сигнала start длительностью по 100 наносекунд с периодом в 1400 наносекунд.

Инициализация переменных и сигнал start 3.5.3.3. Вычисление ожидаемого результата

Рис. 3.92. Инициализация переменных и сигнал start 3.5.3.3. Вычисление ожидаемого результата

На рис. 3.93 показан блок initial, который читает данные, переданные на шину databus блоком Apply data (рис. 3.91), и вычисляет ожидаемые результаты умножения. После сигнала start, когда шина databus обновляется, первый операнд читается в opndl. В следующий момент изменения шины databus читается операнд opnd2. Используя эти операнды, вычисляется ожидаемый результат.

Вычисление ожидаемых результатов 3.5.3.4. Чтение выхода умножителя

Рис. 3.93. Вычисление ожидаемых результатов 3.5.3.4. Чтение выхода умножителя

Когда умножитель оканчивает свою задачу, формируются сигналы msb_out и lsb_out, для того чтобы сигнализировать, что он подготовил два байта результата. Блок always на рис. 3.94 активируется по возрастающему фронту синхросигнала. После появления фронта синхросигнала, если сигнал msb_out или lsb_out имеет значение 1, он читает значение с шины databus и передает его в соответствующую позицию переменной multiplier result.

Чтение результатов умножения 3.5.3.5. Сравнение результатов

Рис. 3.94. Чтение результатов умножения 3.5.3.5. Сравнение результатов

На рис. 3.95 показан блок always, который отвечает за сравнение действительного и ожидаемого результатов умножения. После активного фронта синхросигнала, если сигнал done равен 1, сравниваются значения переменных multiplier_result и expected_result. Если значения этих переменных не совпадают, то выдается ошибка путем установления соответствующего значения переменной error.

Сравнение результатов

Рис. 3.95. Сравнение результатов

Представленный самовыполняемый тестовый пример проверяет функционирование умножителя на уровне регистровых передач. Этот проект является синтезируемым, и, поскольку в тестовом примере используется синхронизация, он может также использоваться для описания умножителя после синтеза.

В этом разделе показан полный проект системы с хорошо определенными операционным и управляющим устройствами. Проект демонстрирует верхний уровень проектирования, разбиение сигналов на данные и сигналы управления, а также полный маршрут от проектирования до тестирования системы. Этот маршрут будет использоваться в последующих разделах с целью иллюстрации применения языка Уепк^ для проектирования сложных цифровых систем, которые осуществляют доступ к памяти для чтения команд и данных.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >