В чем смысл стиля кода, как показано ниже для массива в SV [duplicate]

Используйте оператор while, пока пользователь не вводит истинное значение, и если входное значение не является числом или это значение null, пропустите его и попробуйте снова и так далее. В примере я попытался ответить на действительно ваш вопрос. Если мы предположим, что наш возраст составляет от 1 до 150, тогда принимается входное значение, иначе это неправильное значение. Для завершения программы пользователь может использовать клавишу 0 и вводить ее как значение.

Примечание: прочитайте комментарии вверху кода.

# If your input value is only a number then use "Value.isdigit() == False".
# If you need an input that is a text, you should remove "Value.isdigit() == False".
def Input(Message):
    Value = None
    while Value == None or Value.isdigit() == False:
        try:        
            Value = str(input(Message)).strip()
        except InputError:
            Value = None
    return Value

# Example:
age = 0
# If we suppose that our age is between 1 and 150 then input value accepted,
# else it's a wrong value.
while age <=0 or age >150:
    age = int(Input("Please enter your age: "))
    # For terminating program, the user can use 0 key and enter it as an a value.
    if age == 0:
        print("Terminating ...")
        exit(0)

if age >= 18 and age <=150: 
    print("You are able to vote in the United States!")
else:
    print("You are not able to vote in the United States.")
17
задан Greg 12 March 2014 в 20:11
поделиться

2 ответа

Описание и примеры можно найти в IEEE Std 1800-2012 & sect; 11.5.1 «Выделение векторного бита и выбор адреса». Первое появление IEEE - IEEE 1364-2001 (Verilog) & sect; 4.2.1 «Идентификация векторного бита и выбора части». Вот прямой пример из LRM:

logic [31: 0] a_vect;
logic [0 :31] b_vect;
logic [63: 0] dword;
integer sel;
a_vect[ 0 +: 8] // == a_vect[ 7 : 0]
a_vect[15 -: 8] // == a_vect[15 : 8]
b_vect[ 0 +: 8] // == b_vect[0 : 7]
b_vect[15 -: 8] // == b_vect[8 :15]
dword[8*sel +: 8] // variable part-select with fixed width

Если sel равно 0, тогда dword[8*(0) +: 8] == dword[7:0] Если sel равно 7, тогда dword[8*(7) +: 8] == dword[63:56]

Значение слева всегда является начальным индексом. Число справа - это ширина и должна быть положительной константой. + и - указывают на выбор битов более высокого или более низкого значения индекса, а затем начального индекса.

Предполагая, что address находится в формате little endian ([msb: lsb]), тогда if(address[2*pointer+:2]) является эквивалентом if({address[2*pointer+1],address[2*pointer]})

41
ответ дан Greg 20 August 2018 в 18:23
поделиться
  • 1
    Итак, что произойдет, если мы будем использовать a_vect [15 -: 32]? – umayneverknow 1 November 2017 в 20:17
  • 2
    @umayneverknow Я не помню, упоминала ли LRM, что происходит в сценарии принятия. Должна быть разрешена / ошибка так же, как a_vect[15 : -16]. Попробуйте и узнайте – Greg 2 November 2017 в 20:26

Это еще один способ указать диапазон битового вектора.

x +: N, Начальная позиция вектора задается x, и вы считаете вверх от x на N.

Существует также

x -: N, в этом случае стартовая позиция равна x и вы считаете вниз от x на N .

N является константой, а x - выражением, которое может содержать итераторы.

У него есть несколько преимуществ -

  1. Он делает код более читаемый.
  2. Вы можете указать итератор при ссылках на бит-срезы, не получая ошибку «не может иметь непостоянное значение».
15
ответ дан shparekh 20 August 2018 в 18:23
поделиться
Другие вопросы по тегам:

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