Мне нужно наложить ограничение на пакет данных, который не должен пересекать границу 4k - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь записать ограничение для пакета данных в системном verilog. У меня есть пакет данных, размер которого может быть 0-4096 бит, и мне нужно записать ограничение в моем классе пакетов таким образом, чтобы пакет был выровнен по 4 байта, и он не должен пересекать границу 4k или если начальный адрес больше 4k, он не должен пересекать границу 8 КБ и т. д. до 1 ГБ. Итак, проблема в том, что я могу написать ограничение для первой границы 4К, как показано ниже (если оно выглядит нормально?), Но это не будет верно, если начальный адрес выше 4К, и в этом случае он не должен пересекать 8К или если начальный адрес выше 8K, и так далее, как я могу написать общее ограничение для того же ??

class packet
int size;
rand bit    [31:0]  addr;        // start address
rand bit    [7:0]   data[]; // data 
rand bit    [15:0]  size;                //  size of packet

constraint size_c     { size inside [0:4096]; }
constraint addr_c     { addr[0:1]==0; // for 4 byte alignment
                        addr[12:0] <'h1000 - size; }

endclass

1 Ответ

1 голос
/ 05 апреля 2019

Я думаю, ты почти у цели. Я думаю, что вы имели в виду:

addr[11:0] + size <= 32'h1000 ; 

Я бы порекомендовал , а не , используя нестандартные литералы , то есть я бы порекомендовал сказать 32'h1000, а не 'h1000. Это связано с тем, что поведение таких литералов изменялось между Verilog-1995 и Verilog-2001, поэтому, вероятно, лучше всего избегать их.


module M;

  class packet;
    rand bit    [13:0]  addr;        // start address
    rand bit    [15:0]  size;        //  size of packet

    constraint size_c     { size inside {[1:4096]}; }
    constraint addr_c     { addr[1:0]==0; // for 4 byte alignment
                            addr[11:0] + size <= 32'h1000; }
  endclass

  initial
    begin
      packet p = new;
      repeat (10)
        begin
          p.randomize;
          $display("%p - %d", p, p.addr[11:0] + p.size);
        end
    end

endmodule

https://www.edaplayground.com/x/3gtq

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...