[an error occurred while processing this directive]
|
Да, в AHDL есть и if, и case, и generate. И вложенные как угодно и куда угодно. Есть специальный тип переменной "MACHINE [OF BITS] WITH STATES" для удобного описания автоматов вместе с case. Более того, из-за отсутствия понятия "процесс" можно применять все конструкции в любом месте исходника, например расставив отдельные блоки IF в совсем разных местах и внутри них выполняя присваивания разных значений сигналам. При этом в разделе "DEFAULTS" можно указать значение сигала, если ни одно из условий, внутри которых есть присвоения ему чего либо, не выполнено. Соответственно если выполняется одновременно несколько условий, то результатом будет комбинаторная ф-ция сигналов из всех блоков с выполненными условиями (ф-ция или ИЛИ или И, в зависимости от значения в "DEFAULTS"). Этого нет ни в одном другом языке, а я к сожалению сильно привык к этой полезности.
Кстати на мой взгляд использование входов "CLK", "CLRN" и подобных - наоборот повышает читаемость, однозначно указывая на сигналы тактовых, сбросов, разрешений и т.д. И однозначно исключая всякие поползновения к синтезу "gated clocks". Хотя тут вопрос конечно спорный - кому что читабельнее. Электронщику - однозначно понятнее "сигнал тактовой" чем "возникшее событие".
А вот чего нет в AHDL - это присвоений по типу верилоговских "=" и "<=". Так как нет процессов. Любое присвоение в AHDL это нечто типа assign, но более в широком смысле.
Насчет оптимизации "первого уровня" для схемного ввода - а почему бы и нет, если схема есть по определению множество соединеных модулей, описанных на каких-то языках? Ну конечно автомат оно само из схемы не выцепит, если он не описан в виде модуля, а остальное типа счетчиков всевозможных - легко.
E-mail: info@telesys.ru