Могу ли я назначить 2 состояния из связанных битов доступа к 4 переменным состояния?

Вы можете просто решить его с помощью for-loop

private static double[] anArray;

public static void main(String args[]) {
    anArray = new double[10]; // create the Array with 10 slots
    Random rand = new Random(); // create a local variable for Random
    for (int i = 0; i < 10; i++) // create a loop that executes 10 times
    {
        anArray[i] = rand.nextInt(); // each execution through the loop
                                        // generates a new random number and
                                        // stores it in the array at the
                                        // position i of the for-loop
    }
    printArray(); // print the result
}

private static void printArray() {
    for (int i = 0; i < 10; i++) {
        System.out.println(anArray[i]);
    }
}

. В следующий раз, пожалуйста, используйте поиск этого сайта, потому что это очень распространенный вопрос на этом сайте, и вы можете найти много решений на google.

2
задан subh 13 July 2018 в 07:09
поделиться

1 ответ

Чтение из IEEE 1800-2012 Раздел 11.5.1 :

Бит может быть адресован с использованием выражения, которое должно оцениваться в самоопределяемом контексте. Если битсовый адрес недействителен (это вне границ или имеет один или несколько битов x или z), тогда значение, возвращаемое ссылкой, должно быть x для 4-состояния и 0 для 2-состояния значения. Битовый выбор или частичный выбор скаляра или реального переменного или реального параметра должны быть незаконными.

Как упоминалось в LRM, результат внеочередного выбор должен быть значением по умолчанию. В вашем случае с двумя переменными состояния (бит ) значение должно быть обнулено.

В руководстве по миграции VCS 2017 также исправлены ошибки для бита выберите параметры. Я пробовал следующий код и нашел удовлетворительные результаты с помощью последнего симулятора:

module top;
    reg [1:0] r2;
    bit [1:0] b;

    assign  r2= b[2:1] + b[3:2]; 
    initial begin
      b = 1;
      #1;
      $display("r2 = %b b[3:2] = %b", r2,b[3:2]);
    end

endmodule

Обратите внимание, что пример запускается на разных версиях симулятора. Другие симуляторы могут вести себя по-другому.

Выход VCS 2017:

бит [1: 0] r2; бит [1: 0] b; // -> r2 = 00 b [3: 2] = 00

reg [1: 0] r2; бит [1: 0] b; // -> r2 = 00 b [3: 2] = 00. VCS 2014 имеет ошибку, в которой он решает это уравнение с 4 значениями состояния.

бит [1: 0] r2; reg [1: 0] b; // -> r2 = 00 b [3: 2] = xx. Здесь x оптимизирован до значения по умолчанию бит.

reg [1: 0] r2; reg [1: 0] b; // -> r2 = xx b [3: 2] = xx

Обратите внимание, что результат всегда ожидается как «x», когда мы сами используем part-select как «x», ,

Частичный выбор, который адресует диапазон битов, которые полностью выходят из границ адреса вектора, упакованного массива, упакованной структуры, параметра или конкатенации или частичного выбора, который равен x или z должны давать значение x при чтении и не влиять на данные, сохраненные при записи.

Вышеописанный выше из того же раздела из LRM.

3
ответ дан sharvil111 17 August 2018 в 13:29
поделиться
Другие вопросы по тегам:

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