Verilog автоматическая задача

Чтобы сопоставить любой пробел, кроме новой строки, вы можете использовать [^\S\n] класс отрицанных символов. Или [\s-[\n]], но я предпочитаю первый, так как он переносим на другие движки регулярных выражений.

Теперь вы можете использовать регулярное выражение, которое будет соответствовать необязательным символам новой строки слева и справа от 1+ пробелов, отличных от новой строки. Затем вы можете проверить, совпадали ли какие-либо символы новой строки, и, если да, опустить пропущенный пробел, в противном случае заменить совпадение пробелом. Затем вам нужно будет заменить любые фрагменты из 3 или более символов новой строки двумя символами новой строки.

var result = Regex.Replace(input, @"(\n?)[^\S\n]+(\n?)", m =>
    !string.IsNullOrEmpty(m.Groups[1].Value) || !string.IsNullOrEmpty(m.Groups[2].Value) // If any \n matched
        ? $"{m.Groups[1].Value}{m.Groups[2].Value}" // Concat Group 1 and 2 values
        : " ");  // Else, replace the 1+ whitespaces matched with a space
var final_result = Regex.Replace(result, @"\n{3,}", "\n\n"); // Replace 3+ \ns with two \ns

Подробности

  • (\n?) - Захват группы 1: необязательный символ новой строки
  • [^\S\n]+ - 1+ пробелы, отличные от новой строки [ 118]
  • (\n?) - Группа захвата 2: необязательный перевод новой строки
  • \n{3,} - 3 или более новых строк.
18
задан cdleary 29 August 2008 в 08:56
поделиться

5 ответов

Это означает, что задача повторно используема - объекты, объявленные в задаче, динамично выделяются, а не совместно используются различными вызовами задачи.

Вы видите - некоторые из нас делают Verilog... (тьфу)

16
ответ дан 21 October 2019 в 05:30
поделиться

"Автоматическое" ключевое слово также позволяет Вам писать рекурсивные функции (с verilog 2001). Я полагаю, что они должны быть синтезируемыми, если они достигают нижнего предела, но я не уверен, есть ли у них поддержка инструмента.

я также, сделайте verilog!

3
ответ дан 21 October 2019 в 05:30
поделиться

"автоматический" действительно на самом деле означает "повторно используемый". Сам термин украден от языков программного обеспечения - например, C имеет "автоматическое" ключевое слово для объявления переменных, как выделяемых на стеке, когда объем, в котором это находится, выполнен и освобожден впоследствии, так, чтобы несколько вызовов того же объема не видели персистентные значения той переменной. Причина, которую Вы не могли услышать об этом ключевом слове в C, состоит в том, что это - класс памяти по умолчанию для всех типов :-) Альтернативы "статичны", что означает, "выделяют эту переменную статически (к единственному глобальному местоположению в памяти) и относятся к этой той же ячейке памяти в течение осуществления программы, независимо от того, сколько раз функция вызывается", and "volatile", which means, "это - регистр в другом месте на моем SoC или чем-то на другом устройстве, которое я не имею никакого контроля; компилятор, не оптимизируйте чтения мне далеко, даже когда Вы думаете, что знаете мое значение от предыдущих чтений без промежуточных записей в коде".

"автоматический" предназначается для рекурсивных функций, но также и для выполнения той же функции в различных потоках выполнения одновременно. Например, если Вы "разветвляетесь" от различных блоков N (использующий ветвление Verilog-> оператор соединения) и имеете их всех, вызывают ту же функцию одновременно, те же проблемы возникают как функция, называя себя рекурсивно.

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

23
ответ дан 21 October 2019 в 05:30
поделиться

Как Will и Marty говорят, автоматическое было предназначено для рекурсивных функций.

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

Создание функциональных автоматических мер это.

1
ответ дан 21 October 2019 в 05:30
поделиться

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

0
ответ дан 21 October 2019 в 05:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: